2013-02-24 120 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