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节点编号,但是并不能知道当前目录 ...
随机推荐
- oracle启动关闭命令
关闭:1.shutdown normal 不允许新的连接.等待会话结束.等待事务结束.做一个检查点并关闭数据文件.启动时不需要实例恢复. 2.shutdown transactional不允许新的连接 ...
- EL表达<%@page isELIgnored="false"%>问题
上网查找资料后得知:主要原因是EL表达式无法被解析到. 其实从后台取值并传值到前台来根本就没有错,而前台JSP页面EL表达式无效,解析不到EL表达式,引起的原因是web.xml中: <web-a ...
- Leetcode: Longest Absolute File Path
Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...
- 最大密集子图(01分数规划+二分+最小割)POJ3155
题意:给出一副连通图,求出一个子图令g=sigma(E)/sigma(V); h[g]=sigma(E)-g*sigma(V):设G是最优值 则当h[g]>0:g<G h[g]<0, ...
- android中的命令安装与卸载
软件的安装: adb install apk的保存地址 卸载软件: adb uninstall package名
- 用xml添加动画
在res文件夹下新建anim文件夹 在anim文件夹新建anim.xml anim.xml: <?xml version="1.0" encoding="utf-8 ...
- Calculation
定义一个Strategy接口,其中定义一个方法,用于计算 using System; using System.Collections.Generic; using System.Linq; usin ...
- Android -- FragmentTabHost实现微信底部切换
1,在商城类的项目中我们开始一个项目的时候经常出现这样的需求,如下图所示: 下面使用户可以切换的模块,上面是对应的模块的详细内容,实现这个效果有很多方式,可以使用radiobutton+fragmen ...
- 解决无法连接到visual studio开发服务器的问题
今天vs抽风,调试网站出现下图那样: 然后我开始百度搜索 "无法连接到visual studio开发服务器" 出现很多文章: 打开一篇问题,看了里面的内容, 那个解决办法也不是最好 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You ...