【问题标题】:C Programming linux , read system inputs like ping or ls -lC Programming linux,读取系统输入,如 ping 或 ls -l
【发布时间】:2011-01-23 11:50:41
【问题描述】:

我尝试制作一个自定义方法,导致返回带有系统输出的字符。

这样的伪代码。

char *my_Out(char *in ){
    in = system ("ping %s",in);
    return in;
}

感谢您的帮助。

【问题讨论】:

  • 如果你包含了<stdlib.h>(声明system()),你就会知道它返回一个整数而不是char *

标签: c linux system


【解决方案1】:

您可以使用popen,它会返回一个流,您可以从中读取输出。通过读取直到文件结束,进入一个字符串(可能是一个根据需要动态增长的字符串),您可以实现您所要求的。

【讨论】:

  • 虽然如果您正在寻找包含在 ls -l 中的信息之一,例如,您可以使用库函数 (stat) 更轻松地获得它。
  • @Jefromi:+1 供您洞察,虽然一个小笨蛋:stat 通常是系统调用,而不是库函数。 :-P
  • Chris: stat 通常是一个库函数包装一个系统调用(他靠着傻瓜生活......)
  • @caf:现在,是的(因为内核版本之间的struct stat 布局不同,并且需要保持用户代码二进制兼容)。最初,不,这是一个直接的系统调用。尽管如此,好电话。 +1
【解决方案2】:

一些事情

  1. system() 不是 printf 风格的函数。您需要先使用sprintf() 来创建您的论点。
  2. system()的返回值是一个int,不是一个char
  3. 覆盖函数参数通常不是一个好主意。

你想做什么?看起来这个函数所做的只是运行ping(如果没有 -c 参数,它永远不会在 linux 上完成运行)。

【讨论】:

  • 我不同意第 3 点。虽然它可能不寻常并且会破坏你的风格,但它没有任何问题。
【解决方案3】:
 Duplicate the stdout to some other file descriptor by using dup2.After the execution of the command read all the lines from the file using that file descriptor and return it.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2011-01-30
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多