ストリームを使用して関連のないプロセス間でファイル記述子を渡すためのコードを記述しました。 サーバーは、クライアントがファイル記述子を送信するのを待つ必要があります。ここ は、サーバーのコードです:ioctl()がブロックされないのはなぜですか?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stropts.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
int pipefd[2];
pipe(pipefd);
close(pipefd[1]);
recvfd(pipefd[0]);
return 0;
}
void recvfd(int p)
{
struct strrecvfd rfdbuf;
struct stat statbuf;
int i;
i=ioctl(p, I_RECVFD, &rfdbuf);
printf("errno=%d\n",errno);
printf("recvfd=%d\n", rfdbuf.fd);
}
しかし、私はエラー番号9受け取る - 不正なファイルディスクリプタを。
使用しているオペレーティングシステムは? OSを知らなくても、OSコールに関する質問に答えるのは難しいです。 – Dipstick
なぜそれがエラーを返すと思いますか?このコードでは、ioctlの戻り値をチェックすることさえありません。 -1でなければ、errnoは変更されず、以前のシステムコールの値を持つことができます(例えば、ダイナミックローダーやスタートアップルーチンなど)。 – mark4o