linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作
[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)題。
- 上一篇: 采用的php cms分校站点 打开特别慢
- 下一篇: linux查找特定日期之后的文件,Lin