Lecture à partir de stdin.
Quels sont les moyens possibles pour la lecture de la saisie de l'utilisateur à l'aide de read()
appel système Unix. Comment peut-on lire depuis l'entrée standard stdin octet par octet à l'aide de read()
?
- vous devriez lire dans
read()
manuel - La lecture de ce faire, mais selon exactement ce que vous voulez faire, vous pouvez trouver que vous avez à faire plus que de simplement appeler lisez - vous pouvez poster votre code, et expliquer exactement quelle partie vous avez des problèmes avec?
- Je suis d'accord avec Tapis, ce qui excatly cherchez-vous ici? Où est le problème? Il y a aussi beaucoup de différents examples comment faire sur ce, DONC, ne vous le faites une recherche avant de poser la question?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire quelque chose comme cela de lire les 10 octets:
rappelez-vous lire() ne pas ajouter de
'\0'
de mettre fin à rendre chaîne (donne juste cru tampon).De lire 1 octet à la fois:
et n'oubliez pas de
#include <unistd.h>
,STDIN_FILENO
défini comme macro dans ce fichier.Il y a trois norme POSIX descripteurs de fichiers, correspondant aux trois flux standard, qui sans doute chaque processus doit s'attendre à avoir:
Ainsi, au lieu
STDIN_FILENO
vous pouvez utiliser 0.Edit:
Dans Linux, vous pouvez trouver ce à l'aide de la commande suivante:
Notez le commentaire
/* Standard input. */
De la homme lire:
Paramètres d'entrée:
int fd
descripteur de fichier est un entier et non un pointeur de fichier. Le descripteur de fichier pourstdin
est0
void *buf
pointeur vers un tampon pour stocker les caractères lus par leread
fonctionsize_t count
nombre maximum de caractères à lireDe sorte que vous pouvez lire caractère par caractère avec le code suivant:
stdin
est un FICHIER!int fileno(FILE *stream)
premièrestdin
va être 0, de sorte que vous pouvez simplementread(0,...
N'avez pas besoin de chercher autour pourstdin
's numéro de dossier sur les systèmes *NIXstdin = 0
,stdout = 1
,stderr = 2
et bonne est la même pour tous les OS.char c
;read(0, &c, 1)
, (2) lire() la fonction n'est pas arrêter de mémoire tampon d'entrée avec\0
avecfgets()
faire. Donc, dans le cas où si quelqu'un veut utiliser un tampon de chaîne, il a explicitement ajouter null comme:no_byte = read(0, buffer, sizeof(buffer)-1); buffer[no_bytes] = '\0';
C'est le point où de nouveaux mecs font des erreurs. comme dans cette question lire la deuxième erreur...aller de l'avant c'est ce que je voulais ajouter.