Membuka dan Menutup File Descriptor
Selain standard input, standard output dan standard error, kita harus pula secara eksplisit membuka file descriptor apabila kita berkeinginan membaca ataupun menulisinya. Untuk keperluan ini kita bisa menggunakan pemanggil sistem open() ataupun create(). Pemanggil sistem create() digunakan pada sistem berbasis POSIX, termasuk Linux, namun sudah jarang digunakan.
Nilai kembalian pemanggil sistem open() adalah sebuah file descriptor. Hal ini mirip dengan fungsi fopen(), yang membedakan adalah nilai kembaliannya yang berupa sebuah pointer file. Karena nilai kembalian open() adalah sebuah file descriptor, dan seperti yang telah kita bahas sebelumnya, berarti berupa bilangan bulat atau integer. Nilai kembalian open() sama dengan -1 jika terjadi kesalahan/error. Inilah bentuk umum fungsi ini :
int open(const_char_*path, int_oflags, pmode_t_mode);
int menunjukkan bahwa nilai kembalian dari open() berupa bilangan bulat. Argumen const_char_*path adalah pointer dari konstanta karakter yang menunjukan nama file yang akan dibuka beserta path-nya. Sedangkan argumen int_oflags adalah int yang menentukan bagaimana file akan dibuka, nilai-nilainya yang utama adalah :
- O_RDONLY Membuka untuk read-only
- O_WRONLY Membuka untuk write-only
- O_RDWR Membuka untuk write dan read
Untuk nilai-nilai yang lain bisa didapatkan di manual page open ($ man open). Nilai-nilai ini sebenarnya berupa konstanta-konstanta yang didefiniskan di <fcntl.h> untuk Unix Sistem V dan pada <sys/file.h> pada versi Berkeley (BSD). Terakhir, argumen pmode_t_mode selalu bernilai nol bila digunakan pada pemanggil sistem open() ini, pembahasan akan hal ini akan kita lakukan kemudian. Baiklah ini contohnya :
File cobaopen.c
#include <sys/file.h>
#include <unistd.h>
#include <stdio.h>
main()
{
int fildes;
char c;
fildes = open(”fear_factor.txt”, O_RDONLY,0);
printf(”Karena nilai file descriptornya = %d MAKA \n”, fildes);
if (fildes == -1)
write(1, “File fear_factor.txt tidak bisa dibuka\n”, strlen(”File
fear_factor.txt tidak bisa dibuka\n”));
else
write(1, “File fear_factor.txt bisa dibuka\n”, strlen(”File fear_factor.txt
bisa dibuka\n”));
}
Bila file fear_factor.txt memang benar-benar ada di direktori aktif maka hasil eksekusinya :
$ ./cobaopen
Karena nilai file descriptornya = 3 MAKA
File fear_factor.txt bisa dibuka
$
sebaliknya :
$ rm fear_factor.txt
$ ./cobaopen
Karena nilai file descriptornya = -1 MAKA
File fear_factor.txt tidak bisa dibuka
$
Dedicated for Light Intermutimedia
Perusahaan Software Pulsa