如何用C写入文件

时间:2013-04-09 01:35:58

标签: c

我正在制作一个程序,它将启动和停止伺服。我可以从命令行发出以下命令,它可以工作。 echo 2=120 > /dev/servoblaster将启动伺服运动。现在我有以下程序

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

int main(void)
{
    FILE *fp;


   fp = fopen("/dev/servoblaster", "w");
   if (fp == NULL) {
       printf("Error opening file\n");
       exit(0); 
 }
   fprintf(fp, "2=120");
   fclose(fp);
   fflush(fp); 
   return 0;
}

但是当我执行它时没有任何反应,现在当我尝试echo 2=120 > /dev/servoblaster命令它会说Bad input: 2=1202=120但是如果我重复相同的echo 2=120 > /dev/servoblaster命令它会再次起作用。如果我尝试执行我的上面的程序3次输出当我尝试执行echo命令时它的输出将是Bad input 2=1202=1202=120 2=120所以对我来说似乎文件没有完成写入我的节目。有人可以指出我是否遗漏了什么?

4 个答案:

答案 0 :(得分:3)

您需要在命令后添加换行符,例如echo

fprintf(fp, "2=120\n");

据推测,伺服驱动程序在执行命令之前一直等到看到换行符。

答案 1 :(得分:0)

程序没问题,我运行以下代码

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

int main(void)
{
    FILE *fp;
    fp = fopen("/home/syler/servoblaster", "w");
    if (fp == NULL) {
        printf("Error opening file\n");
        exit(0); 
    }   
    fprintf(fp, "2=120");
    fclose(fp);
    fflush(fp); 
    return 0;
}

结果是

cat /home/syler/servoblaster
2=120 

所以,必须存在“servoblaster”内核驱动程序模块问题。

答案 2 :(得分:0)

这是一个旧线程,但我遇到了同样的问题所以我发布了我所知道的。从我所看到的,需要“\ n”,但是下次将缓冲区搞砸(即它将“\ n”放入缓冲区,这样下一次写入就会显示为坏数据,即使它很好数据)。我目前的工作是在字符串之前和之后加上“\ n”。这确保它每次都有效,但由于“\ n”,我总是收到“错误数据”消息。仍在寻找正确的方法来做到这一点,但还没有找到来自C的电话来使这段代码正常工作。

答案 3 :(得分:-3)

这对我来说很好:

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

int main(void)
{
    FILE *fp;
    fp = fopen("/home/syler/servoblaster", "w");
    if (fp == NULL) {
        printf("Error opening file\n");
        exit(0); 
}   
fprintf(fp, "2=120");
fprintf(fp, "\n");
fclose(fp);
fflush(fp); 
return 0;
}