C\C++语言交流:Linux c中关于调用系统命令的问题
本帖最后由 小逸 于 2011-4-21 23:22 编辑#include <stdio.h>
main()
{
printf("Your SystemUserName is:\n");//打印一句话,这个地方!!!只能加\n如果不加或者加其他的(如:\t),结果就是正好反了,就是命令结果先出来,然后才打印了,应该是系统的事,我在Windows下试了一下,加与不加无所谓,结论(不得不说还是B儿NB!^0^)
system("whoami");//调用linux系统命令查看当前是谁
}
现在的问题就是这样效果也能实现,但是不灵活,我想的是声明一个变量,来放system(“whoami”);返回的值,然后,我再通过变量打印出来。试了很多次不行哦,哪位GGMM会的话,请指点一下。3Q 写个windows平台下的例子也一样的哈,谢谢,着急中 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()函数的源码,可以看得出system()是直接调用execl("/bin/sh", "sh", "-c", cmdstring,(char*)0)是调用shell。
这个shell的路径是/bin/sh,后面的字符串都是参数,然后子进程就变成了一个shell进程。
这个shell的参数是cmdstring,就是system接受的参数。
在windows中的shell是command,想必我们都很熟悉shell接受命令之后做的事吧。 对了,忘了回答问题,因为SYSTEM只是起到把命令给SHELL的作用,没有能够直接得到他的返回值,所以用一个变量来存储可能要用另外的方法,不过另外的方法可能更纠结,呵呵,把输出缓冲区截取,然后赋值给变量…… 回复 4# 小甲鱼
:$ 恩好的,谢谢 恩恩恩恩 学习到了
页:
[1]