小逸 发表于 2011-4-21 23:18:10

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

小逸 发表于 2011-4-21 23:33:43

写个windows平台下的例子也一样的哈,谢谢,着急中

小甲鱼 发表于 2011-4-21 23:52:47

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接受命令之后做的事吧。

小甲鱼 发表于 2011-4-21 23:55:17

对了,忘了回答问题,因为SYSTEM只是起到把命令给SHELL的作用,没有能够直接得到他的返回值,所以用一个变量来存储可能要用另外的方法,不过另外的方法可能更纠结,呵呵,把输出缓冲区截取,然后赋值给变量……

小逸 发表于 2011-4-22 00:01:02

回复 4# 小甲鱼


    :$ 恩好的,谢谢

鱼C工作室.YCGZS 发表于 2015-12-13 12:08:05

恩恩恩恩

苏北小毛驴 发表于 2015-12-15 15:52:32

学习到了
页: [1]
查看完整版本: C\C++语言交流:Linux c中关于调用系统命令的问题