/dev/tcp는 Linux에 존재하지 않습니다.

/dev/tcp는 Linux에 존재하지 않습니다.

저는 C/pro*c 코드를 UNIX에서 Linux로 이식하고 있습니다. 코드는 다음과 같습니다

#define __NFDBIT       (8 * sizeof(unsigned long))
#define __FD_SETSIZ    1024
#define __FDSET_LONG   (__FD_SETSIZ/__NFDBIT)
typedef struct {
    unsigned long fds_bits [__FDSET_LONG];
} __ernel_fd_set;

typedef __ernel_fd_set           fd_set_1;
int main()
{
    fd_set_1 listen_set;
    int listen_sd;
    int socket_id;
    FD_ZERO(&listen_set);
    socket_id = t_open("/dev/tcp", O_RDWR|O_NONBLOCK, (struct t_info *) 0);
    if ( socket_id <0 )
    {
        exit(FAILURE);
    }
    return 0;
}

> 0UNIX에서 Linux의 소켓_id 값은 입니다 -1. 그 이유는 UNIX에는 Linux에는 /dev/tcp. 또한 UNIX에서는 이 tcp파일이 일반 파일과 다른 문자 특수 파일이다.

UNIX에서와 마찬가지로 Linux에서도 동일한 문자 특수 파일을 생성할 수 있는 방법이 있습니까? 아니면 추가로 진행하는 방법이 있습니까?

답변1

t_open()그리고 그와 관련된 /dev/tcp내용은TLI/XTI 인터페이스, TCP/IP API와 BSD 소켓 간의 전투에서 패했습니다.

Linux에는 /dev/tcp모든 종류가 있습니다. 실제 파일이나 커널 장치가 아닙니다. 이건 물건이야배쉬 특별 제안이며 리디렉션에만 사용됩니다. 이는 커널 내부 /dev/tcp기능이 생성되더라도 쉘의 대화형 사용이 99%[*] 차단된다는 의미입니다.

가장 좋은 해결책은 실제로 BSD 소켓으로 전환하는 것입니다. 죄송합니다.

당신은 얻을 수 있습니다스타넷XTI 에뮬레이션 레이어는 작동하지만 시간을 들여 XTI를 제거하는 것이 더 좋습니다. 이것은 죽은 API이며 Linux뿐만 아니라 BSD(OS X 포함)에서도 지원되지 않습니다.

(그런데 strxnet 라이브러리는 BSD에 의존하기 때문에 BSD를 기반으로 구축되지도 않았습니다.리튬황, Linux 커널의 구성 요소입니다. configureGNU sed에 의존하기 때문에 일반 BSD나 OS X 시스템에서도 실행 되지 않습니다 . )

[*] 내 추측은 Bash가 내가 사용한 모든 Linux 배포판에서 루트가 아닌 사용자를 위한 기본 셸이라는 사실에 기반을 두고 있습니다. 따라서 일반적으로 Linux에서는 Bash 이외의 다른 것을 얻으려면 노력해야 합니다.

관련 정보