[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进程]在父进程和子进程中分别对文件进行操作相关推荐

  1. linux上怎么杀死僵尸进程,Linux入门知识:杀死僵尸进程

    Linux并不把进程的树形结构导出给普通用户,然而在内核中,它却使用树形结构来管理进程.linux内核使用"子进程退出,父进程收尸,父进程退出,子进程被过继"这种方式来管理进程的死 ...

  2. 打开查看linux内核代码,source insight 查看linux内核代码树【转载】

    [工程建立好之后,在工程选项下点击"同步",默认选项,同步文件后,既可以进行各种跳转查看了] Source Insight实质上是一个支持多种开发语言(java,c ,c 等等)的 ...

  3. Linux进程全解7——父进程wait / waitip回收子进程

    以下内容源于朱有鹏<物联网大讲堂>的课程学习整理,如有侵权,请告知删除. 一.wait介绍 1.wait的工作原理 (1)子进程结束时,系统向其父进程发送SIGCHILD信号: (2)父进 ...

  4. Linux进程3:父进程等待(wait,waitpid)子进程退出并收集子进程退出状态,僵尸进程

    父进程等待(wait,waitpid)子进程退出并收集子进程退出状态 1.父进程为什么要等待子进程退出? 创建子进程目的:------干活 我们要知道干活结束没. 子进程退出状态不被收集,变成僵尸进程 ...

  5. linux一个进程通知另外一个进程,Linux进程通信学习笔记

    一.为什么需要进程通信 1)数据传输 一个进程需要把它的数据发送给另一个进程. 2)资源共享 多个进程之间共享同样的资源. 3)通知事件 一个进程向另外一个进程发送消息,通知它发生了某事件. 4)进程 ...

  6. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  7. linux设备驱动归纳总结(四):1.进程管理的相关概念【转】

    本文转载自;http://blog.chinaunix.net/uid-25014876-id-64866.html linux设备驱动归纳总结(四):1.进程管理的相关概念 xxxxxxxxxxxx ...

  8. Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度

    Linux下有3个特殊的进程,idle进程(PID=0PID=0), init进程(PID=1PID=1)和kthreadd(PID=2PID=2) * idle进程由系统自动创建, 运行在内核态 i ...

  9. linux runable进程查询,关于Linux下进程的详解【进程查看与管理】

    一.关于进程 进程: 已经启动的可执行程序的运行实力 进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构.其中地址空间是内核标记的一部分内存以供进程使用,而数据结构则用来纪录每个进程的具体 ...

最新文章

  1. 跟着“路线图”,我们一起遨游机器学习的世界!
  2. python 实现杨辉三角(依旧遗留问题)
  3. Codeforces Round #688 (Div. 2)
  4. thinking-in-java(21)并发2
  5. Java笔记-JNI中Java与C语言解决中文乱码问题
  6. 宝可梦世界无限极可以玩服务器吗,口袋妖怪世界无极限运行库
  7. python入门指南全文阅读-Python-3.4-入门指南(官方中文版).pdf
  8. QQ头像加口罩PHP,如何用人脸识别自动给头像添加口罩及护目镜
  9. Android实现录屏直播(一)ScreenRecorder的简单分析
  10. 1一10到时的英文单词_1到10的英语单词
  11. matlab如何用遗传算法,MATLAB中如何使用遗传算法
  12. 用matlab求傅里叶变换
  13. 将指定 Word 的页眉页脚复制到其他文件中
  14. Java实现微信聊天记录生成器
  15. 六一儿童节(python)
  16. Apache Spark源码走读(九)如何进行代码跟读使用Intellij idea调试Spark源码
  17. 嵌入式:交换指令之SWP,MRS,MSR
  18. 聊聊MultipartFile的transferTo方法
  19. 关闭word/ppt后自动创建并打开新的文档
  20. 震惊——JS中百度地图开放平台API尽然是这样使用

热门文章

  1. Grails通过sessionId获取session对象
  2. 《Total Commander:万能文件管理器》——第8.3节.张学思版预装的插件
  3. Linux查看磁盘目录内存空间使用情况
  4. 2015第26周六《谁动了我的奶酪》书摘
  5. 在OpenWrt中上传文件至路由器
  6. Spring Boot req中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?
  7. 什么是DHCP?—Vecloud微云
  8. 面试之索引---------如果不能吊打面试官,找我扯皮*
  9. postgresql中自定义函数脚本的备份及恢复
  10. 关于在linux操作系统中中不能删除创建创建的用户的操作