首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将system()中的命令输出传递给self stdin?

问如何将system()中的命令输出传递给self stdin?
EN

Stack Overflow用户
提问于 2018-06-26 10:01:23
回答 1查看 337关注 0票数 0

假设我称之为:

代码语言:javascript
复制
system("ls -1"); // argument minus-one puts one item per line

...how,我会在调用过程stdin中捕捉到这一点吗?

根据我所读到的,system (在Linux中)打开bash提示符并尝试执行命令。这表示进程调用系统是父进程。1111,但我找不到明确的源代码,只是linux说“做这件事”,既没有解释也没有来源。

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

根据这些资料,我认为:

代码语言:javascript
复制
system("ls -1 > /proc/1111/fd/0"); 

...accomplishes这个。但看起来我以前没做过什么,而且我的扣减来源也没有我想要的那么正式。

那么,这是一种将系统命令的输出传递给stdin的便携方式吗?

如果没有,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 10:22:50

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

有许多方法可以将输出从子进程读入父进程。您可以在管道中使用fork/exec,也可以使用popen。

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

您需要使用函数opendir和readdir。

考虑一下下面的程序-

代码语言:javascript
复制
#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;
}

如果不需要"."和".."条目,您可能想跳过这些条目。

下面是一个相同的工作演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51040104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档