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.