• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-03-23 22:13 Aet 隐藏边栏 |   抢沙发  3 
文章评分 0 次,平均分 0.0

文件描述符

  • 内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0—1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。
  • 常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)、read(读取)、write(写入)、ftruncate(改变文件大小)、lseek(定位)、fsync(同步)、fstat(获取文件状态)、fchmod(权限)、flock(加锁)、fcntl(控制文件属性)、dup(复制)、dup2、select和ioctl。

打开、创建和关闭文件

  • reat函数等价于open(pathname,O_CREAT|O_TRUNC|O_WRONLY,mode);
  • open()函数出错时返回-1,
  • 相关参数如下:
    flags和mode都是一组掩码的合成值,flags表示打开或创建的方式,mode表示文件的访问权限。
    LINUX中基于文件描述符的open函数,对于一个不存在的文件,不能通过O_WRONLY的方式打开,必须加上O_CREAT选项

    掩码 含义
    O_RDONLY 以只读的方式打开
    O_WRONLY 以只写的方式打开
    O_RDWR 以读写的方式打开
    O_CREAT 如果文件不存在,则创建文件
    O_EXCL 仅与O_CREAT连用,如果文件已存在,则强制open失败
    O_TRUNC 如果文件存在,将文件的长度截至0
    O_APPEND 已追加的方式打开文件,每次调用write时,文件指针自动先移到文件尾,用于多进程写同一个文件的情况。
    O_NONBLOCK 非阻塞方式打开,无论有无数据读取或等待,都会立即返回进程之中。
    O_NODELAY 非阻塞方式打开
    O_SYNC 同步打开文件,只有在数据被真正写入物理设备设备后才返回

读写文件

  • read和write函数,出错返回-1,读取完了之后,返回0, 其他情况返回读写的个数

文件定位

获取文件信息

结构体stat的定义为:

描述
S_ISLNK(mode) 判断是否是符号链接
S_ISREG(mode) 判断是否是普通文件
S_ISDIR(mode) 判断是否是目录
S_ISCHR(mode) 判断是否是字符型设备
S_ISBLK(mode) 判断是否是块设备
S_ISFIFO(mode) 判断是否是命名管道
S_ISSOCK(mode) 判断是否是套接字

文件描述符的复制

  • 系统调用函数dup和dup2可以实现文件描述符的复制,经常用来重定向进程的stdin(0),stdout(1),stderr(2)。
  • dup返回新的文件描述符(没有使用的文件描述符的最小编号)。这个新的描述符是旧文件描述符的拷贝。这意味着两个描述符共享同一个数据结构。
  • dup2允许调用者用一个有效描述符(oldfd)和目标描述符(newfd),函数成功返回时,目标描述符将变成旧描述符的复制品,此时两个文件描述符现在都指向同一个文件,并且是函数第一个参数(也就是oldfd)指向的文件。

标准输入输出文件描述符

与标准的输入输出流对应,在更底层的实现是用标准输入、标准输出、标准错误文件描述符表示的。它们分别用STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO三个宏表示,值分别是0、1、2三个整型数字。

  • 标准输入文件描述符 è STDIN_FILENO 0
  • 标准输出文件描述符 è STDOUT_FILENO 1
  • 标准错误输出文件描述符 è STDERR_FILENO 2

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享