Программка вешает RaspberryPi
Проблемка такая - написал маленькую программку на си, но через 2-3 дня использования она вешает систему малинки.
Грешу на утечку памяти, но сам не могу найти проблему.
Простите за говнокод, только учусь:
Код:
//*******************************************************//
// name: sound-from-file.c
// dev: Максим Шорин
// date:7 января 2015
// description: Читает файл, берет от туда путь к файлу и воиспроизводит его (
// (файл должен быть не диннее 10 сек)
// gcc -o sound-from-file sound-from-file.c -lutil -lrt -lwiringPi
//********************************************************//
#include <stdlib.h>
#include <pty.h>
#include <unistd.h>
#include <stdio.h>
#include <wiringPi.h>
// переменная для строки
char line[200];
// что будем писать в файл
char *text = "stop";
// колличество символов в файле
int n = 0;
// указатель на файл
FILE *file;
// файловый дескриптор
int fd;
void play(char *audio){
// запускаем паралельный процесс в псевдотерминале
pid_t p = forkpty(&fd, 0, 0, 0);
if (p == 0){
// запускаем процесс и смотрим есть ли ошибка
if (execlp("omxplayer", "omxplayer", audio) < 0){
perror("error number 1");
exit(1);
}
}
}
void stop(pid_t p){
// послылаем в псевдотерминал q
write(fd, "q", 1);
// ожидаем завершение процесса
waitpid(p, 0, 0);
// закрываем файловый дескриптор
close(fd);
}
void main(){
while(n < 200){
// открытие файла на чтение
file = fopen("/www/server/sound.php","r");
// чтение 200 символов из файла в переменную
fgets(line,200,file);
// возврат на начало файла
rewind(file);
// считаем сколько символов в файле
while (!feof(file)){
getc(file);
n++;
}
// возврат на начало файла
rewind(file);
// закрываем файл
fclose(file);
// поправка на кодировку плюс небольшой запас
if (n > 10){
// удаляем старый файл, создаем пустой новый
file = fopen("/www/server/sound.php","w");
// пишем туда строку
fprintf(file,"%s",text);
// закрываем
fclose(file);
// воиспроизводим что в файле
play(line);
delay(10000);
pid_t p;
// закрываем
stop(p);
}else{
// пауза 1 секунда
delay(1000);
}
n = 0;
}
}
// name: sound-from-file.c
// dev: Максим Шорин
// date:7 января 2015
// description: Читает файл, берет от туда путь к файлу и воиспроизводит его (
// (файл должен быть не диннее 10 сек)
// gcc -o sound-from-file sound-from-file.c -lutil -lrt -lwiringPi
//********************************************************//
#include <stdlib.h>
#include <pty.h>
#include <unistd.h>
#include <stdio.h>
#include <wiringPi.h>
// переменная для строки
char line[200];
// что будем писать в файл
char *text = "stop";
// колличество символов в файле
int n = 0;
// указатель на файл
FILE *file;
// файловый дескриптор
int fd;
void play(char *audio){
// запускаем паралельный процесс в псевдотерминале
pid_t p = forkpty(&fd, 0, 0, 0);
if (p == 0){
// запускаем процесс и смотрим есть ли ошибка
if (execlp("omxplayer", "omxplayer", audio) < 0){
perror("error number 1");
exit(1);
}
}
}
void stop(pid_t p){
// послылаем в псевдотерминал q
write(fd, "q", 1);
// ожидаем завершение процесса
waitpid(p, 0, 0);
// закрываем файловый дескриптор
close(fd);
}
void main(){
while(n < 200){
// открытие файла на чтение
file = fopen("/www/server/sound.php","r");
// чтение 200 символов из файла в переменную
fgets(line,200,file);
// возврат на начало файла
rewind(file);
// считаем сколько символов в файле
while (!feof(file)){
getc(file);
n++;
}
// возврат на начало файла
rewind(file);
// закрываем файл
fclose(file);
// поправка на кодировку плюс небольшой запас
if (n > 10){
// удаляем старый файл, создаем пустой новый
file = fopen("/www/server/sound.php","w");
// пишем туда строку
fprintf(file,"%s",text);
// закрываем
fclose(file);
// воиспроизводим что в файле
play(line);
delay(10000);
pid_t p;
// закрываем
stop(p);
}else{
// пауза 1 секунда
delay(1000);
}
n = 0;
}
}
Код:
pid_t p
Код:
fgets(line,200,file);
Код:
while (!feof(file)){
getc(file);
n++;
}
getc(file);
n++;
}
такие вот советы.
Kuzya, спасибо за советы, буду пробовать.
Код:
// возврат на начало файла
rewind(file);
// закрываем файл
fclose(file);
rewind(file);
// закрываем файл
fclose(file);
Kuzya, спасибо, советы помогли !