2014-11-21 111 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