system函数和popen函数使用方法
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函数使用方法相关推荐
- exec族函数、system函数、popen函数、PATH
exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序(在exec都后面的代码不会被得到执行 ...
- linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数
1.exec族函数 精彩博文: https://blog.csdn.net/u014530704/article/details/73848573 path: 比如说 ./a.out ...
- linux中popen函数,system函数与popen函数
为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作: fork一个子进程: 在子进程中调用exec函数去执行command: 在父进程中调用wait ...
- Linux中popen函数的作用小结
概述 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这篇文章重点给大家介绍Linux中popen函数的作用,感兴趣的朋友一起看看吧 p ...
- popen函数 Qt
QT popen函数 popen函数参数说明 popen函数通过创建一个管道的方式打开一个进程,并调用shell. 函数所需头文件:#include<stdio.h> 函数原型:FILE* ...
- system 函数被废除的替代方法
做越狱应用和插件开发,经常会调用 system 去执行系统命令,早在 Xcode 7,使用 system 函数提示警告: 'system' is deprecated: first deprecate ...
- Linux进程编程(PS: exec族函数、system、popen函数)
目录 1.进程相关概念 程序和进程 查看系统中的进程 ps指令 top指令 进程标识符 使用getpid()获取 父进程,子进程 2.创建进程fork 进程创建发生了什么--C程序的存储空间如何分配 ...
- (04)System Verilog 利用函数通用总线激励驱动方法
(04)System Verilog 利用函数通用总线激励驱动方法 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 利用函数通用总线激 ...
- python(45)内置函数:os.system() 和 os.popen()
os.system() 和 os.popen() 概述 os.popen() 方法用于从一个命令打开一个管道. 在Unix,Windows中有效 语法 popen()方法语法格式如下: os.pope ...
最新文章
- 第十一周学习总结--助教
- 没SBA,就试试SBS吧
- 没有一部是烂片 香港最强水准的10部影片
- 我使用 html 反向输出自己打自己(7)
- apache geode项目结构_Apache Flink-基于Java项目模板创建Flink应用(流计算和批计算)...
- VINS简化版本 梳理
- mysql语句获取当前时间,系列篇
- 程序员接私活的几个平台
- vs2017 Visual Studio 离线安装方法
- 双目测距 SGBM算法 Python版
- 如何找到属于自己高效学习方法?
- 关于jenkins自动化打包探索
- Nagios安裝与配置
- chrome屏蔽右上角更新提示
- 在终端下调用IGV进行截图
- 记一次亚马逊扩容报错data size unchanged, skipping问题
- APP渠道推广手册(新手必备)
- 玩转微信 | 炫酷的聊天满屏掉爱心系列,赶紧收藏
- shell脚本编写简易教程
- matlab计算空间卷积,如何在MATLAB和WolframAlpha中计算函数与自身的卷积?
热门文章
- 论文写作与学术规范课堂笔记01——4.30
- C++总结笔记(七)—— 运算符重载
- Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev
- Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()
- oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6
- csgo怎么控制电脑玩家_电脑怎么远程控制他人电脑,教您给电脑设置远程控制的方法...
- linux下用户操作
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(92)-打印EasyUI 的datagrid表格
- HDU 1251 统计难题(Trie模版题)
- CSS3 2D 转换