Was sind die Möglichkeiten für das Lesen von Benutzereingaben mit read()
Systemaufruf in Unix sind. Wie können wir Byte für Byte von stdin lesen mit read()
?von stdin lesen
Antwort
Sie so etwas wie dieses 10 Byte lesen tun können:
char buffer[10];
read(STDIN_FILENO, buffer, 10);
read() erinnere mich nicht '\0'
fügt zu beenden, es Zeichenfolge zu machen (gibt nur rohe Puffer).
um 1 Byte zu einem Zeitpunkt zu lesen:
char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
//do stuff
}
und vergessen Sie nicht zu #include <unistd.h>
, STDIN_FILENO
in dieser Datei als Makro definiert.
Es gibt drei Standard-POSIX-Dateibeschreibungen, zu den drei Standardströmen entsprechen, die vermutlich sollte jeder Prozess erwarten zu haben:
Integer value Name
0 Standard input (stdin)
1 Standard output (stdout)
2 Standard error (stderr)
Statt STDIN_FILENO
Sie 0.
bearbeiten können:
In Linux-System können Sie dies mit folgendem Befehl finden:
$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */
Hinweis Kommentar /* Standard input. */
Warum in der Manpage verwendet wird das Wort "soll versuchen". Gibt es einen Fall, dass Lesen nicht genau die Anzahl der Bytes liest, die durch das 3. Argument angegeben wurde?https://linux.die.net/man/3/lesen – weefwefwqg3
Vom man read:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
Eingabeparameter:
int fd
Dateideskriptor ist eine ganze Zahl und nicht ein Dateizeiger. Der Dateideskriptor fürstdin
ist0
void *buf
Zeiger zum Speichern von Zeichen durch dieread
Funktionsize_t count
maximale Anzahl von Zeichen So
lesen lesen puffern können Sie Zeichen für Zeichen lesen mit dem folgenden Code:
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()
....
}
Hmm. 'stdin' ist eine Datei! –
Sie könnten 'int fileno (FILE * stream)' zuerst verwenden –
In der Tat danke für die Anmerkungen. Antwort aktualisiert – MOHAMED
Ihre sho ull lesen ''lesen()' Handbuch lesen –
Lesen wird dies ganz gut tun, aber je nachdem, was genau Sie tun möchten, können Sie mehr als nur lesen zu tun - können Sie Ihren Code eingeben und genau erklären Mit welchem Teil hast du Probleme? –
Ich stimme Mats zu, was * excatly * suchst du hier? Wo ist das Problem? [Es gibt] (http://stackoverflow.com/questions/9610064/read-stdin-in-c) auch viele verschiedene [Beispiele] (http://stackoverflow.com/questions/7503399/reading-from- "stdin-using-read-and-finding-out-the-size-of-the-buffer" für die Vorgehensweise [this on SO] (http://stackoverflow.com/questions/1237329/read-from-stdin- doesnt-ignore-newline), machen Sie irgendwelche Suchvorgänge, bevor Sie die Frage stellen? – Mike