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
是fd0
stdout
是fd1
,并且
stderr
是fd2
stdin
是fd0
stdout
是fd1
,并且
stderr
是fd2
自生成以来,您的进程有三个打开的文件描述符: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