参考:linux文件编程(2)——文件操作原理简述之文件描述符、动静态文件、块设备
作者:丶PURSUING
发布时间: 2021-04-09 11:14:12
网址:https://blog.csdn.net/weixin_44742824/article/details/115209312
系统占用的文件描述符
名称 | 宏 | 描述符 | 示例 | 说明 |
---|---|---|---|---|
标准输入 | STDIN_FILENO | 0 | read(0,buf,255) | 从标准输入(键盘)的地方读取255个字节存放到buf |
标准输出 | STDOUT_FILENO | 1 | write(1,buf,255) | 将buf中的255个字节写入到标准输出(shell,屏幕) |
标准错误 | STDERR_FILENO | 2 | - | 文件出错时的错误信息可以放到标准错误里面打印(工程做大时),相当于往2中扔垃圾 |
文件描述符的作用域仅为当前进程
系统文件描述符使用示例
#include <unistd.h>
#include <stdlib.h>
int main()
{
char* buf = (char* )malloc(128);
//从标准输入中读取
read(0,buf,128);
//打印到标准输出中
write(1,buf,128);
return 0;
}
运行结果:
静态文件与动态文件
静态文件:存放于磁盘,未被打开的文件
动态文件:当使用open
后,在linux内核会产生一个结构体来记录文件的信息,例如fd,buf,信息节点.此时的read
,write
都是对动态文件进行操作,当close
时,才把缓存区所有的数据写回磁盘中。
为什么不直接操作块设备(静态文件)
块设备本身读写不灵活,按照块来读写,而内存是按照字节单位操作的.例如一个块中存放着20个字节,想修改其中的一个字节,用块就无法修改.