簡體   English   中英

將輸入重定向到C程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM