gpt4 book ai didi

c - 将输入重定向到 C 程序

转载 作者:行者123 更新时间:2023-11-30 17:00:42 25 4
gpt4 key购买 nike

我有这个程序:

int main(int argc,char** argv){
int bytes = atoi(argv[1]);
char buf[1024];
while(1){
int b = read(1,buf,bytes);
if(b<=0) break;
write(1,buf,b);
}
return 0;

这是命令 cat 的一个版本,但在这个程序中,我给出每个 read 将读取的字节数作为参数。现在我有一个文件 b.txt 并且我想将文件内容重定向到程序作为输入,所以我使用了这个

./mycat 1024 < b.txt

但是什么也没发生,程序一直在等待我输入一些文本,就像我输入的一样./mycat 1024。为什么重定向不起作用?

最佳答案

您必须从标准输入中读取。但您正在从标准输出读取内容。因此,只有您被阻止输入。

stdin 的文件描述符是 0。stdout 是 1。如果您对这些 1 和 0 感到困惑。您可以使用 stdin 和 stdout 文件描述符的宏。

以下是unistd.h头文件中定义的内置宏。

STDIN_FILENO     -- Standard input file descriptor
STDOUT_FILENO -- Standard output file descriptor
STDERR_FILENO -- Standard error file descriptor

因此,将代码更改为如下所示。它将按您的预期工作。

#include<unistd.h>
#include<stdio.h>

int main(int argc,char** argv){
int bytes = atoi(argv[1]);
char buf[1024];
while(1){
int b = read(STDIN_FILENO,buf,bytes);
if(b<=0) break;
write(STDOUT_FILENO,buf,b);
}
return 0;

关于c - 将输入重定向到 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426336/

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