如何控制fileno的输出?
How to control the output of fileno?
我遇到了一段我看不懂的代码:
read(fileno(stdin),&i,1);
switch(i)
{
case '\n':
printf("\a");
break;
....
我知道fileno
return这里是sdtin
关联的文件描述符,然后read
把这个值放到i
变量中。
那么,stdin
的值应该是多少才能使 i
与第一个 "case" 匹配,即 \n
?
谢谢
But what should be the value of stdin to match with the first "case", i.e \n ?
case 语句不查看标准输入的 "value"。
read(fileno(stdin),&i,1);
将单个字节读入 i
(假设 read()
调用成功),如果该字节是 \n
(换行符),那么它将匹配大小写。您可能需要阅读 read(2)
的手册页以了解它的作用。
I know that fileno
return the file descriptor associated with the sdtin
here,
是的,虽然我怀疑你不知道那是什么意思。
then read
put this value in i
variable.
没有。不不不不不。 read()
不会 将文件描述符的值或其任何部分放入提供的缓冲区(在您的例子中,是 i
的字节)。顾名思义,read()
尝试 从 文件 中读取文件描述符作为第一个参数传递。读取的字节(如果有)存储在提供的缓冲区中。
stdin
代表程序的标准输入。如果您 运行 来自交互式 shell 的程序,那将对应于您的键盘。该程序尝试读取用户输入,并将其与换行符进行比较。
该程序可能存在缺陷,甚至可能是完全错误的,但仅从所提供的片段无法分辨。如果 i
是类型 int
的变量,那么它的表示大于一个字节,但您只是将一个字节读入其中。这将仅替换表示的一个字节,结果取决于 C 实现和读取的数据。
程序似乎试图做的事情可以与 read()
一起工作,但我建议改用 getchar()
:
#include <stdio.h>
/*
...
int i;
...
*/
i = getchar();
/* ... */
我遇到了一段我看不懂的代码:
read(fileno(stdin),&i,1);
switch(i)
{
case '\n':
printf("\a");
break;
....
我知道fileno
return这里是sdtin
关联的文件描述符,然后read
把这个值放到i
变量中。
那么,stdin
的值应该是多少才能使 i
与第一个 "case" 匹配,即 \n
?
谢谢
But what should be the value of stdin to match with the first "case", i.e \n ?
case 语句不查看标准输入的 "value"。
read(fileno(stdin),&i,1);
将单个字节读入 i
(假设 read()
调用成功),如果该字节是 \n
(换行符),那么它将匹配大小写。您可能需要阅读 read(2)
的手册页以了解它的作用。
I know that
fileno
return the file descriptor associated with thesdtin
here,
是的,虽然我怀疑你不知道那是什么意思。
then
read
put this value ini
variable.
没有。不不不不不。 read()
不会 将文件描述符的值或其任何部分放入提供的缓冲区(在您的例子中,是 i
的字节)。顾名思义,read()
尝试 从 文件 中读取文件描述符作为第一个参数传递。读取的字节(如果有)存储在提供的缓冲区中。
stdin
代表程序的标准输入。如果您 运行 来自交互式 shell 的程序,那将对应于您的键盘。该程序尝试读取用户输入,并将其与换行符进行比较。
该程序可能存在缺陷,甚至可能是完全错误的,但仅从所提供的片段无法分辨。如果 i
是类型 int
的变量,那么它的表示大于一个字节,但您只是将一个字节读入其中。这将仅替换表示的一个字节,结果取决于 C 实现和读取的数据。
程序似乎试图做的事情可以与 read()
一起工作,但我建议改用 getchar()
:
#include <stdio.h>
/*
...
int i;
...
*/
i = getchar();
/* ... */