C 如何控制fileno的输出?

C 如何控制fileno的输出?,c,file-descriptor,C,File Descriptor,我面对的是一段我不理解的代码: read(fileno(stdin),&i,1); switch(i) { case '\n': printf("\a"); break; .... 我知道fileno在这里返回与sdtin关联的文件描述符,然后read将该值放入I变量中 那么,stdin的值应该是什么,以允许i与第一个“case”匹配,即\n 多谢各位 但是stdin的值应该是多少才能与第一个“case”匹配,即\n case语句没有查看stdi

我面对的是一段我不理解的代码:

read(fileno(stdin),&i,1);
switch(i)
{
    case '\n':
      printf("\a");
      break;
    ....
我知道
fileno
在这里返回与
sdtin
关联的文件描述符,然后
read
将该值放入
I
变量中

那么,
stdin
的值应该是什么,以允许
i
与第一个“case”匹配,即
\n

多谢各位

但是stdin的值应该是多少才能与第一个“case”匹配,即\n

case语句没有查看stdin的“值”

 read(fileno(stdin),&i,1);
将单个字节读入
i
(假设
read()
调用成功),如果该字节是
\n
(换行符),则它将匹配大小写。您可能需要阅读的手册页来了解它的功能

但是stdin的值应该是多少才能与第一个“case”匹配,即\n

case语句没有查看stdin的“值”

 read(fileno(stdin),&i,1);
将单个字节读入
i
(假设
read()
调用成功),如果该字节是
\n
(换行符),则它将匹配大小写。您可能需要阅读的手册页来了解它的功能

我知道
fileno
在这里返回与
sdtin
关联的文件描述符

是的,不过我怀疑你不知道那是什么意思

然后
read
将该值放入
i
变量中

否。
read()
不会将文件描述符的值或其任何部分放入提供的缓冲区(在您的情况下,是
i
的字节)。顾名思义,
read()。读取的字节(如果有)存储在提供的缓冲区中

stdin
表示程序的标准输入。如果您从交互式shell运行该程序,它将与您的键盘相对应。程序尝试读取用户输入,并将其与换行符进行比较

这个程序很可能有缺陷,也可能是完全错误的,尽管仅仅从所呈现的片段无法判断。如果
i
int
类型的变量,则其表示形式大于一个字节,但您只读取一个字节。这将只替换表示的一个字节,结果取决于C实现和读取的数据

可以让程序尝试执行的操作与
read()
一起工作,但我建议使用
getchar()

#include <stdio.h>

/*
...
int i;
...
*/

i = getchar();

/* ... */
#包括
/*
...
int i;
...
*/
i=getchar();
/* ... */
我知道
fileno
在这里返回与
sdtin
关联的文件描述符

是的,不过我怀疑你不知道那是什么意思

然后
read
将该值放入
i
变量中

否。
read()
不会将文件描述符的值或其任何部分放入提供的缓冲区(在您的情况下,是
i
的字节)。顾名思义,
read()。读取的字节(如果有)存储在提供的缓冲区中

stdin
表示程序的标准输入。如果您从交互式shell运行该程序,它将与您的键盘相对应。程序尝试读取用户输入,并将其与换行符进行比较

这个程序很可能有缺陷,也可能是完全错误的,尽管仅仅从所呈现的片段无法判断。如果
i
int
类型的变量,则其表示形式大于一个字节,但您只读取一个字节。这将只替换表示的一个字节,结果取决于C实现和读取的数据

可以让程序尝试执行的操作与
read()
一起工作,但我建议使用
getchar()

#include <stdio.h>

/*
...
int i;
...
*/

i = getchar();

/* ... */
#包括
/*
...
int i;
...
*/
i=getchar();
/* ... */

您知道
读取功能的作用吗?将所示代码中的
read
调用视为从
stdin
执行无缓冲
getchar
getc
fgetc
的简单方法。那么,如果使用的是
getchar
而不是
read
,那么您的问题有意义吗?对不起,我刚刚更新了我的帖子
I
的类型必须是
char
(或者
signed char
或者
unsigned char
),输入中的下一个未读字节必须是换行符。您知道
read
函数的作用吗?将所示代码中的
read
调用视为从
stdin
执行无缓冲
getchar
getc
fgetc
的简单方法。那么,如果使用的是
getchar
而不是
read
,那么您的问题有意义吗?对不起,我刚刚更新了我的帖子
I
的类型必须是
char
(或者
signed char
或者
unsigned char
),输入中的下一个未读字节必须是换行符。
stdin
是文件指针
fileno
调用提供其文件描述符值,该值为
0
(在
中定义的宏
STDIN\u fileno
表示相同的值)。所以,read调用相当于:
read(0,&i,1)读取单个字节。不确定
stdin
如何直接连接到case语句。它实际上是从标准输入中读取一个字节,并检查它是否为
\n
(换行符)。此代码有效,因此必须存在int(“\n”)必须是文件值的情况descriptor@HolyGraal当前位置我不确定你最后的评论是否有意义
int(“\n”)
不是我