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”)
不是我