C言語システムコール-pwrite

pwriteシステムコール

概要

pwriteはオフセットを指定してファイルの書き込みを行います。

lseek実行後にwriteすることと同等の処理となります。


lseekでオフセットを変更すると、システム側のファイルオフセット情報は変化します。

しかし、pwriteでデータの読み込みを行った場合には、システム側のファイルオフセット情報は変化しません。


サンプルプログラム

書き込み対象ファイルの先頭から8Bytesをそのままにして、データを書き込みます。

ファイルが8bytes未満であると、不定文字データを8Bytes出力してしまいます。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/*!
 * @brief     sample
 * @param[in] filepath  ファイルパス名
 * @return    0:success/-1:failure
 */
static int
sample_func(char *filepath)
{
    int rc = 0;
    int fd = 0;
    char *buf = NULL;

    fd = open(filepath, O_WRONLY);
    if(fd < 0){
        printf("Error: open() %s: %s\n", strerror(errno), filepath);
        return(-1);
    }

    buf = "data division";

    /* 先頭8Bytesを飛ばす */
    rc = pwrite(fd, buf, strlen(buf), 8);
    if(rc < 0){
        printf("Error: pread() %s\n", strerror(errno));
        return(-1);
    }
 
    return(0);
}

int
main(int argc, char *argv[])
{
    int rc = 0;

    if(argc != 2){
        fprintf(stderr, "Usage: %s <path>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    rc = sample_func(argv[1]);
    if(rc != 0) exit(EXIT_FAILURE);

    exit(EXIT_SUCCESS);
}


関連ページ