puts(3)
Fonction de la bibliothèque C
Écrit une chaîne sur la sortie standard, puis un retour à la ligne. Aucun format interprété : plus simple que printf pour afficher un texte fixe.
#include <stdio.h>
int puts(const char *s);Description
puts écrit la chaîne s sur stdout, sans son '\0', puis ajoute un \n. Elle n'interprète rien : un % dans le texte s'affiche tel quel, là où printf(3) y verrait une conversion. Comme printf, elle passe par le tampon de stdout, et le \n qu'elle ajoute suffit à le vider quand la sortie est un terminal.
GCC connaît cette équivalence : même sans optimisation, il compile printf("bonjour\n") en un appel à puts("bonjour"). C'est pour ça qu'un crash dans un printf apparaît parfois sous le nom puts dans gdb.
Valeur de retour
Un nombre positif ou nul en cas de succès, EOF en cas d'erreur. Seul le signe est garanti : ne t'en sers pas comme d'une longueur.
Pièges
Le
\nest ajouté même si ta chaîne en contient déjà un :puts("ligne 1\n")laisse une ligne vide. Pour écrire une chaîne sans rien ajouter, utilisefputs(s, stdout).puts(NULL)est un comportement indéfini. Avec glibc, le programme plante dansstrlen, appelé parputspour mesurer la chaîne.Mélanger
putset des appels directs à write(2) sur la même sortie est déconseillé par la page de manuel elle-même : les deux ne partagent pas le tampon, et l'ordre d'affichage n'est plus garanti.
Exemple
#include <stdio.h>
int main(void){ puts("ligne 1\n"); fputs("ligne 2\n", stdout); puts("100 % terminé"); return 0;}$ gcc -Wall -Wextra -g fputs.c -o fputs$ ./fputsligne 1
ligne 2100 % terminéLa ligne vide vient du double \n du premier appel. fputs n'ajoute rien, et le % de la dernière ligne passe sans problème.
puts
Écris gm_puts avec write seulement : la chaîne, puis exactement un retour à la ligne, même quand la chaîne est vide.