"Semuanya adalah file" di Dunia UNIX.
Kalimat di atas terkenal. Ketika saya berlari echo "hello programmer" >> /dev/tty1
, saya bisa menonton string yang diberikan TeleType 1
, ....
Apa dan di mana file per masing-masing socket
? Misalkan teman saya terhubung ke PC saya, dan IP-nya adalah h.h.h.h
, bagaimana saya bisa mengakses file masing-masing? Apa itu mungkin?
Jawaban:
man 7 unix:
Yaitu tidak setiap soket dapat dilihat sebagai file (dalam arti "tidak ada file tanpa nama file").
Tetapi ada file dengan daftar soket (misalnya
/proc/net/tcp
); tidak persis apa artinya "semuanya file".sumber
Soket adalah file. Tetapi tidak semua file memiliki nama. Berikut adalah beberapa contoh file yang tidak memiliki nama:
|
operator shell.File seperti pipa atau soket yang tidak disebutkan namanya dibuat oleh suatu proses dan hanya dapat diakses dalam proses itu atau dalam proses anak yang selanjutnya dibuat. (Ini tidak sepenuhnya benar: sebuah proses yang memiliki pipa atau soket (atau file lain) terbuka dapat mengirimkannya ke proses lain melalui soket Unix; ini dikenal sebagai file deskriptor yang lewat .)
Soket yang memiliki nama (apakah dalam sistem file atau abstrak) dapat dibuka menggunakan nama itu. Soket jaringan dapat dibuka (atau lebih tepatnya terhubung) dari jarak jauh dari mesin apa pun yang memiliki konektivitas yang sesuai.
sumber
/proc/<pid>/fd/*
dan/proc/net/*
mungkin menarik"Segalanya" adalah berlebihan. Ini bukan kebijakan yang ketat, itu hanya praktik umum untuk menggunakan filesystem untuk antarmuka karena akses filesystem identik dengan panggilan sistem (yaitu, filesystem benar-benar antarmuka dengan kernel, dan karenanya memberikan format yang mudah untuk semua jenis hal) . Sistem operasi lain tidak menggunakan ini sebanyak mungkin, sehingga dianggap sebagai fitur yang membedakan.
Seperti Hauke Laging menyebutkan, soket "unix local" memiliki simpul file seperti halnya pipa bernama (lihat
man fifo
). Namun, soket protokol internet (digunakan untuk komunikasi jaringan) tidak. Sebagai gantinya, mereka terkait di userspace dengan nomor port. Perhatikan bahwa soket server pada port tunggal menghubungkan beberapa klien masing-masing dengan soketnya masing-masing (satu file soket lokal unix juga dapat digunakan dengan cara ini dengan server, artinya, mungkin ada beberapa soket yang terkait dengan alamat file yang sama) dan dalam kode mereka sebenarnya diidentifikasi secara individual melalui deskriptor file numerik yang terpisah .Jadi, dalam arti bahwa semua soket yang banyak seperti file, dan memiliki link di
/proc/[pid]/fd/
. Anda bahkan dapat memanggilreadlink()
inode ini dan mendapatkan semacam nama file khusus, yang digunakan dalam alat-alat baris perintah sepertilsof
, saya percaya; Anda juga dapat memperoleh informasi tentang keterangan soket melaluifstat()
.sumber