27 Ağustos 2017 Pazar

fseek

Giriş
Şu satırı dahil ederiz.
#include <cstdio>
SEEK_SET seçeneği
Dosyanı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ız
ssize_t ret = pread(fd, &num, sizeof(int), 0);
ssize_t ret = pwrite(fd, &num, sizeof(int), 0);

Hiç yorum yok:

Yorum Gönder