enthalten Ich versuche, ein C-Programm zu machen, die Named Pipes verwendet, um mit einem C++ Programm auf einem Raspberry Pi 3.Implizite Deklaration der Funktion ‚mknod‘ aber ich habe die Header
die Warnung zu kommunizieren, die GCC Spucken ist aus, wenn ich einige Code von mir kompilieren:
/home/pi/BluetoothTest/btooth.c|76|warning: implicit declaration of function ‘mknod’ [-Wimplicit-function-declaration]|
Hier ist der Code aus für die Funktion, einschließlich der #if darüber:
#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));
und hier sind die beinhaltet, dass ich in der Datei haben:
#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>
Das Programm versucht, das Rohr hier zu erstellen:
umask(0);
fifo = mknod(PIPE_LOC, S_IFIFO|0666, 0);
fp = fopen(PIPE_LOC, "w");
Fifo ist ein int
, die nirgendwo sonst verwendet wird und fp a FILE*
an die Leitung. Ein Debugging, das ich gemacht habe, zeigt, dass fifo
einen Wert von -1
hat, nachdem mknod
ausgeführt wird, wahrscheinlich weil der Compiler nicht in der Lage scheint, die Implementierung der Funktion zu finden.
Wie kann ich sicherstellen, dass GCC weiß, wo die Implementierung von mknod
zu finden ist?
Eine portablere Möglichkeit, eine Named Pipe zu erstellen, ist die Funktion 'mkfifo', bei der es sich um POSIX handelt. –