Тип "ФАЙЛ" неизвестен в Contiki.

Я пытаюсь протестировать запись в файл в Contiki. вот код, который я использовал:

#include "contiki.h"
#include <stdio.h>
#define LEN 256
 PROCESS(test_process, "Coffee test process");
 AUTOSTART_PROCESSES(&test_process);
 PROCESS_THREAD(test_process, ev, data)
 /**/
 {
  PROCESS_BEGIN();
FILE * fp;
   int i;
   /* open the file for writing*/
   fp = fopen ("/home/user/contiki/examples/mySim/1.txt","w");

   /* write 10 lines of text into the file stream*/
   for(i = 0; i < 10;i++){
       fprintf (fp, "This is line %d\n",i + 1);
   }

   /* close the file*/  
   fclose (fp);
  PROCESS_END();
 }

Я получаю это сообщение об ошибке после компиляции в симуляторе Cooja:

test.c: В функции 'process_thread_test_process': test.c: 12: 1: ошибка: неизвестное имя типа 'FILE' test.c: 15: 4: предупреждение: неявное объявление функции 'fopen' [-Wimplicit-function-декларация ] test.c: 15: 7: предупреждение: назначение делает указатель из целого числа без преобразования [включено по умолчанию] test.c: 19: 8: предупреждение: неявное объявление функции 'fprintf' [-Wimplicit-function-декларация] test .c: 19: 8: предупреждение: несовместимое неявное объявление встроенной функции 'fprintf' [включено по умолчанию] test.c: 23: 4: предупреждение: неявное объявление функции 'fclose' [-Wimplicit-function-декларация] make: *** [test.co] Ошибка 1 Процесс вернул код ошибки 2

кто-нибудь имеет представление о проблеме?


person mahshid    schedule 29.12.2018    source источник
comment
Понятия не имею ... но, просто для удовольствия, поменяйте местами включения: сначала те, что с <>, а затем те, что с "".   -  person pmg    schedule 29.12.2018
comment
Он объявлен в stdio.h, но у вас может быть урезанная реализация для встроенных систем. Вы можете просто открыть имеющийся у вас файл stdio и посмотреть, объявлен ли он условно или не объявлен вообще. Возможно, вам потребуется настроить систему для включения файловой системы. Похоже, вы пытаетесь получить доступ к файлу на хосте разработки, а не к цели в любом случае - это не сработает!   -  person Clifford    schedule 29.12.2018
comment
Вы не указали, какой компилятор вы используете, но, например, в gcc вы можете использовать -E для генерации предварительно обработанного кода и поиска FILE. Возможно, вам потребуется добавить несколько операторов #define или, возможно, он вообще не определен в вашем <stdio.h>.   -  person Arkadiusz Drabczyk    schedule 29.12.2018
comment
спасибо всем за ответы. Я изменил строку ‹›, и это не сработало. Думаю, вы были правы насчет сокращения stdio.h в contiki. Я искал в папке src папки e_stdio в Contiki, есть некоторые файлы, такие как fvwrite.h, local.h и другие, которые используют FILE, но я не смог найти источник, в котором был определен FILE. и да, я использую компилятор gcc. Я попробовал gcc -E, но не понял, что это значит, я новичок в C.   -  person mahshid    schedule 30.12.2018


Ответы (1)


Contiki не предоставляет / не поддерживает API файлов POSIX, так же как и многих других вещей (API сокетов POSIX, API создания и управления процессами POSIX). Вместо этого он предоставляет собственный API файловой системы (API «protosockets», API «protothreads» и т. Д.).

Существует две реализации файловой системы: CFS (файловая система Contiki) и Coffee. . Вы можете использовать функции, описанные на странице Wiki; они являются аналогами низкоуровневого файлового API POSIX (например, cfs_open похож на POSIX open, cfs_close на POSIX close и так далее). Аналогов для функций буферизованного ввода-вывода (fopen, fclose) не существует, а структура FILE не существует.

person kfx    schedule 30.12.2018