flock函数c语言 c语言的clock函数

PHP操作文件时 用flock()函数有什么用啊锁定或释放文件,flock(file,lock),lock有 “LOCK_SH”这个是读取的时候锁定,“LOCK_EX”是写入的时候锁定,”LOCK_UN“是释放锁定 。比如有两个人同时写入一个文件,如果不进行锁定会造成文件内容错乱 。
C语言如何判断文件是否可读写这个需要对文件加锁才能flock函数c语言,可以用fcntl函数实现
int lock(constchar * filepath )
{
int fd = 0;
struct flock flock;
memset( flock, 0, sizeof(flock) );
fd = open( filepath, O_RDWR,S_IRUSR|S_IWUSR );
if ( fd0 )
{
printf("open error!\n");
return ( -1 );
}
flock.l_type = F_WRLCK;
flock.l_whence = SEEK_SET;
flock.l_start = 100000;
flock.l_len = 0;
if ( fcntl( fd, F_SETLK, flock ) )//加锁flock函数c语言,如果失败则等待10秒
{
printf("cannot set lock\n");
printf("the process will retry after 10 seconds\n");
sleep(10);//不同版本flock函数c语言的sleep单位可能不一样flock函数c语言,有flock函数c语言的是秒有的是毫秒,你自己看着改
if ( fcntl( fd, F_SETLK, flock ) )//加锁,如果失败则退出
return( -1 );
}
return( 0 );
}
后面的你懂吧
fwrite fread多线程操作可以使用文件锁定,对文件的读写进行锁定 , 通过系统调用fcntl( )实现,它的定义如下:
int fcntl(int fildes, int command, struct flock *flock_structure);
其中:
fildes是文件描述符;
command有三个:F_GETLK、F_SETLK、F_SETLKW
flock结构体包含以下成员:
shortl_type
shortl_whence
off_tl_start
off_tl_len
pid_tl_pid
注意:对文件区域加锁之后,必须使用底层的read、write调用来访问文件中的数据 , 因为fwrite、fread对数据的读写会进行缓存,可能会引起数据的问题 。
=============================================
具体用法搜一搜吧,希望有所帮助 。
c语言指令有哪些啊第一章:绪论?
内核版本号格式:x.y.zz-www/x为主版本号,y为次版本号,zz为次次版本号,www为发行号/次版本号改变说明内核有重大变革,其偶数为稳定版本 , 奇数为尚在开发中的版本
第二章:基?。?
文件种类:-:txt,二进制/d:目录/l:链接文件(link)/b:区块设备文件/c:字符设备文件/p:管道
目录结构:bin:可执行/boot:开机引导/dev:设备文件/etc:系统配置文件/lib:库文件/mnt:设备挂载点/var:系统日志/
命令:rmdir:删除空目录/find [path] [expression]/touch命令还可以修改指定文件的最近一次访问时间/tar -czvf usr.tar.gz path/tar –zxvf usr.tar.gz/tar –cjvf usr.tar.bz2 path/tar –jxvf usr.tar.bz2
gcc:预处理:-g/I在头文件搜索路径中添加目录,L在库文件搜索路径中
gdb:设置断点:b/查看断点信息:info
Makefile:make –f other_makefile/:第一个依赖文件的名称/@:目标文件的完整名称/^:所有不重复的依赖文件/+:所有依赖文件(可能重复)
第三章:文件IO
read:read(fd, temp, size); /读fd中长度为size的值到temp/返回0表示file为NULL
write:write(fd, buf, buf_size); /写长度为buf_size的buf内容到fd中
lseek:lseek(fd, offset, SEEK_SET); /从文件开头向后增加offset个位移量
unlink:从文件系统中删除一个名字
open1:int open(const char * pathname, int flags, mode_t mode);/flags为读写方式/mode为权限设置/O_EXCL:测试文件是否存在/O_TRUNC:若存在同名文件则删除之并新建
open2:注意O_NONBLOCK
mmap.1:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize);

推荐阅读