![](/img/trans.png)
[英]Redirecting output of a C program as input of another program in Linux command shell
[英]Redirecting input to C program
我有這個程序:
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;
這是命令貓的一種版本,但是在此程序中,我給出了每次read
將讀取的字節數作為參數。 現在我有一個文件b.txt
,我想將文件內容重定向到程序作為輸入,所以我用了這個
./mycat 1024 < b.txt
但是什么也沒發生,程序一直在等我輸入一些文本,就像我./mycat 1024
。 為什么重定向不起作用?
您必須閱讀標准輸入。 但是您正在從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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.