Unix/Linux编程实践教程(一:进程、管道)
execvp在程序中启动新程序:

用fork创建新进程:



forkdemo2代码:

测试fork的时候参考《Linux权威指南》阅读笔记(3) 使用了patch:
[root@localhost programming]# diff -c forkdemo2.c forkdemo2_new.c > forkdemo2.patch
[root@localhost programming]# patch < forkdemo2.patch
patching file forkdemo2.c
[root@localhost programming]# ls -lrt
total
-rwxrwxrwx root root Sep : forkdemo2
-rwxrwxrwx root root Sep : forkdemo2_new
-rwxrwxrwx root root Sep : forkdemo2_new.c
-rwxrwxrwx root root Sep : forkdemo2.patch
-rwxrwxrwx root root Sep : forkdemo2.c
[root@localhost programming]#
这个forkdemo2输出的pid个数也挺有意思,最好从最底层往上算。
怎么判断是父进程还是子进程:在父进程中fork()的返回值是子进程的pid,在子进程中是0。
父进程用wait等待子进程退出:



子进程退出值保存在wait的参数中:

shell的fork、wait、exit:

exit细节:

exec家族:

释放char**的空间函数值得参考(截图的时候命名带char**竟然没法保存,因为文件名中不能带*,忘记了):

exit0表示成功:

脚本中增加流程控制时的处理函数:

shell变量的存储方式:

标准C库函数getenv可以读取环境变量值:

环境变量保存在一个字符串数组:

comm命令比较两个文件:

使用comm命令找出离开及新登录用户:

最低可用文件描述符原则:

重定向的方法:

close-then-open方法输入重定向:

open-close-dup-close方法:

用open-close-dup-close方法输入重定向:

系统调用dup小结:

open-dup2-close方法:

系统调用pipe创建管道:

Unix/Linux编程实践教程(一:进程、管道)的更多相关文章
- 学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述
0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥 ...
- Unix/Linux编程实践教程(二:socket、多线程、进程间通信)
同一接口不同的数据源: 协同进程: fdopen以文件描述符为参数: fopen和popen: 为了实现popen,必须在子进程中调用sh,因为只有shell本身即/bin/sh可以运行任意shell ...
- Unix/Linux编程实践教程(0:文件、终端、信号)
本来只打算读这本书socket等相关内容,但书写得实在好,还是决定把其余的内容都读一下. 阅读联机帮助的一个示例: open系统调用: read系统调用: Unix的time: 上面的printf可以 ...
- 学习《Unix/Linux编程实践教程》(2):实现 more
0.目录 1.more 能做什么? 2.more 是如何实现的? 3.实现 more 3.1 more01.c 3.2 more02.c 3.3 more03.c 1.more 能做什么? more ...
- Unix/Linux编程实践教程(三:代码、测试)
测试logfilec.c的时候,有个sendto(sock,msg,strlen(msg),0,&addr,addrlen),编译时提示: logfilec.c:30: warning: pa ...
- Linux编程之《守护进程》
Intro ----- 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常 ...
- Unix Linux 编程书籍
UNIX环境高级编程(第3版) Advanced Programming in the UNIX Environment Linux/UNIX系统编程手册 Linux/UNIX系统编程手册 (豆瓣) ...
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> # ...
- linux编程实践:实现pwd命令
内核为每个目录都设置了一个指向自己的i节点入口,即".",还有一个指向其父目录i节点的入口,即"..",我们首先获取当前目录的i节点编号,但是并不能知道当前目录 ...
随机推荐
- bootstrap学习之二-组件
一.bootstrap字体图标 以span的形式出现,通常可以用于一个button或者其他元素的内文本, <span class="glyphicon glyphicon-sort-b ...
- [chrome插件] 利滚利计算器 银行存款 基金理财 余额宝收益计算
利滚利计算在数学上是否有一个简单的公式,我不知道,但作为程序员,这个算法实现起来就是小菜一碟.作为插件发布,是因为程序确实简单,也方便Chome浏览器使用者安装.如果你也想使用一下Chrome插件,参 ...
- throw 子句
throws是声明方法时抛出可能出现的异常,但不能捕获异常,也就是说并不直接处理异常,而是把它向上传递.其格式如下: 方法声明 throws 异常类名列表 若一个方法声明抛出异常,则表示该方法可能会抛 ...
- configure: error: C++ compiler cannot create executables
今天装虚拟机LNMP环境 安装报错:configure: error: C++ compiler cannot create executables 这是因为 gcc 组件不完整,执行安装 yum i ...
- linux:磁盘的分割、检验、格式化与挂载
新增一颗磁碟: 1.对磁碟进行分割,以建立可用的partition 2.对该分割槽partition进行格式化(format),以建立系统可用的filesystem 3.若要仔细点,可对刚刚建立的fi ...
- 学习OpenCV——hand tracking手势跟踪
这几日,岛上风云突变,我这个倒霉孩子终究木有躲过感冒的魔掌,中枪鸟~~~ 这几天只写了个简单的手势跟踪的代码. 原理是:背景差分+肤色检测. 背景差分:取前30帧图像取平均值,计算前30帧之差的和,再 ...
- CocoaPods看的三篇文章
http://www.bubuko.com/infodetail-425274.html//有图片 http://www.cnblogs.com/jys509/p/4839803.html http: ...
- hdu(1171)多重背包
hdu(1171) Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- 进击的java - tomcat的安装,配置都正确之后,还是报错
1.问题 配置Apatch Tomcat过程报错: The CATALINA_HOME environment variable is not defined correctly.This envir ...
- android_demo01
/layout/activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/ ...