Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    C lseek, write() e read()

    Salve ragazzi, sto smadonnando con queste 3 funzioni..
    ora vi posto il mio codice:
    codice:
    #include <sys/types.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    
    
    int main(){
    	int us;
    	us = open("SharkServer/users.sxs", O_RDWR|O_CREAT, 0666);
    	if(us == -1){
    		puts("Si è verificato un errore nell'apertura/creazione del file user.sxs\n");
    		exit(-1);
    	}
    	lseek(us, 0, 2);
    	char text[128];
    	memset(text, '\0', 128);
    	strcpy(text, "ciao\n");
    	write(us, text, 128);
    	
    	
    	close(us);
    	
    }
    avevo pensato di aprire il file, di impostare il puntatore alla fine del file e di scrivere...
    ma con il codice sopra ripostato, il sistema mi crea un file da 8GB(solo per ciao...)
    OK, niente problemi, mi faccio coraggio e smanettando un po qua un po la, mi accorgo che la open puo prendere il parametro O_APPEND che in sostanza fa quello che dovrebbe fare lseek() anche se è troppo strano che lseek si comporti in questo modo..
    perfetto, uso O_APPEND... tutto fila liscio come l'olio, fino a quando non mi serve di nuovo lseek...
    infatti, dopo questa bella scrittura di ciao, volevo leggerlo, magari leggendo solo i primi 2 caratteri: 'ci'
    quindi mi dico, uso lseek(us, 0, 0) e si riposizionera all'inizio del file e potro leggere i 2 caratteri...ma...
    NIENTE DA FARE....in pratica lseek sembra non funzionare quando aggiungo O_APPEND e se tolgo O_APPEND ho il problema degli 8GB di file...
    COSA DIAVOLO SBAGLIO?

  2. #2
    ragazzi datemi una mano vi prego..sono 2 giorni che sto su sta funzione...
    appena qualcosa non gli piace, lseek mi butta la dimensione del file a 8GB come diavolo fa? lo fa soprattutto quando metto un offset negativo che parte dalla fine del file!!!
    possibile che non funzioni?!?!?!?

  3. #3
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <fcntl.h>
    #include <errno.h>
    
    #define TEXT_SIZE 128
    
    int main(void){
    
    	int us;
    	char text[TEXT_SIZE];
    
    	memset(text, 0, TEXT_SIZE);
    	strncpy(text, "ciao\n", TEXT_SIZE - 1);
    
    	if((us = open("SharkServer/users.sxs", O_RDWR|O_CREAT, 0666)) == -1){
    
    		perror("open");
    		exit(EXIT_FAILURE);
    
    	}
    
    	if(lseek(us, 2, SEEK_SET) == -1){
    
    		perror("lseek");
    		exit(EXIT_FAILURE);
    
    	}
    
    	/*Devi scrivere soltanto 5 bytes non 128*/
    	if(write(us, text, strlen(text)) == -1){
    
    		perror("write");
    		exit(EXIT_FAILURE);
    
    	}
    	
    	close(us);
    
    	return EXIT_SUCCESS;
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.