Я пытаюсь записать 2 ГБ в файл, используя pwrite, но мой код ниже записывает меньшее количество.
Однако, если я записываю всего 2 ГБ, используя 2 вызова pwrite по 1 ГБ, это работает.
Ожидаемый размер файла: 2147483648 байт (2 ГБ), наблюдается: 2147479552
Составлено как: gcc -Wall test.c -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_XOPEN_SOURCE=600
gcc v 4.5.0 на 64-битном Opensuse
Вот полная программа.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
size_t size = 2147483648; //2GB
off_t offset = 0;
int fd;
char *buf = (char*) malloc (size * sizeof(char));
if(buf == NULL)
{
printf("malloc error \n");
exit(-1);
}
if(-1 == (fd = open("/tmp/test.out", O_RDWR|O_CREAT, 0644)))
{
fprintf(stderr, "Error opening file. Exiting..\n");
free(buf);
exit(-1);
}
if(-1 == (pwrite(fd, buf, size, offset)))
{
perror("pwrite error");
free(buf);
exit(-1);
}
free(buf);
return 0;
}