스트림을 사용하여 관련없는 프로세스간에 파일 설명자를 전달하는 코드를 작성했습니다. 서버는 클라이언트가 파일 설명자를 보내기를 기다려야합니다. 다음은 서버 코드 :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