Giriş
Şu satırı dahil ederiz.
Dosyanın başından itibaren 16. byte'a gitmek için şöyle yaparız.
lseek metodu
fseek çağrısının POSIX dünyasında karşılığı lseek. Şu satırları dahil ederiz.
Elimizde şöyle bir kod olsun. Okuma işlemi 4 byte ilerletir. Yazma işlemi 4. byte'tan itibaren başlar.
Şu satırı dahil ederiz.
#include <cstdio>
SEEK_SET seçeneğiDosyanın başından itibaren 16. byte'a gitmek için şöyle yaparız.
FILE *f = fopen ('...', "rb");
fseek (f,16,SEEK_SET);
lseek metodu
fseek çağrısının POSIX dünyasında karşılığı lseek. Şu satırları dahil ederiz.
#include <sys/types.h>
#include <unistd.h>
Şöyle yaparız.int fd = ...;
lseek (fd, 0, SEEK_SET);
Eğer lseek yapmazsak
Elimizde şöyle bir kod olsun. Okuma işlemi 4 byte ilerletir. Yazma işlemi 4. byte'tan itibaren başlar.
int num = 0;
int fd = open("/dev/sda6", O_RDWR);
ssize_t ret = read(fd, &num, sizeof(int));
...
num = 199;
ret = write(fd, &num, sizeof(int));
...
close(fd);
Başa yazmak için lseek ile 0. konuma gitmek gerekir.Şöyle yaparız.lseek(fd,0,SEEK_SET);
Posix konum değiştirmeden okuyup yazmak için API'ler sağlar. Şöyle yaparız. pread ve pwrite o anki konumu değiştirmeden belirtilen konumdan okuma yazma yapabilir.#include <unistd.h>
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
Şöyle yaparızssize_t ret = pread(fd, &num, sizeof(int), 0);
ssize_t ret = pwrite(fd, &num, sizeof(int), 0);
Hiç yorum yok:
Yorum Gönder