1. 系统api与库函数的关系

man 2 open

1.1 open

1.2 read/write

实现cat功能

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> int main(int argc, char *argv[])
{ if (argc != )
{
printf("./a.out filename\n");
return -;
} int fd = open(argv[], O_RDONLY); //读,输出到屏幕
char buff[];
int ret = ;
while (ret = read(fd, buff, sizeof(buff)))
{
write(STDOUT_FILENO, buff, ret); } close(fd); return ;
}

1.3 lseek

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> int main(int argc, char *argv[])
{ if (argc != )
{
printf("./a.out filename\n");
return -;
} int fd = open(argv[], O_RDWR|O_CREAT, ); write(fd, "helloword", );
//文件读写的位置此时到末尾
//需要移动读写的位置
lseek(fd, , SEEK_SET); char buf[] = {};
int ret = read(fd, buf, sizeof(buf)); if (ret)
{
write(STDOUT_FILENO, buf, ret);
} close(fd); return ;
}

计算大小

    int fd = open(argv[], O_WRONLY);

    int ret = lseek(fd, , SEEK_END);

    printf("file size is %d\n", ret);

    close(fd);

拓展文件

    //1. open
int fd = open(argv[], O_WRONLY|O_CREAT, ); int ret = lseek(fd, , SEEK_END); printf("file size is %d\n", ret); //需要至少写一次,否则不能保存
write(fd, "a", ); close(fd);

1.4 阻塞

  • read函数在读设备或者的读管道,或者读网络的时候。
  • 输入输出设备对应 /dev/tty
int fd = open("/dev/tty", O_RDWR|O_CREAT|O_NONBLOCK);

1.5 fcntl函数--设置非阻塞

#include <unistd.h>
#include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );
int flags = fcntl(fd, F_GETFL);
flags |= O_NONBLOCK;

Linux基础(一)系统api与库函数的关系的更多相关文章

  1. Linux 基础一(系统分区、格式化与挂载)

    1.Linux 基础之系统分区与格式化 讲分区之前,先说一下硬盘结构:硬盘(机械)的横截面是一个圆,并且被分成等大小的扇区,每个扇区的大小是 512Byte,其中有 446Byte 被用来存储启动信息 ...

  2. Linux基础-6.系统的启动过程

    Linux启动时我们会看到许多启动信息 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导 运行init 系统初始化 建立终端 用户登录系统 init程序的类型: ...

  3. Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python

    作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...

  4. Linux基础四---系统监控&硬盘分区

    ---恢复内容开始--- 一系统分区 1.top [参数] -b 批处理 -c 显示命令完全模式 -I 忽略失效过程 -s 保密模式 -S 累积模式 -i<时间> 设置间隔时间 -u< ...

  5. Linux基础命令-系统时间

    Linux启动时从硬件读取日期和时间信息,读取完成以后,就不再与硬件相关联 Linux的两种时钟 系统时钟:由Linux内核通过CPU的工作频率进行的: date:显示系统时间 +%D +%F dat ...

  6. Linux基础系列-系统密码破解

    无引导介质(光盘.iso)救援模式下root密码破解 第一步: GRUB启动画面读秒时按上下方向键,进入GRUB界面 第二步: 使用上下光标键选择要修改的操作系统启动内核(默认选择的即可),按e键进行 ...

  7. linux内核系统调用和标准C库函数的关系分析

    http://blog.csdn.net/skyflying2012/article/details/10044343

  8. Linux基础学习(1)--Linux系统简介

    第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...

  9. Linux基础二(挂载、关机重启与系统等级)

    一.Linux 基础之挂载 1. 挂载和查询 1.1 挂载 什么叫挂载?装系统的时候要给硬盘分区,在 Windows 中要分 C 盘 D 盘 DEF 盘,这个操作我们叫做分配盘符,分配盘符之后我们就可 ...

随机推荐

  1. new Date()导致日期增加了一天

    问题是:将字符串 "Sun Nov 12 14:00:00 CST 2017"  转成Date类型 有一个简单的方法是直接使用new Date(),但是这个方法对于某些日期的计算, ...

  2. rar自动压缩备份

    rem ******MySQL backup start********@echo offforfiles /p "D:\备份\发布软件备份" /m backup_*.sql -d ...

  3. 【BZOJ5294】[BJOI2018]二进制(线段树)

    [BZOJ5294][BJOI2018]二进制(线段树) 题面 BZOJ 洛谷 题解 二进制串在模\(3\)意义下,每一位代表的余数显然是\(121212\)这样子交替出现的. 其实换种方法看,就是\ ...

  4. iptables防火墙详解(一)

    -- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...

  5. jsp (2)

    一.内置对象: 二.如何在代码中使用js代码: <script type="text/javascript" src="js的路径名"></s ...

  6. Python中字符串、列表、元组、字典、集合常用方法总结

  7. js 获取随机数 Math.random()

    js 获取随机数 Math.random() // 结果为0-1间的一个随机数(包括0,不包括1) var randomNum1 = Math.random(); //console.log(rand ...

  8. apt could not get lock

    很多次遇到,就是记不住. sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/li ...

  9. A1129. Recommendation System

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  10. CMakeLists.txt使用

    背景:C++代码在编译的过程中需要进行文件的包含,该文主要介绍CMakeLists.txt相关语法 CMake之CMakeLists.txt编写入门