Posté par benja .
En réponse au message Shell script-->langage C.
Évalué à 1.
Dernière modification le 23 novembre 2015 à 14:45.
C'est bon début !
/* charge les déclarations de fopen,fclose,fprintf */
#include <stdio.h>
Tu rajouteras ici aussi les autres entêtes pour stat() et cie, cf. suite.
Aussi stdlib.h pour utiliser exit() dans la gestion des erreurs...
int main()
{
int p; char tab[max_N];
max_N ?
1) c'est une définition non standard
2) admettons que cela équivaut à INT_MAX ou autre provenant de /usr/include/limits.h,
tu risque au pire d'allouer beaucoup de mémoire sur la pile pour rien, au mieux d'exploser la pile directement...
Tu pourrais utiliser PATH_MAX, mais bon essayons de calculer au plus juste :
Déplace cela hors de la boucle, pas besoin de recalculer le chemin à chaque itération
-> snprintf(tab,sizeof(tab), GPIO_DIRECTORY_FORMAT "/value", gpio);
p = open(tab, O_WRONLY);
write(p, "1", 1);
write(p, "0", 1);
close(p);
ok
return 0;
}
Pour apprendre, rien de mieux que de consulter les manpages de toutes les fonctions/headers mentionnés précedemment.
genre sur manpages.debian.net ou sur ton système (man 2 xx ou man 3 xx).
[^] # Re: Qu'est-ce qui te bloque?
Posté par benja . En réponse au message Shell script-->langage C. Évalué à 1. Dernière modification le 23 novembre 2015 à 14:45.
C'est bon début !
Tu rajouteras ici aussi les autres entêtes pour stat() et cie, cf. suite.
Aussi stdlib.h pour utiliser exit() dans la gestion des erreurs...
max_N ?
1) c'est une définition non standard
2) admettons que cela équivaut à INT_MAX ou autre provenant de /usr/include/limits.h,
tu risque au pire d'allouer beaucoup de mémoire sur la pile pour rien, au mieux d'exploser la pile directement...
Tu pourrais utiliser PATH_MAX, mais bon essayons de calculer au plus juste :
On peut remplacer write par fprintf, pas besoin de créer une chaîne temporaire du coup. Cela devient:
Toujours éviter les fonctions de formatage et d'io qui ne sont non-bornées pour éviter un dépassement de tampon.
-> snprintf(tab,sizeof(tab), GPIO_DIRECTORY_FORMAT "direction", gpio);
le 1 n'est pas bon...
Idem j'utiliserais plustôt le IO haut niveau, open -> fopen, write -> fputs/fprintf.
devient:
Idem, couple fopen, fprintf/fputs, fclose...
Utilise systématiquement des accolades quand tu imbriques les instructions de contrôles, cela est plus lisible et moins sujet à se tromper.
Déplace cela hors de la boucle, pas besoin de recalculer le chemin à chaque itération
-> snprintf(tab,sizeof(tab), GPIO_DIRECTORY_FORMAT "/value", gpio);
ok
Pour apprendre, rien de mieux que de consulter les manpages de toutes les fonctions/headers mentionnés précedemment.
genre sur manpages.debian.net ou sur ton système (man 2 xx ou man 3 xx).