首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从stdin读取

从stdin读取
EN

Stack Overflow用户
提问于 2013-04-08 23:49:13
回答 2查看 191.9K关注 0票数 44

在Unix中使用read()系统调用读取用户输入的可能方法有哪些。如何使用read()逐个字节地读取标准输入

EN

回答 2

Stack Overflow用户

发布于 2013-04-08 23:52:24

你可以像这样读取10个字节:

代码语言:javascript
复制
char buffer[10];
read(STDIN_FILENO, buffer, 10);

请记住,read()不会添加'\0'来终止它以使其成为字符串(只是提供原始缓冲区)。

要一次读取一个字节:

代码语言:javascript
复制
char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
 //do stuff
}

别忘了#include <unistd.h>STDIN_FILENO在这个文件中被定义为宏。

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

代码语言:javascript
复制
Integer value   Name
       0        Standard input (stdin)
       1        Standard output (stdout)
       2        Standard error (stderr)

所以你可以使用0来代替STDIN_FILENO

编辑:

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

代码语言:javascript
复制
$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define   STDIN_FILENO    0   /* Standard input.  */

请注意注释/* Standard input. */

票数 47
EN

Stack Overflow用户

发布于 2013-04-08 23:53:41

man read

代码语言:javascript
复制
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

入参:

  • int fd文件描述符是整数,而不是文件指针。0
  • void *buf的文件描述符是指向缓冲区的指针,用于存储由function
  • size_t count stdin读取的字符read

的最大字符数

因此,您可以使用以下代码逐个读取字符:

代码语言:javascript
复制
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()
   ....
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15883568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档