Se você está procurando após o final do arquivo, você tem que escrever pelo menos um byte nessa posição:
write(fd, "", 1);
para que o SO preencha o buraco com zeros.
Então, se você quiser criar um arquivo vazio de um determinado tamanho 1000 com lseek
, faça:
lseek(fd, 999, SEEK_SET); //<- err check
write(fd, "", 1); //<- err check
ftruncate
é provavelmente melhor e parece criar arquivos esparsos sem qualquer problema:
ftruncate(fd, 1000);