Originariamente inviato da LeDaVinci
il codice non fa nulla di particolare: creo un file ci scrivo dentro quello che ho letto da input(STDIN_FILENO) mi sposto con la lseek e poi riscrivo quello che rileggo da tastiera!! utilizzo per compilare gcc!
Infatti anche con g++ (MinGW) compila.
Così funziona, la prima stringa però deve essere >=10, altrimenti andresti a scrivere oltre la fine del file, con
la successiva write().
codice:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main()
{
	int fd, n, d;
	const int slen = 80;
	char s[slen];
	off_t i;
	fd = open("file.c", O_TEXT | O_RDWR | O_CREAT, S_IREAD | S_IWRITE);
	if( fd >= 0 )
	{
		printf("Scrivi nel file \n\n");
		n = read( STDIN_FILENO, s, slen);
//		write( fd, s, n-1); // Con n-1 non scrivo il carattere invio
		write( fd, s, n-1); // Con n-1 non scrivo il carattere invio
//	 	i = lseek( fd, 10, SEEK_CUR); // +10 dalla posizione attuale ! 
		i = lseek( fd, 10, SEEK_SET); // +10 dalla posizione iniziale
		printf("\nScrivi dopo il buco \n\n");
		printf("Posizione nel file = %d\n", i);
		n = read( STDIN_FILENO, s, slen);
		write(fd, s, n-1); // Con n-1 non scrivo il carattere invio
		close ( fd );
	}
	else
		printf("\nErrore nella open() \n");
	return 0;
}
Come vedi o usato "i = lseek( fd, 10, SEEK_SET)"
perchè con "i = lseek( fd, 10, SEEK_CUR)" ti spostavi
10 bytes oltre la posizione corrente, quindi anche oltre la
fine del file, ovvio che poi non scriveva nulla.