2013-04-09 5 views
0

У меня есть программа, над которой я работаю, которая начнет и остановит серво. Я могу выполнить следующую команду из командной строки, и она работает. echo 2=120 > /dev/servoblaster, который запустит серво в движении. Теперь у меня есть следующая программаКак написать файл в C

#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

'fflush (FP)' не может быть сделано после того, как 'fclose (FP)', потому что после закрытия указателя больше не действует. Вы должны поменять два вызова. –

ответ

3

Вам нужно добавить символ новой строки после команды, как echo делает:

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

Предположительно, водитель сервопривода ждет, пока он не видит новой строки перед выполнением команды.

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» проблема модуль драйвера ядра.

+0

Он не использует 'fwrite'. – nneonneo

+0

Спасибо, nneonneo, я изменяю ответ. – syler

0

Это старая тема, но я столкнулся с одной проблемой, поэтому отправляю то, что знаю. Из того, что я вижу, необходим «\ n», однако это затягивает буфер в следующий раз (т. Е. Помещает «\ n» в буфер, поэтому ваша следующая запись представляется плохими данными, даже если она хороша данные). Моя текущая работа - поставить «\ n» до и после строки. Это гарантирует, что он работает каждый раз, но я всегда получаю сообщение «Плохие данные» из-за «\ n». Все еще ищет правильный способ сделать это, но еще не нашел вызов от C, чтобы этот код работал.

-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; 
} 
+0

Почему вы отвечаете на 2-летний вопрос, не добавляя ничего нового? –

+0

Нет, я добавил эту строку «fprintf (fp,« \ n »); для решения этой проблемы «\ n». – wanjijul

+0

Хорошо ... Я имею в виду, что вы не добавили ничего нового уважения к другим ответам и уважали принятый. –