'pwrite'는 POSIX 표준 함수로, file descriptor를 통해 파일에 데이터를 쓰는 데 사용된다. 'pwrite'는 'write'와 비슷하지만, 'pwrite'는 file offset을 지정할 수 있다는 점에서 다르다. 이는 원자적으로 수행되기 때문에, 다른 thread나 process가 file의 file offset을 변경하지 않는다.
#include <unistd.h>
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
return 값은 성공 시, 'pwrite'는 file에 실제로 쓰여진 byte 수를 반환한다. 실패 시, -1을 반환하며, 'errno'를 통해 오류의 원인을 알 수 있다.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("example.txt", O_WRONLY | O_CREAT, 0644);
if (fd < 0) {
perror("Failed to open file");
return 1;
}
const char *data = "Hello, World!";
size_t data_size = 13; // Length of "Hello, World!"
// Write data to the file at offset 0
if (pwrite(fd, data, data_size, 0) != data_size) {
perror("Failed to write data");
close(fd);
return 1;
}
close(fd);
return 0;
}
'pwrite'를 사용하는 이유는 다음과 같다.
'pwrite' 함수는 파일의 특정 오프셋에 데이터를 쓰는 데 사용되는 유용한 함수이다. 특히, multi thread, multi processor 환경에서 원자적 쓰기를 보장하고, 파일의 현재 오프셋을 변경하지 않기 때문에 안정적인 random access를 제공한다.