linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作
[Linux進程]在父進程和子進程中分別對文件進行操作
發布時間:2020-04-10 19:36:49
來源:51CTO
閱讀:917
作者:銀河星君
/*子進程和父進程同時對一個文件進行寫操作導致文件發生混亂的實例
寫入數據的文件由argv[1]指定,數據來源在argv[2]所指定的文件中*/
#include?
#include?
#include?
#include?
int?readfd,?writefd;????//讀文件描述符和寫文件描述符
char?c;?????????????????//文件內容的中轉字符空間
int?main(int?argc,?char*argv[])
{
if(argc!=3)???//如果參數不正確
{
printf("Usage?%s?sourcesfiel?destfile.?\n",argv[0]);
return?1;
}
if((readfd?=?open(argv[1],?O_RDONLY))==-1)??//如果打開文件失敗
{
printf("打開文件%s失敗!\n",argv[1]);
return?2;
}
if((writefd?=?creat(argv[2],S_IRWXU))==-1)???//如果創建文件失敗
{
printf("創建文件%s失敗!\n",argv[2]);
return?3;
}
fork();???//創建子進程,以下為父進程和子進程同時執行的步驟
for(;;)
{
if(read(readfd,&c,1)?!=?1)??//如果讀不出數據則返回
{
return?4;
}
write(writefd,&c,1);????//將讀出的數據寫入文件中
}
return?0;
}
/*子進程和父進程同時對一個文件進行寫操作導致文件發生混亂的實例
寫入數據的文件由argv[1]指定,數據來源在argv[2]所指定的文件中*/
#include?
#include?
#include?
#include?
int?readfd,?writefd;????//讀文件描述符和寫文件描述符
char?c;?????????????????//文件內容的中轉字符空間
int?main(int?argc,?char*argv[])
{
pid_t?pid;
if(argc!=3)???//如果參數不正確
{
printf("Usage?%s?sourcesfiel?destfile.?\n",argv[0]);
return?1;
}
if((readfd?=?open(argv[1],?O_RDONLY))==-1)??//如果打開文件失敗
{
printf("打開文件%s失敗!\n",argv[1]);
return?2;
}
if((writefd?=?creat(argv[2],S_IRWXU))==-1)???//如果創建文件失敗
{
printf("創建文件%s失敗!\n",argv[2]);
return?3;
}
pid?=?fork();???//創建子進程,以下為父進程和子進程同時執行的步驟
if(pid?==?0)????//讓子進程休眠2秒
{
sleep(1);
}
for(;;)
{
if(read(readfd,&c,1)?!=?1)??//如果讀不出數據則返回
{
return?4;
}
write(writefd,&c,1);????//將讀出的數據寫入文件中
}
return?0;
}
總結
以上是生活随笔為你收集整理的linux的子进程和父进程,[Linux进程]在父进程和子进程中分别对文件进行操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用的php cms分校站点 打开特别慢
- 下一篇: linux查找特定日期之后的文件,Lin