2013-02-24 4 views
0

Я относительно новичок в программировании. То, что я пытаюсь выполнить, - это записать в файл FIFO, который, как мне кажется, называется. В принципе, если я нахожусь в терминальном окне, я могу выполнить команду echo "0=0" > /dev/pi-blaster, она будет работать по назначению. Поэтому я хочу написать программу, которая в основном выполнит эту команду для меня, но изменит числа между двойными кавычками. Я знаю, как изменить числа с помощью цикла. У меня просто возникают проблемы с его записью. Во время компиляции не возникает ошибок, и они просто не работают, как если бы я набирал команду выше. Как я уже сказал, я новичок в программировании, поэтому, возможно, я даже не на правильном пути. Я включил мой код ниже:Запись в файл FIFO с помощью 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

Возможно ли, что это буферизованная запись, и вы не видите, что это происходит, потому что она еще не очищена? Попробуйте fflush (fp) после fprintf, чтобы заставить флеш. –

+0

Я понятия не имею, что это значит – Yamaha32088

+0

k я попробую – Yamaha32088

ответ

1

Что вы делаете писать фактической echo Shell команду к файлу, а не, например, 0=0.

Вы должны делать только

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

PS. Вам не нужно беспокоиться о стирании файловых буферов, это будет сделано автоматически, когда файл будет закрыт, и файл будет закрыт при завершении процесса (но считается, что он явно закрывает файлы, которые вы открываете, даже если это не требуется технически).

+0

Знаете ли вы, что есть временная задержка в 'C', я хотел бы подождать секунду или два, прежде чем продолжить в скрипте с разными интервалами. – Yamaha32088

+0

@ Yamaha32088 В старых версиях C нет встроенной функции «сна». C11 (по-прежнему считается очень новым, поэтому не все компиляторы поддерживают его) имеет ['thrd_sleep'] (http://en.cppreference.com/w/c/thread/thrd_sleep). В Windows у вас есть ['Sleep'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx) и на платформах POSIX (например, Linux и OSX) у вас есть ['nanosleep'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html). –