gpt4 book ai didi

c - 如何将 system() 中命令的标准输出传递给自身标准输入?

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:38 25 4
gpt4 key购买 nike

假设我这样调用:

system("ls -1"); // argument minus-one puts one item per line

...我如何在调用进程标准输入中捕获它?

根据我的阅读,系统(在 Linux 中)打开 bash 提示符并尝试执行命令。这表明进程调用系统是父进程。 Reading about parent process pid suggest this is always 1111 ,但我找不到这方面的确切来源,只是 linux haxers 说“这样做”,既没有解释也没有来源。

阅读一些其他来源可以通过 /proc/pid/fd/0 将数据传递到任意进程管道

基于阅读这些内容,我认为:

system("ls -1 > /proc/1111/fd/0"); 

...完成这个。但看起来我以前什么都没做过,我的推论来源也不像我希望的那样正式。

那么,这是一种将系统命令的输出传递给自身标准输入的可移植方式吗?

如果没有,我该怎么做?

最佳答案

您似乎正在尝试读取特定目录中所有文件/文件夹名称的列表。在您的情况下是当前工作目录。由于您尝试使用 ls,因此您似乎也对 *NIX 解决方案感兴趣。

有很多方法可以将子进程的输出读入父进程。您可以将 fork/exec 与管道一起使用,或者您正在使用 popen

但是对于这个例子,你不需要通过 ls。您可以使用 Linux API 直接读取目录。

您需要使用函数 opendirreaddir .

考虑以下程序 -

#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同样的

关于c - 如何将 system() 中命令的标准输出传递给自身标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51040104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com