地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【C】pread(2)/pwrite(2)

指定したオフセットでファイルディスクリプターを読み書きするpread(2)/pwrite(2)を使ったサンプルコード

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <assert.h>

int main(int argc, char **argv)
{
    char c;
    int fd, ret;

    fd = open("test.txt", O_RDWR);
    assert(fd != -1);
    
    pread(fd, &c, sizeof(c), 5);
    printf("before pwrite():data is %c offset is %d\n", c, lseek(fd, 0, SEEK_CUR));

    c = 'A';
    ret = pwrite(fd, &c, sizeof(c), 5);
    assert(ret != -1);

    pread(fd, &c, sizeof(c), 5);

    printf("after pwrite():data is %c offset is %d\n", c, lseek(fd, 0, SEEK_CUR));}
       pread()   は、ファイルディスクリプター fd の (ファイルの先頭からの) オフセット offset から
       最大 count バイトをバッファー buf へ読み込む。ファイルオフセットは変化しない。

       pwrite()  は、バッファー buf から最大 count バイトをファイルディスクリプター fd のオフセッ
       ト offset に書き込む。ファイルオフセットは変化しない。

       fd で参照されるファイルはシーク (seek) 可能でなければならない。