日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/5/22 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[Linux進(jìn)程]在父進(jìn)程和子進(jìn)程中分別對(duì)文件進(jìn)行操作

發(fā)布時(shí)間:2020-04-10 19:36:49

來(lái)源:51CTO

閱讀:917

作者:銀河星君

/*子進(jìn)程和父進(jìn)程同時(shí)對(duì)一個(gè)文件進(jìn)行寫(xiě)操作導(dǎo)致文件發(fā)生混亂的實(shí)例

寫(xiě)入數(shù)據(jù)的文件由argv[1]指定,數(shù)據(jù)來(lái)源在argv[2]所指定的文件中*/

#include?

#include?

#include?

#include?

int?readfd,?writefd;????//讀文件描述符和寫(xiě)文件描述符

char?c;?????????????????//文件內(nèi)容的中轉(zhuǎn)字符空間

int?main(int?argc,?char*argv[])

{

if(argc!=3)???//如果參數(shù)不正確

{

printf("Usage?%s?sourcesfiel?destfile.?\n",argv[0]);

return?1;

}

if((readfd?=?open(argv[1],?O_RDONLY))==-1)??//如果打開(kāi)文件失敗

{

printf("打開(kāi)文件%s失敗!\n",argv[1]);

return?2;

}

if((writefd?=?creat(argv[2],S_IRWXU))==-1)???//如果創(chuàng)建文件失敗

{

printf("創(chuàng)建文件%s失敗!\n",argv[2]);

return?3;

}

fork();???//創(chuàng)建子進(jìn)程,以下為父進(jìn)程和子進(jìn)程同時(shí)執(zhí)行的步驟

for(;;)

{

if(read(readfd,&c,1)?!=?1)??//如果讀不出數(shù)據(jù)則返回

{

return?4;

}

write(writefd,&c,1);????//將讀出的數(shù)據(jù)寫(xiě)入文件中

}

return?0;

}

/*子進(jìn)程和父進(jìn)程同時(shí)對(duì)一個(gè)文件進(jìn)行寫(xiě)操作導(dǎo)致文件發(fā)生混亂的實(shí)例

寫(xiě)入數(shù)據(jù)的文件由argv[1]指定,數(shù)據(jù)來(lái)源在argv[2]所指定的文件中*/

#include?

#include?

#include?

#include?

int?readfd,?writefd;????//讀文件描述符和寫(xiě)文件描述符

char?c;?????????????????//文件內(nèi)容的中轉(zhuǎn)字符空間

int?main(int?argc,?char*argv[])

{

pid_t?pid;

if(argc!=3)???//如果參數(shù)不正確

{

printf("Usage?%s?sourcesfiel?destfile.?\n",argv[0]);

return?1;

}

if((readfd?=?open(argv[1],?O_RDONLY))==-1)??//如果打開(kāi)文件失敗

{

printf("打開(kāi)文件%s失敗!\n",argv[1]);

return?2;

}

if((writefd?=?creat(argv[2],S_IRWXU))==-1)???//如果創(chuàng)建文件失敗

{

printf("創(chuàng)建文件%s失敗!\n",argv[2]);

return?3;

}

pid?=?fork();???//創(chuàng)建子進(jìn)程,以下為父進(jìn)程和子進(jìn)程同時(shí)執(zhí)行的步驟

if(pid?==?0)????//讓子進(jìn)程休眠2秒

{

sleep(1);

}

for(;;)

{

if(read(readfd,&c,1)?!=?1)??//如果讀不出數(shù)據(jù)則返回

{

return?4;

}

write(writefd,&c,1);????//將讀出的數(shù)據(jù)寫(xiě)入文件中

}

return?0;

}

總結(jié)

以上是生活随笔為你收集整理的linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。