我正在制作一个程序,它将启动和停止伺服。我可以从命令行发出以下命令,它可以工作。 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
所以对我来说似乎文件没有完成写入我的节目。有人可以指出我是否遗漏了什么?
答案 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;
}