が含まれていますアウト私は私のいくつかのコードのコンパイル時に:ここで暗黙の宣言は「MKNOD」が、私は、ヘッダーは、私はGCCを吐きされるラズベリーパイ3.</p> <p>警告上のC++プログラムとの通信に名前付きパイプを使用してCプログラムを作成しようとしています
/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");
FIFOはどこにも使用され、fpはされないが、int
で、ここでは、私はファイルを持っていることを含んでいますパイプへのFILE*
。私が行ったデバッグの中には、mknod
が実行された後にfifo
の値が-1
であることが示されています。これは、コンパイラが関数の実装を見つけることができないように思われるためです。
GCCがmknod
の実装を見つける場所を知るようにするにはどうすればよいですか?
名前付きパイプを作成するより移植性の高い方法は、POSIXの 'mkfifo'関数です。 –