[英]Reading from stdin
在Unix中使用read()
系統調用讀取用戶輸入的可能方法有哪些。 我們如何使用read()
逐字節read()
stdin?
您可以執行以下操作來讀取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()
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.