2017-10-11 7 views
0

J'essaie d'écrire sur stdout en utilisant uniquement les appels système Linux décrits dans la section 2 du manuel (http://man7.org/linux/man-pages/dir_section_2.html).Utilisation des spécificateurs de format sur l'appel système Linux write()

ssize_t write(int fd, const void *buf, size_t count); 

est la fonction que j'essaie d'utiliser, mais j'essaie d'incorporer des spécificateurs de format dans le tampon. Idéalement, cela fonctionnerait comme suit:

char *adjective = argv[1]; 
write(1, "This is a %s example\n", adjective, 19 + strlen(adjective)); 

Mais je ne peux évidemment pas le faire. Comment pourrais-je faire quelque chose de similaire?

Aussi, je sais que strlen() ne fait pas partie de la section 2 des appels système Linux. Je l'inclut pour la simplicité puisque compter la longueur du tampon ne fait pas partie de ma question.

Répondre

0

Utilisez sprintf() pour formater dans un tampon, que vous écrivez ensuite:

char buffer[BUFSIZE]; 
int size = snprintf(buffer, BUFSIZE, "This is a %s example\n", adjective); 
write(STDOUT_FILENO, buffer, strlen(buffer)); 

Si vous ne pouvez pas utiliser sprintf(), il suffit d'écrire chaque chaîne séparément.

write(STDOUT_FILENO, "This is a ", sizeof "This is a "); 
write(STDOUT_FILENO, adjective, strlen(adjective)); 
write(STDOUT_FILENO, " example", sizeof " example"); 
+0

Malheureusement pour cette tâche, je ne peux pas utiliser snprintf() car il ne figure pas dans la section 2 du manuel de Linux. – adhdj

+0

Ensuite, vous ne pouvez pas utiliser les spécificateurs de format, ils font partie de la famille de fonctions 'printf()'. – Barmar

+0

Gotcha! Je commençais à soupçonner que je ne pouvais pas le faire. Je vous remercie! – adhdj