У меня странная проблема, для которой, я думаю, у меня есть обходной путь, но я пытаюсь выполнить анализ первопричин.
Я разрабатывал приложение, которое работает на встроенномверсия Ubuntu 10.04 LTS.Когда приложение запускается, оно считывает файл конфигурации с SD-карты, инициализирует несколько классов, запускает регистратор, который записывает на SD-карту, а затем продолжает свою работу.Во время разработки он работал нормально, когда я запускал его вручную через терминал SSH.
Недавно я экспериментировал с автоматическим запуском приложения при запуске ОС.У меня есть скрипт в init.d, который делает именно это.Тем не менее, я заметил, что сейчас не создаются файлы журналов.Я понял, что проблема не в том, что SD-карта недоступна, потому что файл конфигурации читается правильно при запуске, но выдается ошибка, когда я пытаюсь открыть файл журнала для записи с использованием fopen.
// Open the file
mLogFile = fopen(filename, "wb");
if(mLogFile == NULL)
{
printf("Error opening Log File [%d].\n", lnRetval);
return -1; //File couldn't be opened
}
Я предполагал, что это просто проблема с разрешениями, но я не могу понять, почему она не работает, когда я автоматически запускаю программное обеспечение, а не запускаю его вручную в терминале.Кроме того, я не могу понять, почему файл конфигурации читается правильно, но этот файл не может быть открыт.
Единственное отличие, которое я мог видеть, было то, что чтение файла конфигурации было сделано с использованием fstreams, в то время как регистраториспользует C файл ввода / вывода.Поэтому я экспериментировал, поместив следующий код непосредственно перед вызовом fopen выше (/ home / root / etc - это место, где смонтирована SD-карта).
std::ofstream out("/home/root/etc/log/testlog.log");
out << "I can write using fstreams.\n";
out.close();
Это сработало и сгенерировало файл при запуске через init.д.Теперь я полностью в тупике.Почему ofstream работает, а не fopen?Что-то принципиально мне не хватает?
Заранее спасибо.