system

int system(const char *command);

system()函数的返回值如下:
成功,则返回进程的状态值;
当sh不能执行时,返回127;
失败返回-1;
其实是封装后的exec,函数源代码在子进程调用exec函数,system使用更加简单,用法就是将./ 和后的内容(要执行的指令)放进代码中去。和exec不同的是,它运行完后还会返回到原来的代码处
比如:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
//int execl(const char*path,const char *arg,..)
int main()
{printf("this pro get system date: \n");if(system("date")==-1){printf("execl failed \n");perror("why");}printf("after execl\n");return 0;
}
运行结果:this pro get system date: Mon Sep 21 21:37:45 CST 2020after execl

代码示例

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
int main()
{pid_t fpid;int data;while(1){printf("please input a data\n");scanf("%d",&data);if(data==1){fpid=fork();if(fpid>0){wait(NULL);}if(fpid==0){//      execl("./changedata","changedata","config.txt",NULL);system("./changedata config.txt");}}else{printf("do nothing\n");}}return 0;
}

popen函数

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

比system好的是可以获取运行的输出结果。
参数说明:
type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。

command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。

返回值:

如果调用成功,则返回一个读或者打开文件的指针,如果失败,返回NULL,具体错误要根据errno判断。
int pclose(FILE* stream)
参数说明:
stream: popen返回的文件指针
返回值:
如果调用失败,返回-1
作用:
popen())函数用于创建-个管道:其内部实现为调用fork产生一个子进程,执行一个shell以运行命令来开启一个进程这个进程必须由pclose()函数关闭。
代码演示

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
//int execl(const char*path,const char *arg,..)
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
int main()
{char ret[1024]={0};FILE *fp;fp=popen("ps","r");int n_read=fread(ret,1,1024,fp);//将popen的返回值读取到ret中printf("read ret:%d,popen return :%s\n",n_read,ret);return 0;
}

system函数和popen函数使用方法相关推荐

  1. exec族函数、system函数、popen函数、PATH

    exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序(在exec都后面的代码不会被得到执行 ...

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

    1.exec族函数 精彩博文: https://blog.csdn.net/u014530704/article/details/73848573 ​ ​ ​ path:   比如说 ./a.out ...

  3. linux中popen函数,system函数与popen函数

    为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作: fork一个子进程: 在子进程中调用exec函数去执行command: 在父进程中调用wait ...

  4. Linux中popen函数的作用小结

    概述 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧 p ...

  5. popen函数 Qt

    QT popen函数 popen函数参数说明 popen函数通过创建一个管道的方式打开一个进程,并调用shell. 函数所需头文件:#include<stdio.h> 函数原型:FILE* ...

  6. system 函数被废除的替代方法

    做越狱应用和插件开发,经常会调用 system 去执行系统命令,早在 Xcode 7,使用 system 函数提示警告: 'system' is deprecated: first deprecate ...

  7. Linux进程编程(PS: exec族函数、system、popen函数)

    目录 1.进程相关概念 程序和进程 查看系统中的进程 ps指令 top指令 进程标识符 使用getpid()获取 父进程,子进程 2.创建进程fork 进程创建发生了什么--C程序的存储空间如何分配 ...

  8. (04)System Verilog 利用函数通用总线激励驱动方法

    (04)System Verilog 利用函数通用总线激励驱动方法 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 利用函数通用总线激 ...

  9. python(45)内置函数:os.system() 和 os.popen()

    os.system() 和 os.popen() 概述 os.popen() 方法用于从一个命令打开一个管道. 在Unix,Windows中有效 语法 popen()方法语法格式如下: os.pope ...

最新文章

  1. 第十一周学习总结--助教
  2. 没SBA,就试试SBS吧
  3. 没有一部是烂片 香港最强水准的10部影片
  4. 我使用 html 反向输出自己打自己(7)
  5. apache geode项目结构_Apache Flink-基于Java项目模板创建Flink应用(流计算和批计算)...
  6. VINS简化版本 梳理
  7. mysql语句获取当前时间,系列篇
  8. 程序员接私活的几个平台
  9. vs2017 Visual Studio 离线安装方法
  10. 双目测距 SGBM算法 Python版
  11. 如何找到属于自己高效学习方法?
  12. 关于jenkins自动化打包探索
  13. Nagios安裝与配置
  14. chrome屏蔽右上角更新提示
  15. 在终端下调用IGV进行截图
  16. 记一次亚马逊扩容报错data size unchanged, skipping问题
  17. APP渠道推广手册(新手必备)
  18. 玩转微信 | 炫酷的聊天满屏掉爱心系列,赶紧收藏
  19. shell脚本编写简易教程
  20. matlab计算空间卷积,如何在MATLAB和WolframAlpha中计算函数与自身的卷积?

热门文章

  1. 论文写作与学术规范课堂笔记01——4.30
  2. C++总结笔记(七)—— 运算符重载
  3. Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev
  4. Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()
  5. oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6
  6. csgo怎么控制电脑玩家_电脑怎么远程控制他人电脑,教您给电脑设置远程控制的方法...
  7. linux下用户操作
  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(92)-打印EasyUI 的datagrid表格
  9. HDU 1251 统计难题(Trie模版题)
  10. CSS3 2D 转换