2013-02-24 3 views
0

Je suis relativement nouveau en programmation. Ce que j'essaye d'accomplir est d'écrire dans un fichier FIFO je pense que c'est appelé. Fondamentalement, si je suis à une fenêtre de terminal, je peux exécuter la commande echo "0=0" > /dev/pi-blaster il fonctionnera comme prévu. Donc, ce que je veux faire est d'écrire un programme qui exécutera essentiellement cette commande pour moi mais changer les chiffres entre les guillemets. Je sais comment changer les nombres avec une boucle que j'ai juste du mal à l'écrire réellement le dossier. Aucune erreur n'est générée pendant la compilation ou l'exécution ne fonctionne pas comme si je devais taper la commande ci-dessus. Comme je l'ai dit je suis nouveau à la programmation alors peut-être que je ne suis même pas sur le bon chemin. J'ai inclus mon code ci-dessous:Écriture dans un fichier FIFO avec c

#include <stdio.h> 
#include <stdlib.h> 

    int main(void) 
    { 
     FILE *fp; 
     int i; 

     fp = fopen("/dev/pi-blaster", "w"); 
     if (fp == NULL) { 
     printf("I couldn't open pi-blaster for writing.\n"); 
     exit(0); 
     } 

     for (i=0; i<=10; ++i) 
     fprintf(fp, "echo %d=%d", i, i*i); 

     return 0; 
    } 
+0

Est-il possible que ce soit une écriture tamponnée, et vous ne le voyez pas parce qu'il n'a pas encore été vidé? Essayez fflush (fp) après le fprintf pour forcer un flush. –

+0

Je n'ai absolument aucune idée de ce que cela signifie – Yamaha32088

+0

k je vais essayer que – Yamaha32088

Répondre

1

Ce que vous faites est d'écrire la coquille echo réelle commande au fichier, et non par exemple 0=0.

Vous devriez faire

fprintf(fp, "%d=%d\n", i, i * i); 

PS. Vous n'avez pas besoin de vous soucier de vider les tampons de fichiers, cela sera fait automatiquement lorsque le fichier est fermé, et le fichier sera fermé lorsque le processus se terminera (mais il est préférable de fermer explicitement les fichiers que vous ouvrez, même si pas techniquement nécessaire).

+0

savez-vous s'il y a un délai dans 'C' je voudrais attendre une seconde ou deux avant de continuer dans le script à des intervalles différents. – Yamaha32088

+0

@ Yamaha32088 Il n'y a pas de fonctionnalité "sleep" native dans les anciennes versions de C. C11 (toujours considéré comme très nouveau, donc tous les compilateurs ne le supportent pas) a ['thrd_sleep'] (http://fr.cppreference.com/w/c/thread/thrd_sleep). Sous Windows, vous avez ['Sleep'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx), et sur les plateformes POSIX (par exemple Linux et OSX) vous avez ['nanosleep'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html). –