On Thursday 10 November 2005 08:04 pm, Arman Idris wrote:
> Thanks all,
>
> Sekarang saya sudah ngerti dikit tapi mo nanya lagi (sekalian
> ngeramein milis :) ).
>
> Selama ini yang saya baca setiap ada operasi file biasanya filenya
> file teks, pake library standar c fopen() atau syscall open(), gimana
> kalau filenya bukan teks seperti file log (lastlog,wtmp). Kalau ndak
> salah ini ada hubungannya dengan type data (struct,union).
>
> Mungkin ada rekan yang bisa ngasih penjelasan,contoh,url atau mungkin
> source code program dengan kasus seperti itu, soalnya dari apa yang
> selama ini saya dengar kalau mau cepat ngerti coba liat contoh program
> orang atau langsung baca file header seperti stdio.h, tapi boro-boro
> ngerti, makin lama saya baca makin mual rasanya soalnya saya coba baca
> source code xmms,squid (hehehe .. ketinggian rupanya)

aduh... jangan langsung dibaca file-nya... nggak heran kalo muntah2... bacanya 
di referensi atau manual donk!!

berikut ini saya kasih contoh sebuah potongan code saya,
sengaja saya potong sebagian... karena biar tidak terlalu bertele2 dan terlalu 
panjang... yang penting sudah menunjukkan hal2 penting dalam me-load file 
yang memiliki struktur... btw... pertama2 struktur file harus tahu dulu, 
barulah informasinya bisa barguna...


--- START CODE ---

#define DATA_SIZE 2048

typedef unsigned char ccd_sectheader_syn[12];
typedef unsigned char ccd_edc[4];
typedef unsigned char ccd_ecc[276];

typedef struct {
        unsigned char sectaddr_min, sectaddr_sec, sectaddr_frac;
        unsigned char mode;
} ccd_sectheader_header __attribute__((packed));

typedef unsigned char ccd_sectheader_subheader[8];  //??? No idea about the 
struct

typedef struct {
        ccd_sectheader_syn syn;
        ccd_sectheader_header header;
} ccd_sectheader __attribute__((packed));

typedef struct {
        ccd_sectheader sectheader;
        union {
                struct {
                        unsigned char data[DATA_SIZE];
                        ccd_edc edc;
                        unsigned char unused[8];
                        ccd_ecc ecc;
                } mode1;
                struct {
                        ccd_sectheader_subheader sectsubheader;
                        unsigned char data[DATA_SIZE];
                        ccd_edc edc;
                        ccd_ecc ecc;
                } mode2;
        } content;
} ccd_sector __attribute__((packed));


int main(int argc, char *argv[])
{
        ccd_sector src_sect;
        int bytes_read, bytes_written, sect_num = 0;

        FILE *src_file;
        FILE *dst_file;

        src_file = fopen(argv[1], "r");
        dst_file = fopen(argv[2], "w");

        while(!feof(src_file))
        {
                bytes_read = fread(&src_sect, 1, sizeof(ccd_sector),
                                   src_file);

                if (bytes_read != 0)
                {
                        if (bytes_read < sizeof(ccd_sector))
                        {
                                printf("Error at sector %d.\n", sect_num);
                                return 1;
                        }
                }

                // proses disini...

        }

        fclose(src_file);
        fclose(dst_file);

        printf("\nDone.\n");

        return 0;
}

--- END CODE ---

-- 
Danny Kurniawan
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/CM/E/IT d+() s+:+ a- C++>+++$ UL+++(++)>++++ P!(+++) L+++>++++>$ E-- W++>$
N o-- K- w--(+++) O++@ M@ V? PS PE-@ Y+ PGP@ t++ 5+@ X+++(++) R tv+ b
+++(++) DI? D++@ G+>++ e++ h- r++ y z- 
------END GEEK CODE BLOCK------

-- 
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis

Kirim email ke