linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数
1、exec族函数
精彩博文: https://blog.csdn.net/u014530704/article/details/73848573
path: 比如说 ./a.out
arg: 比如以前的cp demo11.c demo12.c
首先在系统中编译很多的可执行程序
我希望呢,11运行到一半的时候 或者 发生某些情况的时候 11会去调用12,让12去运行
./bin/echoarg :路径名
第一个参数程序名:echoarg
真正的参数是 :abc
然后参数必须以NULL结尾
argc 是参数的个数,把每个参数打出来
比如我们加file1 file2
我希望编译出来的a.out 在执行一半的时候 会调用echoarg,怎么办呢?
用下面的代码
执行失败返回值是-1;会打印execl failed!然后打印after execl
执行成功的话,后面那一句(after execl)根本就不会得到执行
如何找到失败的原因呢?
根据返回值的特性
(perror 的用法)
里面说了没有这个文件或者目录
./bin/echoarg
调用的是bin底下的
./当前文件底下的bin文件夹底下的echoarg
echoarg 直接在当前路径
去掉bin就好啦
after execl 在这里就不执行啦
那可不可以调用ls 呢?(echoarg是可执行程序,ls 也是可执行程序)
先找ls 的绝对路径
等同于我们做了个ls
如果我们想调用ls -l 呢?只要在后面传参就可以啦
如果我们想调用ls -l 呢?只要在后面传参就可以啦
好处是什么呢?
假如让你用c 语言获取系统的时间
你不会获取系统的的时间怎么办?
获取时间有个指令date
代码如下,先看date 的绝对路径
2、带个p的exec族函数
假如我现在要用ps 可是还要whereis ps
这样很麻烦
我如果把绝对路径去掉会发生什么事呢?
找不到
但是加个p就可以啦
那加p是什么意思呢?
查找当前的环境变量
比如我在当前目录,可以执行rechoarg
换个目录就不管用了
那有什么办法让这个路径下也运行echoarg 呢?
我们可以把他配置到环境变量里面去
pwd显示当前路径
修改环境变量
原先的可以手动copy进来,也可以直接引用PATH后面加冒号
见证奇迹
都不需要用 ./ 了
都不需要用 ./ 了
我回到工作目录并不在那个目录底下
环境变量:
绿色的都可以执行的
所以只写一个ps 没有关系 ,他会找到环境变量底下的ps
看这个环境变量
bin加进来了 ,目录bin底下
补充:
3、带个v的exec族函数
只不过把我们写的参数放到上面来
运行的结果都是一样的只不过使用的方式不一样而已
如果用execv 呢?
v对比vp需要加个绝对路径
这是没加的
找不到文件
加完以后
4、exec配合fork使用
先找到需要的内容 用grep
然后
把上面这个代码插入到下面
粘贴文件
太麻烦了,如果用exec族函数的话
复制的过程
复制的过程
代码如下
这是开始的状态
这是运行完的结果
5、system 函数
linux system函数详解 - 南哥的天下 - 博客园
返回一个整型数,参数是一个char 型的指针(字符串)
执行一个shell 指令
之前我们都习惯./11 执行这个文件
也可以sh -c ./11 执行这个文件
再来弄一个
原代码
结果
system 还会返回原程序中,执行后面的代码
如果我写错了呢?
6、popen函数
linux下popen的使用心得_libinbin_1014的专栏-CSDN博客_linux popen
如果想要把他的值保存到文件,或者她运行的结果放到字符串里面,通过网络发出去,怎么办?
数据都流失了
那么如何读取流中间的数据呢?
如果我不把结果输出呢?
什么都没输出
linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数相关推荐
- Linux进程编程(PS: exec族函数、system、popen函数)
目录 1.进程相关概念 程序和进程 查看系统中的进程 ps指令 top指令 进程标识符 使用getpid()获取 父进程,子进程 2.创建进程fork 进程创建发生了什么--C程序的存储空间如何分配 ...
- linux中popen函数,system函数与popen函数
为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作: fork一个子进程: 在子进程中调用exec函数去执行command: 在父进程中调用wait ...
- Linux的system和popen的差异
1.system()和popen()简介 在linux中我们可以通过system()来执行一个shell命令,popen()也是执行shell命令并且通过管道和shell命令进行通信. system( ...
- Linux的system()和popen()差异
Linux的system()和popen()差异 1. system()和popen()简介 在Linux中我们可以通过system()来执行一个shell命令,popen()也是执行shell命令并 ...
- linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用
exec族函数函数的作用: exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件.这里的可执行文件既可以是二 ...
- Linux进程5:exec族函数(execl, execlp, execle, execv, execvp, execvpe)总结及exec配合fork使用
exec族函数(execl, execlp, execle, execv, execvp, execvpe)及exec配合fork使用 exec族函数函数的作用: 我们用fork函数创建新进程后,经常 ...
- exec族函数、system函数、popen函数、PATH
exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序(在exec都后面的代码不会被得到执行 ...
- Linux函数exec
Linux函数exec 一.概述: 当用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序.当程序调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其m ...
- linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数
linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...
最新文章
- 关闭linux服务器电源,linux关闭ACPI电源管理模块
- WordPress添加前台注册功能
- 【MATLAB】三维图形绘制 ( 绘制网格 + 等高线 | meshc 函数 | 绘制平面 + 等高线 | surfc 函数 )
- ant 构建_有用的Ant构建标签
- 五年后存储会是什么样子
- 如何构建NTP时间服务器
- 提前观摩打二字计算机英语,英语口语国赛规划.doc
- tomcat下载安装及配置教程
- linux:mac系统占用空间过大,如何查看系统文件大小分布
- 析砂性土层php泥浆护壁,土未工程施工习题集2
- 360安全浏览器支持国密功能
- 算法设计与分析 ——10-7课程总结
- David Time Capsule Kick Off
- python数字的表示
- Real-Time Rendering Chapter 1~6 读书笔记
- 剑指offe 和为S的连续正数序列
- BigDecimal 往左移动两位小数_妻子的浪漫旅行:对比之下,这两位妻子拍照超“甜蜜”,亲疏立见...
- Unity 中用 Vertex Fragment Shader 实现 surface shader 中的 Diffuse 和 Decal
- Winsock 的初始化
- Python3 math模块以及运算优先级