fcntl.h
O_RDONLY
O_WRONLY
O_RDWR
大多数为 0 1 2
O_EXEC :只执行打开
O_SEARCH: 只搜索打开(在目录打开时验证它的搜索权限)<未定义>
O_APPEND:写时追加
O_EXCL : 如果同时指定O_CREATE则出错。在创建文件时候是原子操作
O_NOFOLLOW:如果是一个链接则出错
O_NONBLOCK:如果是fifo或者特殊文件,则非阻塞
O_TRUNC:如果同一目录创建的文件名字超过NAME_MAX则截断
O_SYNC:每次write等待物理IO操作完成
O_DSYNC:每次write等待IO。如果write不影响read则不等待。
O_RSYNC:(linux中 同O_SYNC一样)
open 和 openat
open( path, flags...,mode )
openat( fd, path, flags...,mode)`
区别:如果path是绝对路径,fd无意义。反之,则是相对于fd的相对路径
lseek(int fd, off_t offset, int whence)
whence值
SEEK_SET:文件开始处
SEEK_CUR:文件当前处
SEEK_END:文件末尾
如果 fd 指向的是一个管道、fifo、网络套接字。返回-1。
通过设置offset值可以扩充文件在磁盘的大小
read(int fd, void* buf,size_t bytes)
return
成功返回字节数
到达文件末尾则返回0
注
:在文件只有30个字节,读取大于个字节的时候返回30,在下一次read的时候才返回0
读取终端通常一次只能读一行
读取网络设备的时候,因为网络的缓冲机制可能返回值小于所要求读取的字节数
读取面向记录的设备读取的时候,一次最多返回一个记录
write(int fd, const void* buf, size_t nbytes)
return
成功返回的字节数于nbytes相等则表示成功
否则表示失败
注
:出错原因 1、 磁盘已写满 2、超过了给定进程的文件长度限制
原文:https://www.cnblogs.com/blog-morui/p/14757543.html