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

    [C] Read (kernel Linux)

    Non mi è chiara una cosa sulla read (lettura da file), che è una chiamata al kernel su Linux. Se ho un file tipo

    ciao come
    stai

    e gli dico di leggere 15 caratteri, mi va a capo e continua a leggere finchè non legge proprio 15 caratteri. Come faccio per farlo smettere a fine riga?
    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  2. #2
    Usa la funzione gets();

    ---------------
    FILE *fp;
    char buffer[NUM_CAR];
    int NUM_CAR = 80;

    gets (buffer, NUM_CAR, fp);

    ------------------------

    Se nel tuo file c'e' scritto

    ciao
    prova

    gets leggera' solo ciao (anche se gli hai impostato gli 80 caratteri)
    (gets legge una linea.)

  3. #3
    Sì lo so ma devo usare read. Le altre le conosco volevo sapere se con read si può fare. Mi sa che l'unica è scansionare la stringa letta e togliere i caratteri che non voglio...
    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  4. #4
    Potresti mettere in un buffer o far stampare (a seconda di quello che devi fare) la stringa...

    copy nel buffer la stringa fino a che non trova \r\n

  5. #5
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    fai un ciclo leggendo un carattere alla volta e controllandolo ogni volta. essendo una syscall non è evoluta, fornisce solo l'interfaccia base alla lettura del file.

    for (cx=0;cx<=15;cx++) {
    read(sorgente,&destinazione[cx],sizeof(char));
    if (destinazione[cx]='\n') break;
    }
    Drug misuse is not a disease, it is a decision, like the decision to step out in front of a moving car. [...] In this particular life-style the motto is "be happy now because tomorrow you are dying", but the dying begins almost at once, and the happiness is a memory.

  6. #6
    Ho fatto ma non va...

    char buff[40];
    char stringa[40];
    int serviti=0,dietro;
    if(lseek(Log,0,SEEK_SET)==-1)printf("\n non riavvolgo");
    int i;

    for (i=0;i<=40;i++) {
    read(Log,&buff[i],sizeof(char));
    if (buff[i]='\n') break;
    }

    printf("DA LOG HO LETTO %s",buff);

    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  7. #7
    Ho cambiato il for in

    for (i=0;i<=40;i++) {
    read(Log,&buff[i],sizeof(char[1]));
    if (isspace(buff[i])!=0) break;
    }

    e funziona, ma appena trovo uno spazio isspace torna 0 e si ferma. Io voglio solo che si fermi se trova \n.
    Stranamente col codice di pdpmpd non va, con isspace va ma dà ovviamente questo problema se trovo ' '.

    Se metto

    for (i=0;i<40;i++) {
    read(Log,&buff[i],sizeof(char[1]));
    if (isspace(buff[i]) != 0 && buff[i]=='\n') break;
    }

    VA! Ma non si spiega perchè il codice di pdpmpd non va!

    :master:
    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  8. #8
    Utente di HTML.it L'avatar di pdpmpd
    Registrato dal
    Jan 2003
    Messaggi
    448
    scusa, ho fatto uno stupido errore nell'if.
    la condizione è testata con l'assegnazione (='\n'), doveva essere =='\n'

    Drug misuse is not a disease, it is a decision, like the decision to step out in front of a moving car. [...] In this particular life-style the motto is "be happy now because tomorrow you are dying", but the dying begins almost at once, and the happiness is a memory.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.