如何在C语言中调用shell命令

如题所述

在C语言中调用shell命令的方法实现。
C程序调用shell脚本共有两种方法 :system()、popen(),分别如下:
system()
不用自己去创建进程,系统已经封装了这一步,直接加入自己的命令即可
popen() 也可以实现执行的命令,比system
开销小
以下分别说明:
1)system(shell命令或shell脚本路径);
system()
会调用fork()产生 子历程,由子历程来调用/bin/sh-c string来履行 参数string字符串所代表的命令,此命令履行
完后随即返回原调用的历程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被漠视 。

回值:如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。 如果
system()调用成功 则最后会返回履行 shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因
此最好能再反省 errno 来确认履行 成功 。
system命令以其简略
高效的作用得到很很广泛 的利用 ,下面是一个例子
例:在/tmp/testDir/目录下有shell脚本tsh.sh,内容为

#!/bin/sh
wget $1
echo "Done!"
2)popen(char
*command,char *type)
popen()
会调用fork()产生 子历程,然后从子历程中调用/bin/sh -c来履行 参数command的指令。参数type可应用
“r”代表读取,“w”代表写入。遵循此type值,popen()会建立 管道连到子历程的标准 输出设备 或标准 输入设备
,然后返回一个文件指针。随后历程便可利用 此文件指针来读取子历程的输出设备 或是写入到子历程的标准 输入设备 中。此外,所有应用 文
件指针(FILE*)操作的函数也都可以应用 ,除了fclose()以外。
返回值:若成功
则返回文件指针,否则返回NULL,差错 原因存于errno中。注意:在编写具SUID/SGID权限的程序时请尽量避免应用
popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。
例:C程序popentest.c内容如下:
#include<stdio.h>
main
{
FILE * fp;
charbuffer[80];
fp=popen(“~/myprogram/test.sh”,”r”);
fgets(buffer,sizeof(buffer),fp);
printf(“%s”,buffer);
pclose(fp);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-11-19
有个函数是 command 直接调用就可以了
第2个回答  2016-11-19
system("")

~~~~~~~~~~~

如何在C语言中调用shell命令
1)system(shell命令或shell脚本路径);system()会调用fork()产生 子历程,由子历程来调用\/bin\/sh-c string来履行 参数string字符串所代表的命令,此命令履行 完后随即返回原调用的历程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被漠视 。返 回值:如果system()在调用\/b...

如何在C语言中调用shell命令
1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen 表头文件 #include<stdlib.h> 定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用\/bin\/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随 即返回原调用的进程。在...

如何在C语言中执行shell命令
int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);这四个函数的主要差别就在于参数的类型和用不用输入命令的绝对路径上。

linux下怎样用c语言调用shell命令
方法二:popen() 会调用fork()产生 子历程,然后从子历程中调用\/bin\/sh -c来履行 参数command的指令。参数type可应用 “r”代表读取。“w”代表写入。遵循此type值。popen()会建立 管道连到子历程的标准 输出设备 或标准 输入设备 ,然后返回一个文件指针。随后历程便可利用 此文件指针来读取子历程...

服务器shell权限挑战极限C语言获取Linux服务器Shell权限c获取linux
进入服务器shell,查看当前正在使用的shell权限;如果当前不是使用root权限,则调用bin_sh -p 命令以root权限来获取shell权限;最后执行\/bin\/sh -p 来获取最高级root权限。3. 最后,使用代码执行脚本,给自己绑定一些利用服务器漏洞性质来阻止,甚至注销当前用户的攻击:使用C语言的system()函数,在服务...

怎么在c语言程序里调用shell脚本文件
int iRetCode;char sStr[100];sprintf(sStr,"home\/test\/upload\/unload.sh");iRetCode=system(sStr);if(iRetCode<0){ printf("shell error!");}

linux下如何用c语言调用shell命令
此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。 返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中。 注意:在编写具SUID\/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。 例:C程序popentest.c内容如...

C语言能否用在shell脚本
C语言可以通过system()调用执行外部shell脚本,但shell脚本里不能直接执行C代码。因为shell脚本是解释执行的,C代码只能被C编译器认可,需要编译成可执行文件后才能在shell脚本中调用。awk文本处理工具里的环境基本是C语法,所以如果shell脚本里使用awk,那么是可以直接用C语法的。

用C语言实现shell中的 Pushd +n命令
readDirectorys();int len = directorys.length;\/\/ 取得需要设置的工作路径 char* workDiretory = directorys[len - n];directorys.push(workDiretorys);\/\/ 设置当前工作路径为需求中的路径 setWindowDirectory(workDirectory);\/\/ 设置历史纪录,写回文件 setDirectoryHistory(directorys);return 0;

如何用C语言执行powershell命令
我有一条获取server安装的各种组件的powershell命令,可以在server上正常命令行执行 powershell -command "& {get-windowsfeature | Out-File -FilePath C:\\Command.txt}"但我用C语言写出来的exe去跑的时候总是不能正常执行,因为server环境里面没有debug环境,所以也不知道具体错在什么地方了,具体...

相似回答