900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux的子进程和父进程 [Linux进程]在父进程和子进程中分别对文件进行操作

linux的子进程和父进程 [Linux进程]在父进程和子进程中分别对文件进行操作

时间:2021-12-17 05:49:56

相关推荐

linux的子进程和父进程 [Linux进程]在父进程和子进程中分别对文件进行操作

[Linux进程]在父进程和子进程中分别对文件进行操作

发布时间:-04-10 19:36:49

来源:51CTO

阅读:917

作者:银河星君

/*子进程和父进程同时对一个文件进行写操作导致文件发生混乱的实例

写入数据的文件由argv[1]指定,数据来源在argv[2]所指定的文件中*/

#include

#include

#include

#include

intreadfd,writefd;//读文件描述符和写文件描述符

charc;//文件内容的中转字符空间

intmain(intargc,char*argv[])

{

if(argc!=3)//如果参数不正确

{

printf("Usage%ssourcesfieldestfile.\n",argv[0]);

return1;

}

if((readfd=open(argv[1],O_RDONLY))==-1)//如果打开文件失败

{

printf("打开文件%s失败!\n",argv[1]);

return2;

}

if((writefd=creat(argv[2],S_IRWXU))==-1)//如果创建文件失败

{

printf("创建文件%s失败!\n",argv[2]);

return3;

}

fork();//创建子进程,以下为父进程和子进程同时执行的步骤

for(;;)

{

if(read(readfd,&c,1)!=1)//如果读不出数据则返回

{

return4;

}

write(writefd,&c,1);//将读出的数据写入文件中

}

return0;

}

/*子进程和父进程同时对一个文件进行写操作导致文件发生混乱的实例

写入数据的文件由argv[1]指定,数据来源在argv[2]所指定的文件中*/

#include

#include

#include

#include

intreadfd,writefd;//读文件描述符和写文件描述符

charc;//文件内容的中转字符空间

intmain(intargc,char*argv[])

{

pid_tpid;

if(argc!=3)//如果参数不正确

{

printf("Usage%ssourcesfieldestfile.\n",argv[0]);

return1;

}

if((readfd=open(argv[1],O_RDONLY))==-1)//如果打开文件失败

{

printf("打开文件%s失败!\n",argv[1]);

return2;

}

if((writefd=creat(argv[2],S_IRWXU))==-1)//如果创建文件失败

{

printf("创建文件%s失败!\n",argv[2]);

return3;

}

pid=fork();//创建子进程,以下为父进程和子进程同时执行的步骤

if(pid==0)//让子进程休眠2秒

{

sleep(1);

}

for(;;)

{

if(read(readfd,&c,1)!=1)//如果读不出数据则返回

{

return4;

}

write(writefd,&c,1);//将读出的数据写入文件中

}

return0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。