flock函数c语言 c语言的clock函数( 四 )


EINVAL 参数mode 不正确 。
ENAMETOOLONG 参数pathname太长 。
ENOTDIR 参数pathname为一目录
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题 。
EMFILE 已达到进程可同时打开的文件数上限
ENFILE 已达到系统可同时打开的文件数上限
附加说明creat()无法建立特别的装置文件 , 如果需要请使用mknod() 。
范例请参考open() 。
dup(复制文件描述词)
相关函数open,close,fcntl,dup2
表头文件#includeunistd.h
定义函数int dup (int oldfd);
函数说明dup()用来复制参数oldfd所指的文件描述词,并将它返回 。此新的文件描述词和参数oldfd指的是同一个文件,共享所有的锁定、读写位置和各项权限或旗标 。例如,当利用lseek()对某个文件描述词作用时 , 另一个文件描述词的读写位置也会随着改变 。不过,文件描述词之间并不共享close-on-exec旗标 。
返回值当复制成功时,则返回最小及尚未使用的文件描述词 。若有错误则返回-1,errno会存放错误代码 。错误代码EBADF参数fd非有效的文件描述词,或该文件已关闭 。
dup2(复制文件描述词)
相关函数open,close , fcntl , dup
表头文件#includeunistd.h
定义函数int dup2(int odlfd,int newfd);
函数说明dup2()用来复制参数oldfd所指的文件描述词,并将它拷贝至参数newfd后一块返回 。若参数newfd为一已打开的文件描述词 , 则newfd所指的文件会先被关闭 。dup2()所复制的文件描述词 , 与原来的文件描述词共享各种文件状态,详情可参考dup() 。
返回值当复制成功时,则返回最小及尚未使用的文件描述词 。若有错误则返回-1 , errno会存放错误代码 。
附加说明dup2()相当于调用fcntl(oldfd,F_DUPFD,newfd);请参考fcntl() 。
错误代码EBADF 参数fd 非有效的文件描述词 , 或该文件已关闭
fcntl(文件描述词操作)
相关函数open,flock
表头文件#includeunistd.h
#includefcntl.h
定义函数int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
函数说明fcntl()用来操作文件描述词的一些特性 。参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令 。
有以下几种情况:
F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文件描述词,并且复制参数fd的文件描述词 。执行成功则返回新复制的文件描述词 。请参考dup2() 。F_GETFD取得close-on-exec旗标 。若此旗标的FD_CLOEXEC位为0,代表在调用exec()相关函数时文件将不会关闭 。
F_SETFD 设置close-on-exec 旗标 。该旗标以参数arg 的FD_CLOEXEC位决定 。
F_GETFL 取得文件描述词状态旗标,此旗标为open()的参数flags 。
F_SETFL 设置文件描述词状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变 , 其flock函数c语言他位的改变将不受影响 。
F_GETLK 取得文件锁定的状态 。
F_SETLK 设置文件锁定的状态 。此时flcok 结构的l_type 值必须是F_RDLCK、F_WRLCK或F_UNLCK 。如果无法建立锁定,则返回-1,错误代码为EACCES 或EAGAIN 。
F_SETLKW F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止 。若在等待锁定的过程中被信号中断时,会立即返回-1,错误代码为EINTR 。参数lock指针为flock 结构指针,定义如下
struct flcok
{
short int l_type; /* 锁定的状态*/
short int l_whence;/*决定l_start位置*/
off_t l_start; /*锁定区域的开头位置*/
off_t l_len; /*锁定区域的大小*/