IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 进程—族函数、system、popen -> 正文阅读

[系统运维]Linux 进程—族函数、system、popen

本文章为个人的学习笔记,其中有些知识点解释得不是那么的标准。

即本文章笔记可参考、可借鉴、可指点!


族函数

在当前进程中或者当前程序中调用exec函数时,则会去执行族函数内另外的一个程序。当调用exec族函数时,当前进程或执行的程序就会被完全替换为族函数该执行的程序,而族函数的调用多用在创建新的进程时的调用。因为调用exec族函数并不创建新进程,所以前后进程的ID并没有改变。通过调用族函数去执行的程序时,执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。

族函数原型
#include <unistd.h>

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

exec族函数执行成功后不会返回,且调用成功之后就会跳转至族函数里面的执行文件,而当前程序就不再继续执行;调用失败时,会设置errno并返回-1,然后从原程序的调用点接着往下执行。

参数:

const char *path 为调用某执行文件的路径

const char *file?如果参数file中包含/,则就将其视为路径名,否则就按 PATH环境变量,在它所指定的各目录中搜寻该可执行文件。

const char *arg? 第一个为执行文件的名称,第二个为执行文件的附加名称,依次类推;eg:ls -l等。如果没有参数了就得亦NULL来结尾。

char *const argv[ ]?也为执行文件的名称等,和上面那个参数十一月的,但是该参数是用数组来表达了。

直接上代码对比吧


system函数

int system(const char *command);
system 函数使用简单粗暴,直接去执行参数代表的执行文件,但是该文件必须是在当前函数的路径下。

system函数与execl族函数的最大的区别是,system调用完成之后,依旧会执行当前程序后面的程序,而族函数就会直接跳转到另一个可执行的文件去了,当调用完成之后并不会继续执行当前函数剩余的程序。

调用system时,他是创建新的一个进程来实现的,在这个子进程中调用/bin/sh -c来执行command指定的命令;当sh -c如果不能执行,则返回127;如果调用失败,则返回-1.

//int system(const char *command);

int main()
{
        printf("this system-ps start !\n");
        if(system("ps")==-1)
        {
                printf("system-ps failed !\n");
                perror("error ");
        }
        printf("this system-ps end !\n");
        return 0;
}

popen 函数

原型

#include <stdio.h>

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

如果 type 为 r,那么调用进程读进 command 的标准输出。一般用 r 。
如果 type 为 w,那么调用进程写到 command 的标准输入。

?popen 是可以将执行的结果通过文件流读取出来,但是如果不读取操作的话,那终端也不会打印执行结果。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:52:26  更:2021-08-22 13:53:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:42:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码