fcntl函数可以改变已打开的文件的性质:
#include<unistd.h>
#include<fcntl.h>
int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令。
fcntl有5个功能:
- cmd=F_DUPFD:复制现有的描述符。
- cmd=F_GETFD或F_SETFD:获得/设置文件描述符标记。
- cmd=F_GETFL或F_SETFL:获得/设置文件状态标志。
- cmd=F_GETOWN或F_SETOWN:获得/设置异步I/O所有权。
- cmd=F_GETLK或F_SETLK:获得/设置记录锁。
下面的两个函数可以用来复制一个现存的文件描述符:
#include<unistd.h>
int dup(int file);
int dup2(int file,int file2);
成功返回新描述符,否则返回-1。
调用dup(file)等效于:
fcntl(file,F_DUPFD,0);
调用dup2(file,file2)等效于:
close(file2);
fcntl(file,F_DUPFD,file2);
但dup2是原子操作。
转载请注明:爱开源 » Linux下不带缓冲的I/O操作函数3