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

    Chiarimenti Programmazione con system call

    Salve,
    Ragazzi sto seguendo all'università un corso su programmazione linux ma ho un professore che durante le ore di laboratorio scompare dal laboratorio e dice: "fate voi".
    Io per quanto mi riguarda uso già linux da tempo, però sulla programmazione non ho molte esperienze.
    Lo stesso proff, che dovrebbe impararci le basi su linux e farci scrivere dei programmi, usa sul suo portatile una macchina virtuale per far partire Fedora e poi pretende che gli altri la installano XD. Avrei bisogno di qualche aiuto per ulteriori chiarimenti, perchè penso che fra di voi ci sia gente più professionale.

    Mi stavo cimentando nell'uso dell'lseek, cioè una funzione che stabilisce la posizione corrente nel file volendo automentadone la dimensione di quest'ultimo.
    Ora stavo provando a spostarmi di posizione in un file con l'aiuto dell'lseek anche nel caso in cui il file fosse vuoto e eventualmente scriverci qualcosa dallo standard input. Con questa chiamata: lseek(fd,15,SEEK_CUR) in pratica effettua la somma tra 15+SEEK_CUR (posizione corrente) non dovrebbe cmq far posizionare il cursore più avanti di qualche riga?
    Ad Esempio qui perchè non mi fa scrivere qualche riga più avanti?

    codice:
    #include  <sys/types.h>
    
    #include  <sys/stat.h>
    
    #include   <fcntl.h>
    
    #include   <unistd.h>
    
    #include   <stdio.h>
    
    int main(void) {
    
    int c,size,n,fd,buf[90];
    
    if((fd=open("scrittura",O_CREAT| O_RDWR, 0644))<0)
       printf("Errore apertura file");
    size=read(STDIN_FILENO,buf,90);
    if((lseek(fd,10,SEEK_END))<0)
       printf("Errore lseek");
    write(fd,buf,size);
    
    printf("\nla read ha letto:%d\n\n",size-1);
    
    close(fd);
    
    exit(0);
    }
    Se apro il file con O_APPEND posso cambiare la posizione di scrittura con lseek?
    Se apro il file con O_TRUNC mi dovrebbe cancellare tutto il contenuto?
    lseek(fd,10,SEEK_END) ----> quando uso come secondo parametro un valore diverso da 0 nel documento mi stampa caratteri strani come se fossero buchi, ad esempio con il valore 10 mi mette dieci apici davanti alla stringa che ho inserito come input: ^@^@^@^@^@^@^@HTML.it. Perchè fa così? Non dovrebbe semplicemente lasciare scrivere più in la il testo inserito?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ricorda che il linguaggio va specificato nel titolo.

    Modifico io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ragazzi come mai nessuna riposta?

    Cmq ho da porvi questo problema:

    codice:
    //ESERCIZIO:
    //Scrivere da standard input
    
    //Copiare il contenuto del primo file anche nel secondo, ma in maniera inversa
    
    
    
    
    
    #include  <sys/types.h>
    
    #include  <sys/stat.h>
    
    #include   <fcntl.h>
    
    #include   <unistd.h>
    
    #include   <stdio.h>
    
    
    
    
    
    int main()
    
    {
    
    int fd1,fd2,buf[90],n,c;
    
    if((fd1=open("INIZIO.txt", O_CREAT | O_RDWR | O_TRUNC, 0644)) < 0)
       printf("Si è verificato un errore alla prima open");
    if((fd2=open("FINE.txt", O_CREAT | O_RDWR | O_TRUNC, 0644)) <0)
       printf("Si è verificato un errore alla seconda open");
    
    n=read(STDIN_FILENO,buf,90);  //leggo da Standard Input
    write(fd1,buf,n);      //scrivo sul primo file
    n=lseek(fd1,0,SEEK_END); //mi posiziono alla fine del file
    
    while(n>=0){
     read(fd1,&c,1); //leggo un carattere dal file INIZIO.txt
     write(fd2,&c,1); //scrivo un carattere su file FINE.txt
     n=lseek(fd1,-1,SEEK_CUR);
    }
    
    close(fd1);
    close(fd2);
    
    exit(0);
    
    }
    In questo esercizio scrivo in ORIGINE.txt e poi quello scritto in esso lo copio in maniera inversa su FINE.txt. Ora siccome non mi è chiaro l'uso di lseek probabile che ho sbagliato qualcosa nei parametri. Mi date una mano, perfavore?

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.