Lompat ke konten Lompat ke sidebar Lompat ke footer

Fungsi LSEEK Bahasa C dan Penjelasannya

Ketika sebuah file diberikan ada program, seperti input.txt, kemudian program tersebut membaca byte alternatif nth dan menuliskannya pada file lain, maka proses tersebut dapat dilakukan dengan bantuan fungsi lseek() Bahasa C.


Sebelum memahami lebih dalam materi tentang Fungsi LSEEK Bahasa C dan Penjelasannya, terlebih dahulu pelajari materi tentang: Fungsi FTELL Bahasa C Beserta Penjelasannya, Fungsi FSEEK Bahasa C dan Penjelasannya, dan Fungsi FGETC dan FPUTC Bahasa C dan Penjelasannya.

Fungsi lseek(): merupakan sebuah sistem pemanggilan yang digunakan untuk mengubah lokasi dari pointer read atau pointer write dari sebuah file deskriptor. Lokasi tersebut dapat diatur baik dalam tipe absolut atau dalam tipe makna relatif.

Definisi Fungsi: off_t lseek(int fildes, off_t offset, int whence);

Keterangan:
  • int fildes: Merupakan file deskriptor dari pointer yang akan digerakkan.
  • off_t offset: Merupakan pointer offset yang diukur dalam satuan byte.
  • int whence: Merupakan method yang akan diinterpretasikan oleh offset, baik itu bertipe relatif, absolut, dan lain sebagainya. Nilai resmi variabel r adalah disediakan pada bagian akhir.
  • return value: Berfungsi untuk mengembalikan offset dari pointer dalam satuan byte yang berasal dari bagian awal file. Jika nilai dikembalikan nilai -1, maka terjadi error pada saat proses memindahan pointer.

Contoh:

// Program bahasa C untuk

// membaca byte nth dari suatu

// file dan menduplikasikannya

// ke file lain menggunakan

// fungsi lseek().

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

#include <fcntl.h>


void func(char arr[], int n)

{


// Membuka file untuk READ

// only.

int f_write = open("start.txt", O_RDONLY);


// Membuka file untuk WRITE

// dan READ only.

int f_read = open("end.txt", O_WRONLY);

int count = 0;


while (read(f_write, arr, 1))

{


// Untuk menulis byte pertama dari file input pada output file.

if (count < n)

{


// SEEK_CUR menentukan bahwa

// offset disediakan dalam

// tipe relatif ke posisi file

// saat ini.

lseek (f_write, n, SEEK_CUR);

write (f_read, arr, 1);

count = n;

}


// Setelah byte nth,

// selanjutnya dilakukan

// pengambilan nth byte

// alternatif.

else

{

count = (2*n);

lseek(f_write, count, SEEK_CUR);

write(f_read, arr, 1);

}


}


close(f_write);

close(f_read);


}


// Driver code

int main()

{


char arr[100];

int n;

n = 5;


// Memanggil fungsi func.

func(arr, n);


return 0;

}


Fungsi `lseek` dalam bahasa C merupakan salah satu fungsi yang sangat penting dalam manipulasi file. Fungsi ini digunakan untuk mengatur posisi pointer file, yang berfungsi untuk menentukan titik dimana data akan dibaca atau ditulis dalam file yang sedang dibuka. Fungsi `lseek` sering digunakan dalam pengolahan file berukuran besar, terutama ketika bekerja dengan file biner atau melakukan operasi baca/tulis dengan posisi yang dinamis.

Secara umum, fungsi `lseek` mempengaruhi operasi I/O (input/output) pada file, karena posisi pointer file akan mempengaruhi lokasi data yang diakses. Fungsi ini adalah bagian dari library POSIX (Portable Operating System Interface), yang banyak digunakan di sistem berbasis UNIX, termasuk Linux dan macOS. Fungsi ini juga tersedia di banyak sistem operasi lain yang kompatibel dengan POSIX.


Definisi Fungsi lseek

Fungsi `lseek` adalah bagian dari library standar C yang didefinisikan dalam header file `<unistd.h>`. Fungsi ini digunakan untuk memindahkan posisi file pointer dalam file yang sedang dibuka, baik untuk tujuan membaca maupun menulis data. Fungsi ini memiliki tiga parameter utama, yaitu file descriptor, offset, dan pengaturan posisi file.

File descriptor adalah nilai integer yang menunjuk ke file yang dibuka. Offset adalah jumlah byte yang akan dipindahkan dari posisi file yang ditentukan oleh parameter ketiga, dan parameter ketiga sendiri adalah salah satu dari tiga nilai yang menentukan posisi file saat memulai pemindahan: `SEEK_SET`, `SEEK_CUR`, dan `SEEK_END`. Masing-masing nilai ini menentukan bagaimana offset diterapkan terhadap posisi file yang sedang dibaca atau ditulis.

Tujuan dan Penggunaan Fungsi lseek

Tujuan utama penggunaan fungsi `lseek` adalah untuk memindahkan posisi pointer file secara fleksibel. Fungsi ini memungkinkan pembacaan atau penulisan data dimulai dari posisi tertentu dalam file. Tanpa `lseek`, pembacaan atau penulisan file hanya akan dilakukan secara berurutan dari awal hingga akhir file, kecuali jika file dibuka dengan mode tertentu yang mendukung akses acak. Namun, dengan menggunakan `lseek`, pengguna dapat secara eksplisit mengatur posisi pointer file untuk membaca atau menulis di lokasi yang diinginkan, meskipun dalam file besar sekalipun.

Dalam file yang disusun secara berurutan, terutama file teks, fungsi `lseek` memberikan keuntungan besar dengan memungkinkan pembacaan bagian-bagian file yang terpisah tanpa perlu membaca seluruh isi file. Hal ini sangat berguna dalam berbagai aplikasi, seperti pengolahan data besar atau saat bekerja dengan file biner yang menyimpan data dalam format yang tidak berurutan.

Fungsi `lseek` juga sangat bermanfaat ketika file tersebut memiliki data yang harus dibaca atau ditulis secara acak, misalnya dalam kasus manipulasi file database atau penyimpanan blok data dalam sistem file. Pengaturan posisi pointer file menjadi hal yang sangat penting untuk efisiensi akses data dalam jenis file seperti ini.

Parameter Fungsi lseek

Seperti yang telah disebutkan sebelumnya, `lseek` menerima tiga parameter utama:
  • File Descriptor: Parameter pertama adalah file descriptor, yang merupakan integer yang menunjuk ke file yang dibuka. File descriptor diperoleh ketika file dibuka menggunakan fungsi seperti `open`. File descriptor ini berfungsi sebagai identifikasi yang digunakan oleh sistem untuk mengetahui file mana yang sedang dioperasikan.
  • Offset: Parameter kedua adalah offset, yang menunjukkan jumlah byte yang akan dipindahkan dari posisi yang ditentukan oleh parameter ketiga. Nilai offset bisa positif atau negatif, tergantung pada arah pemindahan posisi pointer file. Jika offset positif, posisi pointer akan bergerak maju, sedangkan jika offset negatif, posisi pointer akan bergerak mundur dalam file.
  • Whence: Parameter ketiga adalah pengaturan posisi file, yang mengontrol bagaimana offset diterapkan terhadap posisi file. Nilai yang dapat digunakan adalah:
    • SEEK_SET: Menetapkan posisi file pada offset yang dihitung dari awal file.
    • SEEK_CUR: Menetapkan posisi file pada offset yang dihitung dari posisi pointer file saat ini.
    • SEEK_END: Menetapkan posisi file pada offset yang dihitung dari akhir file.

Dengan tiga parameter ini, `lseek` memberikan kemampuan untuk mengatur posisi pointer file dengan sangat fleksibel dan sesuai dengan kebutuhan pengolahan file.

Cara Kerja lseek

Cara kerja `lseek` bisa dijelaskan dalam beberapa langkah sederhana. Pertama, ketika sebuah file dibuka dengan fungsi `open`, sistem operasi akan membuat file descriptor yang mewakili file tersebut. Setelah itu, dengan menggunakan fungsi `lseek`, posisi pointer file dapat diatur sesuai kebutuhan. Ketika operasi baca atau tulis dilakukan, data akan diambil atau ditulis mulai dari posisi pointer file yang telah disesuaikan.

Sebagai contoh, jika sebuah file dibuka dan posisi file pointer saat itu berada di awal file, pemanggilan `lseek` dengan `SEEK_SET` dan offset 1000 akan memindahkan pointer file ke byte ke-1000 dalam file. Jika fungsi `lseek` kemudian dipanggil dengan `SEEK_CUR` dan offset -500, pointer file akan bergerak mundur sejauh 500 byte dari posisi file yang terakhir.

Keuntungan Penggunaan lseek

Salah satu keuntungan besar menggunakan `lseek` adalah kemampuan untuk melakukan manipulasi file secara acak, yang tidak dapat dicapai dengan operasi file yang lebih sederhana. Dengan `lseek`, file dapat dibaca atau ditulis mulai dari titik mana pun di dalam file, tanpa harus membaca seluruh file terlebih dahulu. Hal ini memungkinkan pengolahan file yang lebih efisien, terutama ketika bekerja dengan file besar yang berisi banyak data yang tidak perlu diproses secara berurutan.

Keuntungan lain adalah kontrol yang lebih besar atas posisi pointer file. Fungsi `lseek` memungkinkan untuk memindahkan pointer file dengan sangat presisi, memungkinkan berbagai jenis operasi file yang lebih kompleks, seperti pembacaan dan penulisan data ke lokasi yang spesifik, atau mengatur ulang posisi file setelah operasi tertentu.

Pertimbangan Penggunaan lseek

Walaupun `lseek` menawarkan banyak keuntungan, ada beberapa hal yang perlu dipertimbangkan saat menggunakan fungsi ini. Salah satu perhatian utama adalah bahwa tidak semua file mendukung akses acak. File yang dibuka dalam mode tertentu, seperti mode penambahan (`O_APPEND`), akan selalu menulis ke akhir file, meskipun `lseek` digunakan untuk memindahkan pointer file.

Selain itu, meskipun `lseek` sangat berguna dalam pengolahan file biner dan data yang terstruktur, penggunaannya dalam file teks bisa kurang intuitif. File teks biasanya diproses secara berurutan, dan penggunaan `lseek` untuk mengatur posisi pointer file dalam file teks bisa mengarah pada pembacaan data yang tidak sesuai dengan format yang diinginkan, karena karakter dalam file teks biasanya diinterpretasikan berdasarkan karakter garis baru atau spasi yang memisahkan data.

Kesimpulan

Fungsi `lseek` dalam bahasa C merupakan alat yang sangat berguna untuk memanipulasi posisi pointer file dalam operasi baca dan tulis. Dengan menggunakan `lseek`, file dapat diproses secara acak, memungkinkan pembacaan dan penulisan data di posisi yang spesifik dalam file. Fungsi ini memberikan fleksibilitas yang sangat besar dalam pengolahan file biner atau file besar yang memerlukan akses acak. Namun, penting untuk memahami bahwa penggunaan `lseek` harus disesuaikan dengan jenis file dan cara file tersebut dibuka agar dapat memaksimalkan kegunaannya. Dengan pemahaman yang tepat, `lseek` dapat menjadi alat yang sangat kuat dalam pengolahan file di bahasa C.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Kukuh RaharjoLatifa Sudagnyana Mustikaning Wahid'DyahLinda Riana AnggrahiniListianingsih, dan Lovioleta Rifani Putri Azzahra.

5 komentar untuk "Fungsi LSEEK Bahasa C dan Penjelasannya"

  1. Apa yang dimaksud dengan fungsi lseek() pada bahasa C?

    BalasHapus
    Balasan
    1. Fungsi lseek() pada bahasa C merupakan fungsi yang digunakan untuk mengubah offset file saat ini ke posisi baru dalam file. Posisi baru tersebut adalah offset byte yang diberikan dari posisi yang telah ditentukan oleh wherece.

      Hapus
    2. Setelah fungsi lseek() bahasa C digunakan untuk mencari lokasi baru, maka operasi input dan output berikutnya adalah pada file akan dimulai pada lokasi yang telah dicari tersebut.

      Hapus
  2. Nilai return apa yang akan diberikan oleh fungsi lseek() pada bahasa C?

    BalasHapus
    Balasan
    1. Setelah berhasil menyelesaikan proses yang dilakukan pada program, maka fungsi lseek() akan mengembalikan nilai hasil berupa lokasi offset yang diukur dalam satuan byte dari awal file.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -