Saya porting kode C / pro * c dari UNIX ke Linux. Kode tersebut adalah:
#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;
}
Dalam UNIX nilai socket_id > 0
di Linux itu -1
. Alasannya ada di UNIX, ada a /dev/tcp
. Ini tidak ada di Linux. Juga di UNIX tcp
file ini adalah file karakter khusus yang berbeda dari file normal.
Apakah ada cara untuk membuat file khusus karakter yang sama di Linux seperti di UNIX atau bagaimana melanjutkan ini lebih lanjut?
Jawaban:
t_open()
dan yang terkait/dev/tcp
dan merupakan bagian dari antarmuka TLI / XTI , yang kehilangan pertempuran untuk TCP / IP API ke soket BSD.Di Linux, ada beberapa
/dev/tcp
macam. Ini bukan file asli atau perangkat kernel. Ini adalah sesuatu yang khusus disediakan oleh Bash , dan hanya ada untuk pengalihan. Ini berarti bahwa bahkan jika seseorang ingin membuat fasilitas di-kernel/dev/tcp
, itu akan disembunyikan dalam penggunaan interaktif 99% [*] dari waktu oleh shell.Solusi terbaik sebenarnya adalah beralih ke soket BSD. Maaf.
Anda mungkin bisa membuat lapisan emulasi strxnet XTI berfungsi, tetapi Anda lebih baik meluangkan waktu untuk melepaskan XTI. Itu adalah API mati, tidak didukung tidak hanya di Linux, tetapi juga pada BSD, termasuk OS X.
(Omong-omong, perpustakaan strxnet bahkan tidak akan membangun pada BSD, karena itu tergantung pada LiS , komponen dari kernel Linux. Bahkan tidak
configure
pada sistem BSD atau OS X saham, tampaknya karena itu juga tergantung pada GNU sed.)[*] Saya mendasarkan dugaan liar ini pada fakta bahwa Bash adalah shell default untuk pengguna non-root di semua distro Linux yang saya gunakan. Karena itu Anda harus keluar dari cara Anda di Linux, sebagai aturan, untuk mendapatkan sesuatu selain Bash.
sumber
-I
dan-L
menandai dan berharap itu bekerja. Tetapi jika tidak, saya tidak akan membuang banyak waktu untuk itu.libstrxnet.so.*
direktori itulah yang Anda gunakan-L
. Temukanxti.h
: meneruskan direktori itu ke-I
. Anda juga akan membutuhkan-lstrxnet
minimal. Intinya: lihat strxnet docs.