[C] : écriture dans un fichier linux

: écriture dans un fichier linux [C] - C - Programmation

Marsh Posté le 27-08-2004 à 13:37:41    

question de newbie total, mais qui n'occupera que 15 sec d'un grand gourou ;)
 
Suite à ce thread, j'ai besoin d'écrire un programme en C pour Linux. La seule chose qu'il doit faire c'est d'aller écrire "4" dans /proc/acpi/sleep
 
Pb : j'ai peur de me gourrer dans les argument de fopen(), fwrite(), fclose(),...
Là j'ai tout bien préparé:


#include <stdio.h>
 
int main (void)
 
{
    return 0;
}


Maintenant qu'est ce que je mets entre les {} ? :)


Message édité par Figti le 27-08-2004 à 13:38:23
Reply

Marsh Posté le 27-08-2004 à 13:37:41   

Reply

Marsh Posté le 27-08-2004 à 13:47:32    

si tu sais le nom des fonctions, qu'attends-tu pour y aller. on corrigera ensuite...
 
p.s. : la lèche ça fonctionne pas (grand gourou, que je ne suis pas d'ailleurs)

Reply

Marsh Posté le 27-08-2004 à 13:50:24    

Figti a écrit :

question de newbie total, mais qui n'occupera que 15 sec d'un grand gourou ;)
 
Suite à ce thread, j'ai besoin d'écrire un programme en C pour Linux. La seule chose qu'il doit faire c'est d'aller écrire "4" dans /proc/acpi/sleep
 
Pb : j'ai peur de me gourrer dans les argument de fopen(), fwrite(), fclose(),...
Là j'ai tout bien préparé:


#include <stdio.h>
 
int main (void)
 
{
    return 0;
}


Maintenant qu'est ce que je mets entre les {} ? :)


 
Un truc comme ça, je pense :
 

Code :
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.   int value = 4 ;
  5.   FILE *monFichier ;
  6.   monFichier = fopen("/proc/acpi/sleep", "w" ) ;
  7.   fwrite(&value, sizeof(int), 1, monFichier) ;
  8.   fclose(monFichier) ;
  9.   return 0 ;
  10. }

Reply

Marsh Posté le 27-08-2004 à 13:51:27    

JagStang a écrit :

si tu sais le nom des fonctions, qu'attends-tu pour y aller. on corrigera ensuite...
 
p.s. : la lèche ça fonctionne pas (grand gourou, que je ne suis pas d'ailleurs)


 
 
Si ça marche :D
 
Je sais pas si mon truc est correct, mais bon ^^

Reply

Marsh Posté le 27-08-2004 à 13:52:45    

ça marche oui, mais pas de contrôle sur le retour de fopen, ni fwrite

Reply

Marsh Posté le 27-08-2004 à 14:03:36    

Tss, la lèche la lèche... c'est bien la réalité, non? qq secondes pour un gars sait et des heures a tatonner pour moi. Comme tu me prêtes des mauvaises intentions, c'était de l'encouragement, tout au plus! ;)
 
Bref, Merci Yannick. je sais pas si ces histoires de contrôle de retour sont importantes, mais j'imagine que ce que tu m'as indiqué passera.
:jap:


Message édité par Figti le 27-08-2004 à 14:03:59
Reply

Marsh Posté le 27-08-2004 à 14:03:47    

Meeeuhh ça plantera pas ^^
 
Allez, au cas où =)
 
 

Code :
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int value = 4 ;
  5. FILE *monFichier ;
  6. if ((monFichier = fopen("/proc/acpi/sleep", "w" )) != NULL)
  7. {
  8.   if (fwrite(&value, sizeof(int), 1, monFichier) != 1)
  9.   {
  10.     fclose(monFichier) ;
  11.     printf("Erreur d'écriture dans le fichier\n" ) ;
  12.     exit(1) ;
  13.   }
  14. }
  15. else
  16. {
  17.   printf("Erreur d'ouverture du fichier\n" ) ;
  18.   exit(1) ;
  19. }
  20. fclose(monFichier) ;
  21. printf("Ecriture terminée\n" ) ;
  22. return 0 ;
  23. }


Message édité par yannick_frere le 27-08-2004 à 14:04:08
Reply

Marsh Posté le 27-08-2004 à 14:04:29    

si le fichier n'existe pas ou est verrouillé ça va planter. mais bon c'est toi qui voit
 
j'appelle pas ça tatonner, mais *apprendre*

Reply

Marsh Posté le 27-08-2004 à 14:05:41    

yannick_frere a écrit :

Meeeuhh ça plantera pas ^^


 
c'est grâce à ce genre de réflexion que l'informatique a la réputation de planter souvent hein :o

Reply

Marsh Posté le 27-08-2004 à 14:06:13    

C'est toujours mieux avec les contrôles, oui ! =)
 
Bah c'est ce que je me suis dit : ça évitera de te faire chercher partout. Maintenant, c'est sûr qu'il faut pratiquer pour que ça rentre ;)

Reply

Marsh Posté le 27-08-2004 à 14:06:13   

Reply

Marsh Posté le 27-08-2004 à 14:09:33    

Olaaa ^^ Relax JagStang ! C'était du vite fait pour l'aider, c'est tout ! C'était pas un truc commercial ^^

Reply

Marsh Posté le 27-08-2004 à 14:10:42    

chacun sa philosophie. moi je dis il faut commencer dès le début à faire des trucs propres.  
 
faites comme vous voulez

Reply

Marsh Posté le 27-08-2004 à 14:11:32    

JagStang a écrit :

chacun sa philosophie. moi je dis il faut commencer dès le début à faire des trucs propres.  
 
faites comme vous voulez


 
+1


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 27-08-2004 à 14:13:46    

+1 , et dans le calme et la bonne humeur il est même dit qu'on est plus prolifique :P
Merci pour ces infos

Reply

Marsh Posté le 27-08-2004 à 14:14:36    

Figti a écrit :

+1 , et dans le calme et la bonne humeur il est même dit qu'on est plus prolifique :P
Merci pour ces infos


Ca dépend, la morosité évite d'être distrait...[:ddr555]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 27-08-2004 à 18:44:59    

vous ecrivez 4 en binaire dans le fichier, vous etes sur qu'il voulait pas plutot que ce soit ecrit en texte ?

Reply

Marsh Posté le 27-08-2004 à 20:03:04    

Non, on n'est pas sûr :D
 
Il va devoir revenir confirmer ou infirmer ..
Enfin de toute façon, je pense qu'il pourra facilement modifier le programme lui-même ;)

Reply

Marsh Posté le 27-08-2004 à 20:11:29    

moi je suis  pas sur qu'un debutant sache ce que c'est que d'ecrire  en binaire ;)

Reply

Marsh Posté le 27-08-2004 à 20:39:28    

Si tu parles du mode d'ouverture (binaire/caractère), je pense que ça n'existe pas sous Linux (je dis ça au cas où, je ne connais pas ton niveau).
 
Mais si tu veux dire qu'il aurait peut-être fallu écrire char value = '4'; au lieu de int value = 4; alors là je crois qu'il faudra attendre Figti.

Reply

Marsh Posté le 27-08-2004 à 20:42:04    

hum, euh... bonne question, bonne question :)
Bah je mets mon PC en vrac, et je vous tiens au courant :D

Reply

Marsh Posté le 27-08-2004 à 21:02:00    

:wahoo: ca marche !  [:youpi]
C'était effectivement un char qu'il fallait écrire dans mon fichier. Et maintenant j'ai un bel executable que j'ai fait moi-meme :whistle: (presque :sweat:)
Merci à tous!


Message édité par Figti le 27-08-2004 à 21:05:34
Reply

Marsh Posté le 27-08-2004 à 21:21:11    

T'as bien changé le sizeof(int) en sizeof(char) aussi hein ? ^^
Sinon tu n'écris pas qu'un char dans ton fichier =)
 
Sinon bah de rien ^^

Reply

Marsh Posté le 27-08-2004 à 21:36:53    

euh... je me demandais si y'avait effectivement à bouger ca aussi. Les deux passent en fait : peut-etre que le compilateur le corrige de lui-meme (?)

Reply

Marsh Posté le 27-08-2004 à 22:45:11    

A mon avis non ... Le char fait 1 octet normalement, et l'entier en fait 4.
 
Donc si tu remplaces tout les int en char dans le programme mais que tu laisses le sizeof(int), il va en fait envoyer 4 octets vers ton fichier. Le premier de ces octets sera le caractère 4 --> ton fichier le prend et peut-être qu'il est content avec ça (peut-être que tout ce qu'il souhaite, c'est un caractère 4 et qu'il se fiche du reste ?). Mais de toute manière, il reçoit également 3 autres octets qui dont les "valeurs" sont indéterminées. Et il vaut mieux éviter ça --> met plutôt sizeof(char) =)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed