Я пытаюсь сделать программу C, которая использует именованные каналы для связи с C++ программы на Raspberry Pi 3.неявного объявления функции «MKNOD», но у меня есть заголовки включены
предупреждения, что НКА разбрызгивания когда я скомпилировать код шахты:
/home/pi/BluetoothTest/btooth.c|76|warning: implicit declaration of function ‘mknod’ [-Wimplicit-function-declaration]|
Вот код из за функции, в том числе #if над ним:
#if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
__THROW __nonnull ((1));
и здесь являются включает в себя, что у меня есть в файле:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
#include <bluetooth/rfcomm.h>
//#include <linux/stat.h>
Программа пытается создать трубу здесь:
umask(0);
fifo = mknod(PIPE_LOC, S_IFIFO|0666, 0);
fp = fopen(PIPE_LOC, "w");
ФИФО является int
, который нигде не используется и является Ф.П. a FILE*
к трубе. Некоторая отладка, которую я сделал, показывает, что fifo
имеет значение -1
после того, как mknod
запускается, вероятно, из-за того, что компилятор не может найти реализацию функции.
Как это сделать, чтобы GCC знал, где найти реализацию mknod
?
Более портативный способ создания именованного канала - это функция 'mkfifo', которая представляет собой POSIX. –