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
- 1. Binärdaten von stdin lesen
- 2. Eine Zeile von stdin lesen
- 3. von stdin Schreib Lesen in stdout C
- 4. C++ Lesen von stdin istringstream mit
- 5. Racket - lesen von stdin bis neue Zeile
- 6. Wie rsync SRC von STDIN lesen?
- 7. Python: UnicodeEncodeError beim Lesen von stdin
- 8. Python: vi-Modus beim Lesen von stdin
- 9. Lesen und teilen mehrere Zeilen von Stdin
- 10. Aus Datei lesen, oder STDIN
- 11. lesen stdin mehrmals in bash
- 12. Erlang lesen stdin schreiben stdout
- 13. Lesen von STDIN-Rohr bei der Verwendung von proc_open
- 14. Komprimieren von Dateien beim Lesen von Daten aus STDIN
- 15. Lesen stdin in GHCI auf Linux gebrochen
- 16. aysncio nicht lesen kann stdin auf Windows
- 17. R - STDIN Zeile für Zeile lesen
- 18. C: Lesen von stdin, bis Enter zweimal gedrückt wird
- 19. Lesen von stdin und vergleichen Zahlen in C
- 20. Eine Datei von umadressierter stdin mit Python lesen
- 21. Python, "gefilterte" Zeile Bearbeitung, lesen stdin von Char ohne Echo
- 22. So lesen Sie Zeilen von stdin (* in *) in clojure
- 23. C - Lesen von stdin, wenn Zeichen eingegeben werden
- 24. Bad Pipe-Dateideskriptor beim Lesen von Stdin in Python
- 25. Kann ich in einer nicht-kanonischen Weise von stdin lesen?
- 26. Setzen Sie eine Zeitüberschreitung für das Lesen von stdin
- 27. Liest von stdin flush stdout?
- 28. read() von stdin ignoriert newline
- 29. bekommen Eingabe von stdin
- 30. Haskell-Lesedatei von Stdin
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