Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用读取功能读取终端输入(stdin)?_C_Linux - Fatal编程技术网

C 如何使用读取功能读取终端输入(stdin)?

C 如何使用读取功能读取终端输入(stdin)?,c,linux,C,Linux,主要功能是在一个无限循环中读取用户输入终端的数字,并将其存储在缓冲区中。我的问题是,我需要使用此功能从终端读取: read(int-fd,void*buf,size\u-t-count) 文件描述符如何指向终端?!(我希望我不是在说一些野蛮的话) 提前谢谢 编辑:我已经接受了你的建议,但是缺少了一些东西。这是我编写的一个小程序,用于测试: #include <stdio.h> #include <stdlib.h> #include <unistd.h> i

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

read(int-fd,void*buf,size\u-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;
}

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

stdin
是fd
0

stdout
是fd
1
,并且


stderr
是fd
2
stdin
是fd
0

stdout
是fd
1
,并且


stderr
是fd
2

自生成以来,您的进程有三个打开的文件描述符:
STDIN\u FILENO
STDOUT\u FILENO
stderr\u FILENO
(分别为0、1、2)。 这些宏在
unistd.h
中定义

read(STDIN\u FILENO,buff,bytes)

自生成以来,您的进程有三个打开的文件描述符:
STDIN\u FILENO
STDOUT\u FILENO
STDERR\u FILENO
(分别为0、1、2)。 这些宏在
unistd.h
中定义

读取(STDIN\u FILENO,buff,bytes)
默认情况下,程序的标准输入位于文件描述符0上


如果您真的想从终端读取,而不是标准输入,则可以默认情况下,程序的标准输入位于文件描述符0上


如果您真的想从终端读取数据,而不是标准输入,您可以在POSIX上使用类似于STDIN\u FILENO的符号来表示应用程序的输入。但是要注意,标准输入并不总是终端,特别是当您通过shell重定向输入/输出时。

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

我不理解这一部分:“当你通过shell重定向输入/输出时”。如果你用类似“myappSTDIN\u FILENO
在POSIX级别或
STDIN
在C级别)到该文件,如果不重新打开它,您将无法读取到终端。我不理解这部分:“当您通过shell重定向输入/输出时”。如果您使用类似“myappSTDIN\u FILENO在POSIX级别或
STDIN
在C级别)如果我有一个文件描述符STDIN\u FILENO,我为什么要使用该函数?它可能会被重写。@BLUEPIXY如果我有一个文件描述符STDIN\u FILENO,我为什么要使用该函数?它可能会被重写。
1
->2609
2
->0
3
->0
4
->0
5
->0