完整包含linux下文件和目录的各种操作和注意事项,是此类开发的必备手册!
ENOTDIR: 路径名中当作目录的组件并非目录 EROFS: 文件系统只读
EFAULT: 路径名指向可访问的空间外 EIO: 输入输出错误
ENOMEM: 不能获取足够的内核内存 ETXTBSY:对程序写入出错
2.3.7.5 注意事项 2.3.7.6 使用示例
2.3.8 link 2.3.9 unlink 2.3.10 fcntl 2.3.10.1 函数原型
函数原型如下:
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock); open()函数为变参函数。 2.3.10.2 功能介绍
fcntl()针对(文件)描述符提供控制。参数fd是被参数cmd操作(如下面的描述)的描述符。针对cmd的值,fcntl能够接受第三个参数int arg。
fcntl函数有5种功能:
1. 复制一个现有的描述符(cmd=F_DUPFD)
2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD) 3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL)
4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN) 5. 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW) 2.3.10.2.1 复制描述符
最小的大于或等于arg的一个可用的描述; 与原始操作符一样的某对象的引用;
如果对象是文件(file)的话,则返回一个新的描述符,这个描述符与arg共享相
同的偏移量(offset);
相同的访问模式(读,写或读/写);
相同的文件状态标志(如:两个文件描述符共享相同的状态标志);
与新的文件描述符结合在一起的close-on-exec标志被设置成交叉式访问
execve(2)的系统调用。
实际上调用dup(oldfd); 等效于
fcntl(oldfd, F_DUPFD, 0); 而调用dup2(oldfd, newfd); 等效于