Pagina 1 di 1

spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 22:48
da gian2991
buonasera,
ho un problema con un programma, in pratica io ho n file di testo così chiamati: file1.txt,file2,txt....
io devo chiedere all'utente quanti processi simulare, ogni processo legge il proprio file(processo1->file1.txt, processo2->file2.txt...)
il problema è che non riesco a realizzare questa cosa,
avevo provato cosi

Codice: Seleziona tutto

for(i=0;i<nodesNumber;i++){
		sprintf(file,"file%i.txt",i+1);
	}
il problema è che mi prende la stringa file2.txt, non mi prende il contenuto del file, e non riempie l'array di char buf0 man mano, ma sovrascrive quello che trova prima.
come potrei fare? tenendo conto che devo usare solo system calls e solo la sprintf mi era concessa

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 22:54
da Zoff
Per leggere un file devi usare fopen() e fread().

Ecco un esempio:

Codice: Seleziona tutto

#include <stdio.h>

int main()
{
   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

   return 0;
}

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 22:58
da gian2991
Il mio problema a però è mettere tutto in un ciclo per poterlo fare con n file, a farlo con un file riesco

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 23:00
da gian2991
Poi, correggimi se sbaglio ma la fopen non è una system calls

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 23:10
da Zoff
se devi usare solo system calls allora devi usare open() e read().

Codice: Seleziona tutto

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#define N_FILE 5
#define MAX_FILE_SIZE 1024

int main()
{
	int i, fp;
	char filename[20];
	char contents[N_FILE][MAX_FILE_SIZE];

   for( i=0; i<N_FILE; i++){
		sprintf(filename,"/tmp/file%d.txt",i);
		fp = open(filename, O_RDONLY);
		read(fp, contents[i], MAX_FILE_SIZE);
		close(fp);
	}
   for( i=0; i<N_FILE; i++){
		printf("content[%d] = '%s'\n",i,contents[i]);
	}

	return 0;
}

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 23:21
da gian2991
grazie mille funziona, però un'ultima cosa:

Codice: Seleziona tutto

for(i=0;i<nodesNumber;i++){
      		sprintf(filename,"file%d.txt",i+1);
      		if((fd_in=open(filename,O_RDONLY,0644))==-1);
			write(2,"OPEN: -1",sizeof(char)*8);
      		read(fd_in,contents[i],128);
      		close(fd_in);
   	}
   	for(i=0;i<nodesNumber;i++){
      		printf("content[%d] = '%s'\n",i,contents[i]);
   	}
la open mi ritorna -1, però il programma sembra funzionare

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 23:26
da Zoff
Hai messo il ; nella riga dell'if invece delle graffe

Re: spostare contenuto file in array di char C

Inviato: martedì 9 giugno 2015, 23:26
da gian2991
oh scusa errore mio non ho visto il ; dopo l'if