- 論壇徽章:
- 0
|
代碼如下(一個(gè)父進(jìn)程,fork了100個(gè)子進(jìn)程,每個(gè)子進(jìn)程共享父進(jìn)程打開的文件描述符,每個(gè)子進(jìn)程寫入1000個(gè)字符,基本的邏輯過程就是這樣)
為什么在程序exit后,文件中,沒有存入100*1000個(gè)字符?
如果將子進(jìn)程數(shù)量增多,或者字符數(shù)增加,那么,文件中的字符數(shù)就更匹配不上了
很納悶這個(gè)問題,壇子里的朋友有興趣可以看一看,呵呵- #include <stdio.h>
- #include <fcntl.h>
- int main()
- {
- struct flock stF;
- int i,n,fd,pid;
- fd=open("./output.txt",O_RDWR|O_CREAT);
- for(i=0;i<99;i++)
- {
- pid=fork();
- if(pid==-1)
- {
- perror("fork:");
- }
- else if( pid > 0 )
- {
- break;
- }
- }
- stF.l_type=F_WRLCK;
- stF.l_start=0;
- stF.l_whence=SEEK_SET;
- stF.l_len=0;
- for(i=0;i<999;i++)
- {
- if(fcntl(fd,F_SETLKW,&stF)==-1)
- {
- perror("lock:");
- }
- lseek(fd,0,SEEK_END);
- if(write(fd,"1",1)!=1)
- {
- perror("write:");
- }
- stF.l_type=F_UNLCK;
- if(fcntl(fd,F_SETLKW,&stF)==-1)
- {
- perror("unlock:");
- }
- }
- close(fd);
- }
復(fù)制代碼 |
|