Problema apertura di + file

di il
1 risposte

Problema apertura di + file

Guardate il problema è questo:
server:
codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>
#include "lib.h"

#define   BUFFER_SIZE   1024
#define   PORT      3666
#define   BACKLOG      5
#define   MAXLINE    1024

int main(void)
{
   int fd,fd2, socket_list, socket_conn, nread;
   struct sockaddr_in server;
   char buffer[BUFFER_SIZE],bufferStr[BUFFER_SIZE],buff[BUFFER_SIZE];
pid_t pid;
	int i,j;
   /* creazione di un socket per accettare connessioni */
   socket_list = Socket(AF_INET, SOCK_STREAM, 0);
   /* definizione di dominio, porta e indirizzo del server */
   server.sin_family = AF_INET;
   server.sin_port = htons(PORT);
   server.sin_addr.s_addr = htonl(INADDR_ANY);

   /* assegnazione dell'indirizzo al socket */
   Bind(socket_list, (struct sockaddr *) &server, sizeof(server));

   /* il server si mette in ascolto di eventuali richieste */
   Listen(socket_list, BACKLOG);
  /* viene accettata (e poi servita) una connessione */

 while(1)
	{ 
	socket_conn = Accept(socket_list, NULL,NULL) ;
	 /* fork to handle connection */
	 if((pid= fork())<0)
		{
		 perror (" fork error ");
		 exit ( -1);
		}
	 if(pid==0)
		{ /* child */
		 close (socket_list);
		  while((nread=read(socket_conn,bufferStr,MAXLINE))>0)
		 {
			bufferStr[nread-1]='\0';
			chdir(bufferStr);
		for(i=100;i<=147;i++)//il problema è qui come faccio a far aprire il file nominato dal valore di i
		{
			fd = open(i, O_RDONLY);
			   if (fd < 0) {
			      fprintf(stderr, "errore open(): %s\n", strerror(errno));
			      exit(errno);
			   }

			   while ((nread = read(fd, buffer, sizeof(buffer))) != 0) {
			      write(socket_conn, buffer, nread);
			   }	exit(1);
		 } }
		}
	 else 
		{ /* parent */
		 close (socket_conn);
		}
	}
   exit(0);
}
c'è il commento dove nn riesco a d andare avanti.
mi basterebbe capire come fare ad aprire questi file(creati con split) per poi poterli passare uno ad uno al client

Edit skynet: inserimento code tags.

1 Risposte

  • Re: Problema apertura di + file

    Praticamente una conversione di formato... usa sprintf :
    
    int sprintf ( char * str, const char * format, ... );
    
    Personalmente preferisco la snprintf per motivi di sicurezza. E' identica con l'aggiunta della dimensione massima del buffer da riempire. Esempio:
    
     /** 
    	qui ti ho messo 4 bye per la dimensione che vedo in i (3+1).
    	se hai un prefix &| postfix da aggiungere regolati con la
    	dimensione appropriata
      */
      char filename[4]; 
      for(i=100;i<=147;i++)//il problema è qui -- cut --
      {
    	snprintf (filename,sizeof(filename),"%d",i);
    	fd = open(filename, O_RDONLY);
    	if (fd < 0) {
    	  fprintf(stderr, "errore open() %s: %s\n",filename,strerror(errno));
    	  exit(errno);
    	}
       }
    
    Poi, prossimamente mi spiegherai il motivo dello split, ma questo è un altro discorso...

    Ciao

    PS. Non aprire + post con lo stesso argomento. Usa il tag [code ] .... per postare codice
Devi accedere o registrarti per scrivere nel forum
1 risposte