linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数

2023-05-16

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

 

如果想要把他的值保存到文件,或者她运行的结果放到字符串里面,通过网络发出去,怎么办?

 

 数据都流失了

 

 

 那么如何读取流中间的数据呢?

如果我不把结果输出呢?

 什么都没输出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数 的相关文章

  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Bash:检查是否给出了参数(例如是否有参数“-a”?)

    我有一个脚本 它应该接受 2 个参数 s 和 d 如果未给出 d 参数 我想删除我的调试文件 与 s 相同 如何检查 1 或 2 是否为 s 或 d 舒尔有两个参数 我可以做到 蛮力 if test 1 d test 2 d then rm
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 如何通过 makefile 在 Linux 上安装程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux Unix make install 应该包含什么 https stackoverflow com questions 528399 what should linux unix make
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐