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

发布时间:2020-04-10 19:36:49 作者:银河星君
来源:网络 阅读:1016
/*子进程和父进程同时对一个文件进行写操作导致文件发生混乱的实例
写入数据的文件由argv[1]指定,数据来源在argv[2]所指定的文件中*/
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
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 <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
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;
}


推荐阅读:
  1. [Linux管道和IPC]使用信号量和共享内存进行父子进程通信
  2. [Linux进程]统计进程的执行时间

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux进程 inux

上一篇:grid安装前检查报PRVE-0426:/dev/shm less than the require

下一篇:Jmeter查看QPS和响应时间随着时间的变化曲线

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》