在linux环境下,有两个软件,一个是写入进程,负责向文件里写入数据,另一个是读取软件,同时可能有多个线程读取文件,写入的文件和读取的文件是相同的,怎么解决多线程读写的问题,怎样保证在写入未完成的时候避免脏数据被读取?查了一些资料,知道c语言的线程锁,但是不知道怎么用
可以使用文件锁定,对文件的读写进行锁定,通过系统调用fcntl( )实现,它的定义如下:
int fcntl(int fildes, int command, struct flock *flock_structure);
其中:
fildes是文件描述符;
command有三个:F_GETLK、F_SETLK、F_SETLKW
flock结构体包含以下成员:
short l_type
short l_whence
off_t l_start
off_t l_len
pid_t l_pid
注意:对文件区域加锁之后,必须使用底层的read、write调用来访问文件中的数据,因为fwrite、fread对数据的读写会进行缓存,可能会引起数据的问题。
=============================================
具体用法搜一搜吧,希望有所帮助。
int fcntl(int fildes, int command, struct flock *flock_structure);
其中:
fildes是文件描述符;
command有三个:F_GETLK、F_SETLK、F_SETLKW
flock结构体包含以下成员:
short l_type
short l_whence
off_t l_start
off_t l_len
pid_t l_pid
注意:对文件区域加锁之后,必须使用底层的read、write调用来访问文件中的数据,因为fwrite、fread对数据的读写会进行缓存,可能会引起数据的问题。
=============================================
具体用法搜一搜吧,希望有所帮助。
温馨提示:答案为网友推荐,仅供参考