将输入重定向到C程序

时间:2016-05-25 01:17:53

标签: c redirect

我有这个程序:

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。 为什么重定向不起作用?

1 个答案:

答案 0 :(得分:0)

你必须从stdin读取。但是你正在阅读stdout中的内容。因此,只有您被阻止输入输入。

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;