/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ディストリビューションでroot以外のユーザーのためのデフォルトシェルであるという事実に基づいています。したがって、一般的にLinuxでは、Bash以外のものを手に入れようとする必要があります。

関連情報