问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux C语言用system()调用,带参数

发布网友 发布时间:2022-04-25 07:13

我来回答

2个回答

热心网友 时间:2023-05-15 18:46

linux c system函数介绍:

system(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#i nclude
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
范例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
执行结果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。

system函数的源码

#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>

int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}

if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}

return status;
}

那么如何获得system的返回值呢??

char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;

if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}

可以man下waitpid查看下如何检查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具体的这些宏查看man waitpid

热心网友 时间:2023-05-15 18:47

格式:
system(字符串)

例如:
char my_cmd1[]="ls -l";
char my_cmd2[]="ls -l > abc.txt";
char my_cmd3[]="simser.exe 67";
system(my_cmd1);
system(my_cmd2);
system(my_cmd3);

---------------
simser.exe 67
67 是位置参数才可以这样写。(也就是 通过 simser.exe 的
main(int argc, char *argv[]) argv 传入的)

system("simser","67"); -- wrong, system takes one parameter only.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? linux sys和system用户的区别 搜不到airpods 安卓用airpods需要下载什么软件 AI如何选中其中图层拉到另一张图片上? ai里,图层很多,怎么把某个图层放到指定图层下方?除了一层一层移动,有没有快捷的方法 ai怎么移动不动行 AI中如何改变对象所在的图层? ai中怎样把图层移动至上一层? ai怎么拖移图层 你是如何做美味的鱼香茄子的? 求菇小爽香菇酱的做菜菜谱? 豆豉烤鱼真的香到想要流口水,在家能做出来吗? 南方面条都有怎样的吃法,要怎样做 蛏子肉多味鲜怎么做才好吃? 把光光酱炒鸡的具体做法有谁能给说一下 谢谢了 光光酱炒鸡.的做法,光光酱炒鸡.怎么做好吃 怎么样用局域网上网。怎么设置成区域网? 怎样在局域网下设置局域网? 如何在局域网内设置,使得某个IP被转换为域名,且支持局域网内用户访问? 如何在局域网内再建立一个小范围的局域网? system函数在linux系统中能直接调用吗? Linux 下system (&quot;stty -echo&quot;)是什么意思 linux下system()调用失败,返回32512,但有程序执行结果有时成功有时失败 如何在linux下使用systemc linux内核空间可以调用system吗 linux下system 函数调用不成功,怎么回事? linux下system函数调用shell命令后,怎样让主进程等子进程返回后,接着执行 我用system函数,基于linux系统,这个路径是没错的,但是为什么system函数提示不存在呢 皮纹纸的用途是什么? 云彩纸和皮纹纸是什么? 皮纹纸是如何制作的? 蚁人彩蛋里的亚裔美女是谁 论文,绿色皮纹纸左侧胶装怎么弄? 求这个华裔美女的名字,急。。 华裔女神asis电击的道具同款,国内有吗? (蓝色皮纹纸色号1505)是什么颜色 美剧 神探夏洛克 第一季第2集的华裔美女是谁 比尔盖茨又爆新瓜!将娶小30岁华裔美女,一年后生混血宝宝,你怎么看... 开一个图文店得多少万? 开个装订标书的图文店需要什么设备