我有这个程序:
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
。
为什么重定向不起作用?
答案 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;