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

    [C] Leggere file di testo con la read

    Ciao a tutti, devo fare un programma con sole system calls.

    Il mio obiettivo è leggere un file così composto ad esempio

    0 3
    1 2
    0 5
    4 3
    4
    0 3
    0 5
    2
    4 9

    il file non so quanto è lungo, non so quanti campi da 2 caratteri e dauno ci sono.

    Devo leggere il file riga per riga e distinguere se ci sono 2 o 1 campo.

    mi sapete aiutare sto diventando matto.

    (solo la read)

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Bufferizzati tot byte alla volta e lavora direttamente sul buffer facendo un po' di parsing. Ti basta trovare i '\n' per identificare i fine linea, a quel punto vedi se prima c'è un solo numero o due. Ovviamente non leggere solo 3-4 caratteri alla volta altrimenti fai un casino di syscalls.
    every day above ground is a good one

  3. #3
    Ecco il codice che ho fatto..

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/wait.h>
    #include <errno.h>
    #include <time.h>
    #include "mylib.h"
    
    
    #define STDIN 1
    #define STDOUT 0
    #define BUFSIZE 512
    
    int main(){
    
    	char buf[BUFSIZE];
    	
    	int fd;
    
    	//Apertura File In Lettura
    	if(fd=open("config.dat","O_RDONLY") == -1){
    		perror("Errore nell'apertura del file");
    	}
    	
    	
    	//Lettura del file
    	if(read(fd,buf,BUFSIZE) == -1){
    		perror("Errore Nella Lettura");
    	}
    		
    	
    	
    	//Chiusura File
    	if(close(fd) == -1){
    		perror("Errore Nella chiusura del file");
    	}
    }
    Il problema è che resta In attesa di un carattere quando mando in esecuzione il programma.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Attenzione a quello che scrivi: con questo

    codice:
    (fd=open("config.dat","O_RDONLY") == -1)
    a fd stai assegnando il valore booleano di open(...) == -1, questo perché l'operatore di uguaglianza == ha precedenza su quello di assegnazione =. Inoltre O_RDONLY è una costante simbolica, non va indicata come stringa, quindi elimina quei doppi apici.

    Quando fai assegnazioni e confronti nei costrutti if() utilizza *sempre* le parentesi per "isolare" l'assegnazione, altrimenti errori come questi ti capiteranno spesso e non sono mai facilissimi da individuare (a volte comunque con opportune opzioni di compilazione viene sollevato un warning su certe espressioni).
    every day above ground is a good one

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.