C编程linux,读取系统输入,如ping或ls-l

C编程linux,读取系统输入,如ping或ls-l,c,linux,system,C,Linux,System,我尝试创建一个自定义方法,该方法导致返回带有系统输出的char 伪代码是这样的 char *my_Out(char *in ){ in = system ("ping %s",in); return in; } 谢谢您的帮助。您可以使用popen,它返回一个流,您可以从中读取输出。通过将文件读入一个字符串(可能是一个根据需要动态增长的字符串),您可以实现您所要求的功能。 system()不是printf样式的函数。之前,您需要使用sprintf()创建参数 system()的返

我尝试创建一个自定义方法,该方法导致返回带有系统输出的char

伪代码是这样的

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

谢谢您的帮助。

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

  • system()
    不是printf样式的函数。之前,您需要使用
    sprintf()
    创建参数
  • system()
    的返回值是int,而不是char
  • 覆盖函数参数通常不是一个好主意

  • 你想干什么?看起来这个函数所做的一切都是运行
    ping
    (如果没有-c参数,它将永远无法在linux上完成运行)。

    不过,如果您正在查找
    ls-l
    中包含的一条信息,比如说,您可以使用库函数(
    stat
    )轻松地获得它@Jefromi:+1以供参考,尽管一个小nit:
    stat
    通常是一个系统调用,而不是库函数:-PChris:
    stat
    通常是一个包装系统调用的库函数(住在nit附近的人…@caf:现在是的(因为内核版本之间的
    struct stat
    布局不同,并且需要保持用户代码二进制兼容)。最初,不,这是一个直接的系统调用。尽管如此,这是个好消息+1我不同意第3点。虽然它可能不寻常,打破了您的风格,但它没有任何问题。如果您包含
    (声明
    system()
    ),您就会知道它返回一个整数,而不是
    字符*
     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.