鱼C论坛

 找回密码
 立即注册
查看: 3073|回复: 6

C\C++语言交流:Linux c中关于调用系统命令的问题

[复制链接]
发表于 2011-4-21 23:18:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小逸 于 2011-4-21 23:22 编辑
  1. #include <stdio.h>
  2. main()
  3. {

  4.         printf("Your SystemUserName is:\n");//打印一句话,这个地方!!!只能加\n如果不加或者加其他的(如:\t),结果就是正好反了,就是命令结果先出来,然后才打印了,应该是系统的事,我在Windows下试了一下,加与不加无所谓,结论(不得不说还是B儿NB!^0^)

  5.         system("whoami");//调用linux系统命令查看当前是谁
  6. }
复制代码
现在的问题就是这样效果也能实现,但是不灵活,我想的是声明一个变量,来放system(“whoami”);返回的值,然后,我再通过变量打印出来。试了很多次不行哦,哪位GGMM会的话,请指点一下。3Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-21 23:33:43 | 显示全部楼层
写个windows平台下的例子也一样的哈,谢谢,着急中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-21 23:52:47 | 显示全部楼层
  1. int system(const char * cmdstring)
  2. {
  3.       pid_t pid;
  4.       int status;
  5.       
  6.       if(cmdstring == NULL)
  7.       {            
  8.             return (1);
  9.       }      
  10.       
  11.       if((pid = fork())<0)
  12.       {            
  13.             status = -1;
  14.       }
  15.       else if(pid == 0)
  16.       {
  17.             execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
  18.             -exit(127);
  19.       }
  20.       else
  21.       {
  22.             while(waitpid(pid, &status, 0) < 0)
  23.             {
  24.                   if(errno != EINTER)
  25.                   {
  26.                         status = -1;
  27.                         break;
  28.                   }
  29.             }
  30.       }

  31.       return status;
  32. }
复制代码
以上是system()函数的源码,可以看得出system()是直接调用execl("/bin/sh", "sh", "-c", cmdstring,(char*)0)是调用shell。

这个shell的路径是/bin/sh,后面的字符串都是参数,然后子进程就变成了一个shell进程。

这个shell的参数是cmdstring,就是system接受的参数。

在windows中的shell是command,想必我们都很熟悉shell接受命令之后做的事吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-21 23:55:17 | 显示全部楼层
对了,忘了回答问题,因为SYSTEM只是起到把命令给SHELL的作用,没有能够直接得到他的返回值,所以用一个变量来存储可能要用另外的方法,不过另外的方法可能更纠结,呵呵,把输出缓冲区截取,然后赋值给变量……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-22 00:01:02 | 显示全部楼层
回复 4# 小甲鱼


    :$ 恩好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-12-13 12:08:05 | 显示全部楼层
恩恩恩恩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-15 15:52:32 | 显示全部楼层
学习到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 01:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表