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


pid_t l_pid; /*锁定动作的进程*/
};
l_type 有三种状态:
F_RDLCK 建立一个供读取用的锁定
F_WRLCK 建立一个供写入用的锁定
F_UNLCK 删除之前建立的锁定
l_whence 也有三种方式:
SEEK_SET 以文件开头为锁定的起始位置 。
SEEK_CUR 以目前文件读写位置为锁定的起始位置
SEEK_END 以文件结尾为锁定的起始位置 。
返回值成功则返回0,若有错误则返回-1,错误原因存于errno.
flock(锁定文件或解除锁定)
相关函数open,fcntl
表头文件#includesys/file.h
定义函数int flock(int fd,int operation);
函数说明flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作 。此函数只能锁定整个文件,无法锁定文件的某一区域 。
参数operation有下列四种情况:
LOCK_SH 建立共享锁定 。多个进程可同时对同一个文件作共享锁定 。
LOCK_EX 建立互斥锁定 。一个文件同时只有一个互斥锁定 。
LOCK_UN 解除文件锁定状态 。
LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程 。通常与LOCK_SH或LOCK_EX 做OR(|)组合 。
单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定 。
返回值返回0表示成功,若有错误则返回-1,错误代码存于errno 。
fsync(将缓冲区数据写回磁盘)
相关函数sync
表头文件#includeunistd.h
定义函数int fsync(int fd);
函数说明fsync()负责将参数fd所指的文件数据,由系统缓冲区写回磁盘 , 以确保数据同步 。
返回值成功则返回0,失败返回-1 , errno为错误代码 。
lseek(移动文件的读写位置)
相关函数dup,open,fseek
表头文件#includesys/types.h
#includeunistd.h
定义函数off_t lseek(int fildes,off_t offset ,int whence);
函数说明每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND) , 则读写位置会指向文件尾 。当read()或write()时,读写位置会随之增加 , lseek()便是用来控制该文件的读写位置 。参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数 。
参数whence为下列其中一种:
SEEK_SET 参数offset即为新的读写位置 。
SEEK_CUR 以目前的读写位置往后增加offset个位移量 。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量 。
当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现 。
下列是教特别的使用方式:
1) 欲将读写位置移到文件开头时:lseek(int fildes,0,SEEK_SET);
2) 欲将读写位置移到文件尾时:lseek(int fildes , 0,SEEK_END);
3) 想要取得目前文件位置时:lseek(int fildes,0,SEEK_CUR);
返回值当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节 。若有错误则返回-1 , errno 会存放错误代码 。
附加说明Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE 。
范例参考本函数说明
mkstemp(建立唯一的临时文件)
相关函数mktemp
表头文件#includestdlib.h
定义函数int mkstemp(char * template);
函数说明mkstemp()用来建立唯一的临时文件 。参数template 所指的文件名称字符串中最后六个字符必须是XXXXXX 。Mkstemp()会以可读写模式和0600 权限来打开该文件 , 如果该文件不存在则会建立该文件 。打开该文件后其文件描述词会返回 。文件顺利打开后返回可读写的文件描述词 。若果文件打开失败则返回NULL , 并把错误代码存在errno 中 。

推荐阅读