2013-02-24 143 views
0

我對編程比較陌生。我試圖完成的是寫入我認爲其所謂的FIFO文件。基本上,如果我在終端窗口,我可以執行命令echo "0=0" > /dev/pi-blaster它將按預期工作。所以我想要做的是編寫一個程序,該程序基本上對我執行該命令,但更改雙引號之間的數字。我知道如何改變一個循環的數字,我只是無法得到它真正寫入文件。在編譯或運行過程中不會產生錯誤,它只是不起作用,就像我在上面輸入命令一樣。就像我說的我是編程新手,所以也許我甚至沒有走上正確的道路。我已經包含下面我的代碼:用c寫入FIFO文件

#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

它可能是一個緩衝寫入,你沒有看到它發生,因爲它沒有被刷新呢?在fprintf之後嘗試fflush(fp)強制刷新。 – 2013-02-24 06:37:23

+0

我完全不知道這意味着什麼 – Yamaha32088 2013-02-24 06:38:06

+0

k我會嘗試 – Yamaha32088 2013-02-24 06:38:27

回答

1

你在做什麼是寫作的實際echo外殼命令的文件,而不是如0=0

您應該只做

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

PS。您不需要擔心刷新文件緩衝區,文件關閉時會自動完成,並且當進程退出時文件將被關閉(但是,顯式關閉您打開的文件即使它是技術上不需要)。

+0

您是否知道'C'中是否有時間延遲?我想等待一兩秒鐘,然後以不同的時間間隔繼續執行腳本。 – Yamaha32088 2013-02-24 06:53:26

+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)。 – 2013-02-24 06:56:21