2014-11-21 159 views
0

主函數將在無限循環中讀取用戶放入終端的數字並將它們存儲在緩衝區中。我的問題是我需要使用此功能從終端讀取:如何使用讀取功能從終端輸入(stdin)讀取?

read(int fd, void *buf, size_t count);

哪有文件描述符點到終端? (我希望我不是說一些野蠻行徑)

在此先感謝!

編輯:我已經接受了你的建議,但有些東西缺失。這是我寫的測試的小程序:

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

int buffer[5], i=0, j; 

int main(){ 
    for(j=0; j<5; j++) buffer[j] = 0; 
    while(i<5){ 
    read(STDIN_FILENO, buffer, 8); 
    printf("->%d\n", buffer[i]); 
    i++; 
    } 
    return 0; 
} 

Outup:

1 
->2609 
2 
->0 
3 
->0 
4 
->0 
5 
->0 

爲什麼這不打印我的數字?

+0

'fileno(stdin)' – BLUEPIXY 2014-11-21 20:28:22

+0

@BLUEPIXY如果我有一個文件描述符STDIN_FILENO,爲什麼要使用該函數? – Miguel 2014-11-21 20:36:48

+0

它可能會被重寫。 – BLUEPIXY 2014-11-21 20:46:13

回答

1

在POSIX上,您可以使用像STDIN_FILENO這樣的符號來表示應用程序的輸入。但要小心標準輸入並不總是終端,特別是當你通過shell重定向輸入/輸出時。

+0

我不明白這個部分:「當你通過shell重定向輸入/輸出」。 – Miguel 2014-11-21 20:34:08

+1

如果你用類似「myapp 2014-11-21 20:35:59

1

stdin FD上0

stdout FD上1,和

stderr FD上2

2

您的進程已生成三個文件描述符:STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO(分別爲0,1,2)。 這些宏在unistd.h中定義。
read(STDIN_FILENO, buff, bytes)

1

默認情況下,程序的標準輸入是文件描述符0

如果你真的是從終端讀取,而不是標準輸入,可以open()/dev/tty