GNU/Linux >> Belajar Linux >  >> Linux

Penanganan File di C dengan Contoh (fopen, fread, fwrite, fseek)

Seperti halnya OS apa pun, penanganan file adalah konsep inti di Linux. Setiap programmer sistem akan mempelajarinya sebagai salah satu tugas pemrograman awalnya. Aspek pemrograman ini melibatkan file sistem.

Melalui penanganan file, seseorang dapat melakukan operasi seperti membuat, memodifikasi, menghapus dll pada file sistem. Di sini, di artikel ini saya mencoba untuk membawa penanganan file yang paling mendasar. Semoga artikel ini akan menghapus lapisan teratas dari aspek multilayer ini.

Fungsi penanganan file

Pada artikel ini, kami akan membahas fungsi-fungsi berikut yang populer digunakan dalam penanganan file:

fopen()

FILE *fopen(const char *path, const char *mode);

Fungsi fopen() digunakan untuk membuka file dan mengaitkan aliran I/O dengannya. Fungsi ini membutuhkan dua argumen. Argumen pertama adalah penunjuk ke string yang berisi nama file yang akan dibuka sedangkan argumen kedua adalah mode di mana file akan dibuka. Modusnya bisa :

  • ‘r’    :  Buka file teks untuk dibaca. Aliran diposisikan di awal file.
  • ‘r+’ :  Terbuka untuk membaca dan menulis. Aliran diposisikan di awal file.
  • ‘w’   :  Memotong file menjadi nol atau membuat file teks untuk ditulis. Aliran diposisikan di awal file.
  • ‘w+’ :Terbuka untuk membaca dan menulis. File dibuat jika tidak ada, jika tidak maka akan terpotong. Aliran diposisikan di awal file.
  • ‘a’    :Buka untuk menambahkan (menulis di akhir file). File dibuat jika tidak ada. Aliran diposisikan di akhir file.
  • 'a+' :Terbuka untuk membaca dan menambahkan (menulis di akhir file). File dibuat jika tidak ada. Posisi file awal untuk membaca adalah di awal file, tetapi output selalu ditambahkan ke akhir file.

Fungsi fopen() mengembalikan pointer aliran FILE saat berhasil sementara mengembalikan NULL jika terjadi kegagalan.

fread() dan fwrite()

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

Fungsi fread/fwrite digunakan untuk membaca/menulis data dari/ke file yang dibuka oleh fungsi fopen. Fungsi-fungsi ini menerima tiga argumen. Argumen pertama adalah pointer ke buffer yang digunakan untuk membaca/menulis data. Data yang dibaca/ditulis berupa elemen 'nmemb' yang panjangnya masing-masing 'ukuran' byte.

Jika berhasil, fread/fwrite mengembalikan jumlah byte yang sebenarnya dibaca/ditulis dari/ke aliran yang dibuka oleh fungsi fopen. Jika terjadi kegagalan, jumlah bye yang lebih sedikit (kemudian diminta untuk membaca/menulis) akan dikembalikan.

fseek()

int fseek(FILE *stream, long offset, int whence);

Fungsi fseek() digunakan untuk mengatur indikator posisi file untuk aliran ke posisi baru. Fungsi ini menerima tiga argumen. Argumen pertama adalah FILE stream pointer yang dikembalikan oleh fungsi fopen(). Argumen kedua 'offset' memberitahu jumlah byte yang harus dicari. Argumen ketiga 'dari mana' memberitahu dari mana pencarian jumlah byte 'offset' harus dilakukan. Nilai yang tersedia dari mana adalah SEEK_SET, SEEK_CUR, atau SEEK_END. Ketiga nilai ini (secara berurutan) menggambarkan awal file, posisi saat ini, dan akhir file.

Setelah berhasil, fungsi ini mengembalikan 0, jika tidak maka akan mengembalikan -1.

fclose()

int fclose(FILE *fp);

Fungsi fclose() pertama-tama mem-flush aliran yang dibuka oleh fopen() dan kemudian menutup deskriptor yang mendasarinya. Setelah berhasil menyelesaikan fungsi ini mengembalikan 0 lagi akhir file (eof) dikembalikan. Dalam kasus kegagalan, jika aliran diakses lebih jauh maka perilaku tetap tidak terdefinisi.

Kode

#include<stdio.h>
#include<string.h>

#define SIZE 1
#define NUMELEM 5

int main(void)
{
    FILE* fd = NULL;
    char buff[100];
    memset(buff,0,sizeof(buff));

    fd = fopen("test.txt","rw+");

    if(NULL == fd)
    {
        printf("\n fopen() Error!!!\n");
        return 1;
    }

    printf("\n File opened successfully through fopen()\n");

    if(SIZE*NUMELEM != fread(buff,SIZE,NUMELEM,fd))
    {
        printf("\n fread() failed\n");
        return 1;
    }

    printf("\n Some bytes successfully read through fread()\n");

    printf("\n The bytes read are [%s]\n",buff);

    if(0 != fseek(fd,11,SEEK_CUR))
    {
        printf("\n fseek() failed\n");
        return 1;
    }

    printf("\n fseek() successful\n");

    if(SIZE*NUMELEM != fwrite(buff,SIZE,strlen(buff),fd))
    {
        printf("\n fwrite() failed\n");
        return 1;
    }

    printf("\n fwrite() successful, data written to text file\n");

    fclose(fd);

    printf("\n File stream closed through fclose()\n");

    return 0;
}

Kode di atas mengasumsikan bahwa Anda memiliki file uji "test.txt" yang ditempatkan di lokasi yang sama dari tempat eksekusi ini akan dijalankan.

Awalnya isi dalam file adalah :

$ cat test.txt
hello everybody

Sekarang, jalankan kode :

$ ./fileHandling 

 File opened successfully through fopen()

 Some bytes successfully read through fread()

 The bytes read are [hello]

 fseek() successful

 fwrite() successful, data written to text file

 File stream closed through fclose()

Sekali lagi periksa isi file test.txt. Seperti yang Anda lihat di bawah, konten file telah dimodifikasi.

$ cat test.txt
hello everybody
hello

Linux
  1. Urutkan Perintah di Linux dengan Contoh

  2. 10+ perintah Linux VI dengan contoh

  3. perintah chattr di Linux dengan contoh

  1. 10 Perintah Cepat Linux Tail dengan Contoh

  2. Menggunakan Logrotate di linux Untuk Mengelola File Log (dengan contoh)

  3. 10 Contoh Perintah Sed (Stream Editor)

  1. 17 Perintah Tar Berguna dengan Contoh Praktis di Linux

  2. Perintah Zip dan Unzip Linux dengan Contoh

  3. Perintah Diff di Linux dengan Contoh