C 阅读标准文本

C 阅读标准文本,c,unix,stdin,C,Unix,Stdin,在Unix中,使用read()系统调用读取用户输入的可能方式有哪些。我们如何使用read()逐字节读取stdin?您可以这样做来读取10个字节: char buffer[10]; read(STDIN_FILENO, buffer, 10); 记住,不要添加“\0”来终止以使其成为字符串(只提供原始缓冲区) 要一次读取1个字节,请执行以下操作: char ch; while(read(STDIN_FILENO, &ch, 1) > 0) { //do stuff } 不要忘了

在Unix中,使用
read()
系统调用读取用户输入的可能方式有哪些。我们如何使用
read()
逐字节读取stdin?

您可以这样做来读取10个字节:

char buffer[10];
read(STDIN_FILENO, buffer, 10);
记住,不要添加
“\0”
来终止以使其成为字符串(只提供原始缓冲区)

要一次读取1个字节,请执行以下操作:

char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
 //do stuff
}
不要忘了在这个文件中包含定义为宏的
STDIN\u文件no

有三个标准POSIX文件描述符,对应于三个标准流,每个进程都应该有:

Integer value   Name
       0        Standard input (stdin)
       1        Standard output (stdout)
       2        Standard error (stderr)
因此,您可以使用0来代替
STDIN\u FILENO

编辑:
在Linux系统中,您可以使用以下命令找到此命令:

$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define   STDIN_FILENO    0   /* Standard input.  */
注意注释
/*标准输入*/

来自:


您应该阅读
read()
manualRead可以很好地做到这一点,但取决于您想做什么,您可能会发现您需要做的不仅仅是调用read-您可以发布您的代码,并准确解释您有问题的部分吗?我同意Mats,您在这里寻找什么?问题在哪里?还有很多不同的方法,在问问题之前你有没有搜索过?你可以使用
int fileno(FILE*stream)
first@Grijesh-您可以更进一步,
stdin
将为0,因此您可以只
读取(0,…
不需要在*NIX上搜索
stdin
的文件号systems@Mike是的,我
stdin=0
stdout=1
stderr=2
,所有操作系统都是一样的。@MOHAMED wait不要删除你的答案,过一段时间我会添加一些细节。@GrijeshChauhan我不打算这样做,我更新了它的基础d在您的备注中,为什么在手册页中使用“应尝试”一词。是否有任何情况表明read无法准确读取第三个参数指定的字节数?@weefwqg3 read()在被信号中断时读取的字节数将少于请求的字节数,或者如果可用字节数少于请求的字节数,等等。
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
char buf[1];

while(read(0, buf, sizeof(buf))>0) {
   // read() here read from stdin charachter by character
   // the buf[0] contains the character got by read()
   ....
}