如何使用读取函数从终端输入(stdin)读取?

时间:2014-11-21 20:21:35

标签: c linux

主函数将在无限循环中读取用户放入终端的数字并将其存储在缓冲区中。我的问题是我需要使用此功能从终端读取:

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

为什么这不打印我插入的数字?

4 个答案:

答案 0 :(得分:2)

您的流程已生成三个文件描述符,因为它已经生成:STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO(分别为0,1,2)。 这些宏在unistd.h中定义 read(STDIN_FILENO, buff, bytes)

答案 1 :(得分:1)

stdin是fd 0

stdout是fd 1

stderr是fd 2

答案 2 :(得分:1)

默认情况下,程序的标准输入位于文件描述符0上。

如果你真的想从终端阅读,而不是标准输入,你可以open() /dev/tty

答案 3 :(得分:1)

在POSIX上,您可以使用STDIN_FILENO之类的符号来表示应用程序的输入。但要注意标准输入并不总是终端,特别是当您通过shell重定向输入/输出时。