Skip navigation


File descriptor adalah sebuah abstraksi yang digunakan dalam pengaksesan file. Di dalam UNIX, file descriptor ini dilambangkan dalam sebuah integer. Untuk setiap proses, terdapat 3 file descriptor yang telah dimiliki.

  1. Standard input (stdin). Bernilai 0.
  2. Standard output (stdout). Bernilai 1.
  3. Standar error (stderr). Bernilai 2.

File descriptor ini merupakan index pada tabel yang dimiliki kernel untuk menunjukkan file yang dibuka pada proses-proses yang berjalan.

Untuk melihat apa saja file-file yang dibuka oleh kernel, dapat digunakan command lsof. Selain itu juga dapat dilihat pada procfs (/proc/), sebuah file system khusus yang menyimpan seluruh informasi mengenai proses-proses yang berjalan pada sistem operasi.

Sebagai contoh

/* filedescriptor1.c */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char * argv[])
{
	int fd = open("/tmp/test.txt", O_RDONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
	printf("PID = %d\nFD  = %d\n", getpid(), fd);
	for (;;);
	return (EXIT_SUCCESS);
}

Kode di atas dijalankan akan menjadi

petra@petra-desktop:~/Desktop/filedescriptor$ gcc -o filedescriptor1 filedescriptor1.c
petra@petra-desktop:~/Desktop/filedescriptor$ ./filedescriptor1
PID = 6976
FD  = 3

Kita dapat melihat file descriptor yang dibuka

petra@petra-desktop:~/Desktop/filedescriptor$ lsof | grep 6976
COMMAND    PID       USER   FD      TYPE     DEVICE     SIZE   NODE NAME
filedescr 6976      petra  cwd       DIR        8,1     4096 426108 /home/petra/Desktop/filedescriptor
filedescr 6976      petra  rtd       DIR        8,1     4096      2 /
filedescr 6976      petra  txt       REG        8,1     6616 426109 /home/petra/Desktop/filedescriptor/filedescriptor1
filedescr 6976      petra  mem       REG        8,1  1364388 296243 /lib/tls/i686/cmov/libc-2.7.so
filedescr 6976      petra  mem       REG        8,1   109152 278547 /lib/ld-2.7.so
filedescr 6976      petra    0u      CHR      136,2               4 /dev/pts/2
filedescr 6976      petra    1u      CHR      136,2               4 /dev/pts/2
filedescr 6976      petra    2u      CHR      136,2               4 /dev/pts/2
filedescr 6976      petra    3r      REG        8,1        0 434184 /tmp/test.txt

Bisa dilihat pada 4 file desciptor terakhir yang ditandai dengan 0u, 1u, 2u, 3r. File descriptor yang pertama yakni stdin dengan penanda /dev/pts/2 yakni penanda terminal yang dijalankan. Sama seperti dengan 1u dan 2u yakni stdout dan stderr yang akan menggunakan /dev/pts/2. Kemudian terdapat filedescriptor 3r yakni file yang kita buka (/tmp/test.txt), seperti pada kode program beserta keluarannya. Tanda u, r, dan juga w menandakan mode file tersebut. Tanda u untuk universal (read/write), r untuk read, dan w untuk write.

Seperti yang sudah ditulis, kita dapat juga menggunakan procfs untuk melihat file descriptor yang dimiliki.

petra@petra-desktop:~/Desktop/filedescriptor$ cd /proc/6976/fd/
petra@petra-desktop:/proc/6976/fd$ ls
0  1  2  3

File descriptor akan terdapat pada direktori fd pada direktori masing-masing process (/proc/%pid/fd).
File-file tersebut hanyalah link ke pada file-file yang asli.

petra@petra-desktop:/proc/6976/fd$ ls -all
total 0
dr-x------ 2 petra petra  0 Sep  7 08:29 .
dr-xr-xr-x 6 petra petra  0 Sep  7 08:29 ..
lrwx------ 1 petra petra 64 Sep  7 08:29 0 -> /dev/pts/2
lrwx------ 1 petra petra 64 Sep  7 08:29 1 -> /dev/pts/2
lrwx------ 1 petra petra 64 Sep  7 08:29 2 -> /dev/pts/2
lr-x------ 1 petra petra 64 Sep  7 08:29 3 -> /tmp/test.txt

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: