前言
system()
系统函数在编程过程中经常被调用,在linux下,可以用来执行shell命令,但在平常的工作中,我们很多时候需要执行的shell命令需要接收用户的输入,并对shell命令执行后的返回结果再做相应处理,此时,我们需要对system
函数做一下封装。
用法实例及说明
获取Ubuntu下指定网口的相关信息
- 编程环境: ubuntu
- 相关函数:
fork,execve,waitpid,popen
- 表头文件:
#include <stdlib.h>
- 定义函数:
int system(const char * string);
- 函数说明:
system()
会调用fork()
产生子进程,由子进程来调用/bin/sh-c string
来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()
期间SIGCHLD
信号会被暂时搁置,SIGINT
和SIGQUIT
信号则会被忽略。 - 返回值:
如果fork()
失败 返回-1:出现错误
如果exec()
失败,表示不能执行Shell,返回值相当于Shell执行了exit(127)
如果执行成功则返回子Shell的终止状态
如果system()
在调用/bin/sh
时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>;。如果system()
调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()
调用/bin/sh
失败所返回的127,因此最好能再检查errno
来确认执行成功。
函数接口
void do_system(const char* format, ...)
int get_cmd_value (char *cmd_str, char *value, int len)
void get_cmd_result(const char *cmd, char *result)
接口函数实现
/**********************************************************************************************
* function:system()函数封装,获取指定网卡信息
* author:yahai.zhang
* time: 2018.9.2
* Fi