从标准input读取

在Unix中使用read()系统调用来读取用户input的可能方法是什么? 我们如何使用read()从字节read()字节?

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

 char buffer[10]; read(STDIN_FILENO, buffer, 10); 

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

要一次读取1个字节:

 char ch; while(read(STDIN_FILENO, &ch, 1) > 0) { //do stuff } 

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

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

 Integer value Name 0 Standard input (stdin) 1 Standard output (stdout) 2 Standard error (stderr) 

所以,而不是STDIN_FILENO你可以使用0。

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

 $ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define' /usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */ 

注意评论/* Standard input. */ /* Standard input. */

从这个人读 :

 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 

输入参数:

  • int fd文件描述符是一个整数,而不是文件指针。 stdin文件描述符是0

  • void *buf指向void *buf指针,用于存储由read函数读取的字符

  • 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() .... }