Programma write read non funzionante

di il
2 risposte

Programma write read non funzionante

Ciao a tutti ,
non ci credo manco io, ma mi sono incartato in un programma facilissimo

Volevo capire meglio il funzionamento di write/read perchè voglio raggiungere questo obiettivo:
"scrivere su un file n messaggi e leggere dallo stesso file un messaggio alla volta senza conoscerne la dimensione"

Quindi stavo cercando di capire se la read si bloccasse sullo \n.
Ma non riesco a far funzionare neanche questo semplicissimo programma qui sotto XD.
Qualcuno mi potrebbe dare una mano?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

#include <string.h>
#include <errno.h>

#define BUFS 1024

int main (void){
	int fd, n, i;
	char bufwrite[BUFS+1], bufread[BUFS+1];

	if ((fd = open ("data.txt", O_RDWR | O_CREAT, 0666)) == -1){
		fprintf(stderr, "Can't open data: %s\n", strerror (errno));
		return 1;
	}
	
	strcpy(bufwrite, "prova");
	write(fd, bufwrite, 6);
	
	n = read(fd, bufread, BUFS);
	if(n > 0) write(1, bufread, n);
	
	close(fd);
	unlink("data.txt");
  return 0;
}
ps: se mi potete consigliare anche su come risolvere il mio principale problema ve ne sarei molto grato.

Grazie

2 Risposte

  • Re: Programma write read non funzionante

    Ciao
    La read e la write non considerano il carattere \n. Queste due funzioni sono usate per la scrittura su file di dati in formato binario.
    Se devi leggere il carattere '\n' allora deduco che devi gestire file in formato testo.
    Di seguito ti ho scritto un piccolo programmino che non so se può esserti utile.

    /*******************************************************************/
    #include <stdio.h>
    #include <stdlib.h>

    int main() {

    FILE *fp;
    char buff[1024];

    /* Apre file in scrittura (attenzione se il file già */
    /* esiste viene cancellato il contenuto) */
    fp = fopen("pippo.txt", "wb");
    if (fp == NULL) {
    printf("Errore apertura file in scrittura\n");
    exit(-1);
    }

    /* Scrive nel file tre righe terminate con \n*/
    fprintf (fp, "%s", "sono stringa1 11111111\n");
    fprintf (fp, "%s", "sono stringa2 222222222222222222\n");
    fprintf (fp, "%s", "sono stringa3 333333333333333333333333333333333\n");

    /* Chiude il file */
    fclose(fp);

    /* Apre file in lettura */
    fp = fopen("pippo.txt", "rb");
    if (fp == NULL) {
    printf("Errore apertura file in lettura\n");
    exit(-1);
    }

    /* Legge tutto il file una riga per volta */
    while (fgets(buff, 1024, fp) != NULL) {
    /* scrive a video la riga letta */
    printf("%s", buff);
    }

    /* Chiude il file */
    fclose(fp);

    exit(0);

    }
  • Re: Programma write read non funzionante

    No non è quello che cercavo.
    Sto facendo un sistema client-server con comunicazione attraverso socket.
    Più client scrivono sulla stessa socket e dalle specifiche devo usare i comandi write e read.
    Quando il server esegue la read sulla socket preleva "in un colpo solo" tutti i messaggi presenti su di essa. Invece io voglio che prelevi solo un singolo messaggio.
    Il problema però è che a causa delle specifiche devo eseguire una sola write per scrivere il messaggio e una sola read per leggerlo.
    Quindi non posso prima leggere la dimensione del messaggio per poi leggerlo.

    Devo riuscire quindi attraverso la read a non leggere tutti i messaggi presenti ma solo quello "in testa".

    Vi prego aiutatemi, sono un po' disperato XD
Devi accedere o registrarti per scrivere nel forum
2 risposte