UNIX环境高级编程 第三章 文件I/O

本文详细介绍了UNIX环境中关于文件I/O的各种操作,包括文件描述符、open/openat函数、creat函数、close、lseek、read、write、I/O效率、文件共享、原子操作、pread/pwrite、dup/dup2、sync/fsync/fdatasync、fcntl及ioctl函数的使用。还提到了/dev/fd用于表示文件描述符的特性。
摘要由CSDN通过智能技术生成

3.1 文件描述符

作用:唯一表示一个文件(unix中设备也被看作文件)
当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
文件描述符的范围:0~OPEN_MAX-1

标准shell建立的文件描述符关联:
STDIN_FILENO (文件描述符:0):标准输入
STDOUT_FILENO (文件描述符:1):标准输出
STDERR_FILENO (文件描述符:2):标准错误

3.2 函数open和openat

利用open或openat函数可以打开或创建一个文件

#include<fcntl.h>

int open(const char *path,  int oflag, ....);
int openat(int fd, const char *path, int flog, ....);

参数

path:

打开或创建的文件的名字

oflag:
oflag参数 功能
O_RDONLY 只读打开
O_WEONLY 只写打开
O_RDWR 读、写打开
O_EXEC 只执行打开
O_SEARCH 只搜索打开
O_APPEND 每次写时都追加到文件末尾
O_CLOEXEC 把FD_CLOEXEC设置为文件描述符标志
O_CREAT 若文件不存在则创建它。open函数需要指定第3个参数mode(openat指定第四个参数mode),用来指定文件的权限位
O_DIRECTORY 如果path引用的不是目录,则出错
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。
O_NOCTTY 如果path引用的是终端设备,则不将该设备分配作为此进程的控制终端
O_NOFOLLOW 如果path是一个符号链接,则出错
O_NONBLOCK 如果path引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选项为文件的本次打开操作和后续的I/O操作设置非阻塞方式
O_SYNC 使每次weite等待物理I/O操作完成,包括由该write操作引起的文件属性更新所需要的I/O
O_TRUNC 如果文件存在,并且为只写或读写成功打开,则将其长度截断为0
O_TTY_INIT 如果打开一个还未打开的终端设备,设置非标准termios结构,使其符合Single UNIXSpecification
O_DSYNC 使每次write操作要等待物理I/O完成,但是如果该操作并不影响刚写入的数据,则不需要等待文件更新
O_RSYNC 使每一个以文件描述符作为参数进行的read等待,直至所有对文件同一部分挂起的写操作完成
fd:

fd参数把open和openat区分开,共有三种可能性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值