gpt4 book ai didi

c - 在 C 中重新创建 STDIN 重定向

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

我正在尝试创建一个重定向 IO 的 C 程序。我已经完成了输出小菜一碟,但输入似乎更难。也许我只是不太明白,但我正在做这样的事情:

  int redFile;

fflush(stdin);

myio = dup(0);

redFile = open(rhs, O_WRONLY, 0644);

dup2(redFile, 0);
close(redFile);

// Any scanf("%s", &buf) here should read from my redFile (correct?) into some buffer, buf[64] or something

fflush(stdin);
dup2(myio, 0);
close(myio);

所以现在我有一些 buf[64],里面有一个来自文件 redFile 的字符串,但是我如何将它作为 char * lhs(在程序的前面设置)指定的命令的输入。我的整个程序基本上使用 execve() 创建一个虚拟外壳。

我需要能够处理一些像:

输入.txt:

test1
test2
test3

tac < input.txt > output.txt

输出.txt

test3
test2
test1

最佳答案

如果您希望将缓冲区的内容作为进程的输入,则需要将该数据写入管道。基本上,您需要先创建一个管道,然后再 fork 。子进程将通过 dup2( pfd[ 0 ], STDIN_FILENO ) 复制其输入以从管道中读取,然后执行,而父进程会将数据写入管道的另一侧。

关于c - 在 C 中重新创建 STDIN 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859640/

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