假设我打电话给类似的人
system("ls -1"); // argument minus-one puts one item per line
...我如何在调用进程stdin中捕获它?
据我所读,系统(在Linux中)打开一个bash提示符并尝试执行命令。这表明流程调用系统是父系统。 Reading about parent process pid suggest this is always 1111
,但是我找不到确切的消息来源,只是Linux批评者说“做这个”,既没有解释也没有消息来源。
读取其他一些资源可以通过/proc/pid/fd/0
将数据传递到任意处理管道基于阅读这些内容,我会认为:
system("ls -1 > /proc/1111/fd/0");
...完成此操作。但这似乎是我以前没有做过的事情,我的推论来源也不像我希望的那样正式。
那么,这是将系统命令输出传递到self stdin的一种便携式方法吗?
如果没有,我该怎么办?
答案 0 :(得分:2)
似乎您正在尝试读取特定目录中所有文件/文件夹名称的列表。您的情况是当前工作目录。由于您尝试使用ls
,因此您似乎也对* NIX解决方案感兴趣。
有很多方法可以将子过程的输出读取到父过程中。您可以对管道使用fork
/ exec
,也可以使用popen
。
但是对于本示例,您无需进行ls
的操作。您可以使用Linux API直接读取目录。
考虑以下程序-
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
DIR *directory = opendir(".");
if (directory == NULL)
return EXIT_FAILURE;
struct dirent * entry;
while (entry = readdir(directory)) {
printf("%s\n", entry->d_name);
}
closedir(directory);
return 0;
}
如果您不想使用"."
和".."
条目,则可能要跳过它们。
这里是working demo