多进程对文件同时读写

项目需求,涉及到A进程写文件,B进程读文件,并且A进程每写1000字节数据,B进程接着读1000字节数据;

之前组长说这个要加锁,我觉得没必要,随手在windows 命令行下做了实验,验证了不会有冲突,回来后专门在linux下用c代码验证,果然,加锁是不必要的,也不会出现“脏数据”

不过还是有收获,给自己提个醒:

文件句柄或者表述符没有所谓的读指针,写指针,每个进程下对应的文件描述符,只有一个操作偏移量,不管是读操作,写操作还是追加操作,都会改变该文件的偏移量;

如果A进程是open文件,则B进程通过lseek(fd, 0,SEEK_END)可以实时的得到文件大小;
如果A进程是fopen文件,因为有缓冲,大部分系统都是4096;使用fseek(fd, 0, SEEK_END); 不会实时得到文件大小,解决办法,给fopen文件句柄设置无缓冲setbuf(fd, NULL); 或者fwrite后立即fflush;

不过还是忐忑,为什么组长一说到文件同时操作,就想到共享资源要加锁,难不成我那里没考虑周全?

你可能感兴趣的:(多进程对文件同时读写)