我在写日志记录时,项目当然是多线程、多进程的。有时候会出fwrite.c错误(windows 下面),项目中除了日志会对文件进行读写而外,没有文件读内容,所以第一个想法就是:是不是日志写发生冲突了? 虽然这种错误的情况比较少,但还是引起了我的注意,于是我有一个问题:多进程、多线程对文件进行写操作会不会发生写冲突?
为此我在 ubuntu上做了一下试验,代码如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc,char *argv[]){
printf("hello\n");
int i=0 ;
int file = open("myte",O_RDWR | O_CREAT);
char buf[50] ="0123456789abcdefghijklmnopqrstuvwxyz\r\n" ;
if(file<0){
perror("open file error");
exit(-1);
}
int fd = fork();
if(fd<0){
perror("fork error");
exit(-1);
}
if(fd>0){
int fd01 = fork();
for(i =1000;i>0;i--)
if(fd01)
{ write(file,"pid01:0123456789abcdefghijklmnopqrstuvwxyz01234567