在Unix中使用read()系统调用读取用户输入的可能方法有哪些。如何使用read()逐个字节地读取标准输入
发布于 2013-04-08 23:52:24
你可以像这样读取10个字节:
char buffer[10];
read(STDIN_FILENO, buffer, 10);请记住,read()不会添加'\0'来终止它以使其成为字符串(只是提供原始缓冲区)。
要一次读取一个字节:
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)所以你可以使用0来代替STDIN_FILENO。
编辑:
在Linux系统中,您可以使用以下命令找到它:
$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */请注意注释/* Standard input. */
发布于 2013-04-08 23:53:41
从man read
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);入参:
int fd文件描述符是整数,而不是文件指针。0void *buf的文件描述符是指向缓冲区的指针,用于存储由functionsize_t count stdin读取的字符read 的最大字符数
因此,您可以使用以下代码逐个读取字符:
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()
....
}https://stackoverflow.com/questions/15883568
复制相似问题