Linux系统编程(open, read, write)

2020-12-06  本文已影响0人  StevenHD
大纲

一、系统调用的文件IO

图解大纲
C标准的在用户空间,系统调用的在内核空间
C标准的文件IO将数据存储在一个8K大小的缓冲区中,FILE结构体中有一个buffer指针刚好指向这个8K大小的缓冲区,FILE结构体中还有文件描述符fd

内核空间有驱动,比如磁盘驱动,鼠标驱动来使用硬件
FD是一个非负整数

用户空间是每个进程都有的,内核空间是公用的
flush可以刷新缓冲区

二、open()函数

图解
代码图示
图解

log3是已有的文件,log4是新建的文件

cat命令


open函数的第二个参数


三、系统调用的open与creat

标准输入,标准输出,标准错误,都是3个文件

四、read()函数

4.1 基本概念

EAGAIN是read()函数返回的错误码之一
EINTR——正在读的时候被一个信号打断了,会返回这个错误值EINTR

4.2 read过程中被信号打断

  1. 一个字节都没读到,就被信号打断,read返回-1, errno被设置成EINTR
  2. 文件中有10个字节,也要读10个字节,但是读到5个字节,被信号打断,read返回5, errno被设置成EINTR
  3. 文件中只有5个字节,但是要读10个字节,没有被信号打断,read返回5, 不设置errno

第3种情况,第二遍再读一遍的话,读到的是0个字节

4.3 read封装

4.4 read从标准输入读内容

因为在一个进程打开的时候,标准输入输出错误文件就打开了,所以我们不需要再open操作,直接read就可以
标准输入阻塞地去读,有2种方式可以来结束读取——

  • 第一种是回车,这样会多读取一个字节,什么都不输入的话,就是0个字节。
  • 第二种是ctrl + d,这样就不会多一个字节,什么都不输入的话,就是0个字节。

五、write()系统调用

5.1 文件写

5.2 write()返回的错误码

write的封装——


5.3 write()写标准输出、标准错误

写标准输出
标准错误
结果
上一篇 下一篇

猜你喜欢

热点阅读