#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";
/*
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
DESCRIPTION
The lseek() function repositions the offset of the open file associated with the file descriptor fd to the argument offset according to the directive whence as follows:
SEEK_SET
The offset is set to offset bytes.
SEEK_CUR
The offset is set to its current location plus offset bytes.
SEEK_END
The offset is set to the size of the file plus offset bytes.
The lseek() function allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent
reads of the data in the gap (a "hole") return null bytes ('\0') until data is actually written into the gap.
*/
int main(void)
{
int fd;
if ((fd = open("file.hole", O_RDWR | O_CREAT , 0666)) < 0)
printf("creat error");
/* offset now = 10 */
int max = 1024 * 1024 * 1024;
int i = 400;
while(i--)
{
if(lseek(fd, max, SEEK_CUR) == -1)
{
printf("lseek error");
return -1;
}
if (write(fd, buf2, 10) != 10)
printf("buf2 write error");
}
close(fd);
exit(0);
}