文件操作符表以及read,open,close,write

linux操作系统io
FILE *stdout 文件流指针
在这里插入图片描述
在这里插入图片描述
我们写入printf,操作系统调用write函数,write函数再第哦啊用sys_write函数,然后sys_write再调用 底层的设备驱动,调用设备驱动和底层相关,如果要写入网络则调用网卡驱动,如果要显示到显示器上那么就调用显示器 。
虚拟地址空间中有1g是内核区,用来虚拟文件系统,内存管理,进程管理,设备管理的,其中进程管理有一个pcb进程控制块,也就是一个mm_struct结构体,在这个结构体重有一个文件描述符表,从0开始到1023,其中没一个进程都会初始化0,1,2这三个数字来表示标准输入,标准输出,标准错误。
不是说了吗,printf调用write(1,…)函数其中第一个参数1代表的就是标准输出
其次是缓冲区什么时候刷新:手动刷新,fclose()关闭,缓冲区满了,这三种 情况下会刷新缓冲区
在这里插入图片描述文件描述符表

在这里插入图片描述

拿这一段代码来解释一下首先main进程创建,然后close关闭1,然后调用open函数打开文件1.log,int fd让1指向了这个文件(open函数特性,打开一个文件,用最小文件描述符指向这个文件),然后printf进行标准输出,如果这个时候关闭了文件的fd那么写入的内容还在缓冲区并未刷新,文件并未写入,当放开fflush(stdout)手动刷新缓冲区,再关闭则内容已写入。
在这里插入图片描述
文件io:
open:

  • int open(const char *pathname, int flags);
  • int open(const char *pathname, int flags, mode_t mode);
    在这里插入图片描述
    失败给返回-1,设置errno
    close:
    在这里插入图片描述

read:

  • ssize_t read(int fd, void *buf, size_t count);
  • 参数含义:文件描述符,缓冲区,缓冲区大小
  • 返回值:失败返回-1,成功返回成功读到的字节数,0代表读到了文件末尾

write:

  • ssize_t write(int fd, const void *buf, size_t count);
  • 参数含义:文件描述符,缓冲区,缓冲区大小
  • 返回值:成功返回写入的字节数,失败返回-1设置erron,0表示未写入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值