Joh*_*nic 32
您可以执行以下操作来读取10个字节:
char buffer[10];
read(STDIN_FILENO, buffer, 10);
Run Code Online (Sandbox Code Playgroud)
记得read()没有添加'\0'到终止使它成为字符串(只是给出原始缓冲区).
要一次读取1个字节:
char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记#include <unistd.h>,STDIN_FILENO在此文件中定义为宏.
有三个标准POSIX文件描述符,对应于三个标准流,可能每个进程都应该具有:
Integer value Name
0 Standard input (stdin)
1 Standard output (stdout)
2 Standard error (stderr)
Run Code Online (Sandbox Code Playgroud)
所以STDIN_FILENO你可以使用0.
编辑:
在Linux系统中,您可以使用以下命令找到它:
$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */
Run Code Online (Sandbox Code Playgroud)
注意评论 /* Standard input. */
从男人那里读到:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)
输入参数:
int fd文件描述符是一个整数而不是文件指针.stdinis的文件描述符0
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()
....
}
Run Code Online (Sandbox Code Playgroud)