簡體   English   中英

從stdin讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM