Jawaban lain menambahkan hal-hal hebat. Saya akan menambahkan 2 sen saja.
Menurut Wikipedia kita tahu pasti: deskriptor file adalah bilangan bulat non-negatif. Hal terpenting yang menurut saya hilang, adalah mengatakan:
Deskriptor file terikat ke ID proses.
Kita tahu deskriptor file paling terkenal adalah 0, 1 dan 2. 0 sesuai dengan STDIN
, 1 hingga STDOUT
, dan 2 hingga STDERR
.
Katakan, ambil proses shell sebagai contoh dan bagaimana penerapannya?
Lihatlah kode ini
#>sleep 1000 &
[12] 14726
Kami membuat proses dengan id 14726 (PID). Dengan menggunakan lsof -p 14726
kita bisa mendapatkan hal-hal seperti ini:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sleep 14726 root cwd DIR 8,1 4096 1201140 /home/x
sleep 14726 root rtd DIR 8,1 4096 2 /
sleep 14726 root txt REG 8,1 35000 786587 /bin/sleep
sleep 14726 root mem REG 8,1 11864720 1186503 /usr/lib/locale/locale-archive
sleep 14726 root mem REG 8,1 2030544 137184 /lib/x86_64-linux-gnu/libc-2.27.so
sleep 14726 root mem REG 8,1 170960 137156 /lib/x86_64-linux-gnu/ld-2.27.so
sleep 14726 root 0u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 1u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 2u CHR 136,6 0t0 9 /dev/pts/6
Kolom FD 4 dan kolom TYPE berikutnya berhubungan dengan File Descriptor dan tipe File Descriptor.
Beberapa nilai untuk FD dapat:
cwd – Current Working Directory
txt – Text file
mem – Memory mapped file
mmap – Memory mapped device
Tetapi deskriptor file asli berada di bawah:
NUMBER – Represent the actual file descriptor.
Karakter setelah angka yaitu "1u", mewakili mode di mana file dibuka. r untuk membaca, w untuk menulis, u untuk membaca dan menulis.
TYPE menentukan jenis file. Beberapa nilai TYPE adalah:
REG – Regular File
DIR – Directory
FIFO – First In First Out
Tetapi semua deskriptor file adalah CHR - File karakter khusus (atau file karakter perangkat)
Sekarang, kita dapat mengidentifikasi Penjelas File untuk STDIN
, STDOUT
dan STDERR
mudah dengan lsof -p PID
, atau kita dapat melihat sama jika kita ls /proc/PID/fd
.
Perhatikan juga bahwa tabel deskriptor file yang dicatat oleh kernel tidak sama dengan tabel file atau tabel inode. Ini terpisah, seperti yang dijelaskan beberapa jawaban lainnya.
Anda dapat bertanya pada diri sendiri di mana deskriptor file ini secara fisik dan apa yang disimpan /dev/pts/6
misalnya
sleep 14726 root 0u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 1u CHR 136,6 0t0 9 /dev/pts/6
sleep 14726 root 2u CHR 136,6 0t0 9 /dev/pts/6
Ya, /dev/pts/6
hidup murni dalam ingatan. Ini bukan file biasa, tetapi disebut file perangkat karakter . Anda dapat memeriksa ini dengan: ls -l /dev/pts/6
dan mereka akan mulai dengan c
, dalam kasus saya crw--w----
.
Untuk mengingat sebagian besar Linux seperti OS, tentukan tujuh jenis file:
- File biasa
- Direktori
- File perangkat karakter
- Blokir file perangkat
- Soket domain lokal
- Named pipes (FIFOs) dan
- Tautan simbolik