Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86

    [C] distinzione read(socket) da read(file)

    Come da titolo come faccio a dire al compilatore in quale momento deve usare una read e quando l'altra???

    Ad esempio ho questo pezzo di codice:

    codice:
    while(1) {
    		if ((n = read(sockd, line, MAXLINE)) == 0)  //read socket
    			return; /* il client ha chiuso la connessione e inviato EOF */
    		printf("%s__\n",line);
    		if(file = open(line,O_RDONLY)!=-1) {
    			printf("Opening file\n");
     			exit(1);
    		}
    		while(read(file,buf,MAXBUFFLEN)>0) {  // read file
    			printf("Reading frome file\n");
    			if (write(sockd, buf, MAXBUFFLEN) != n) {
    				fprintf(stderr, "errore in write");
    				exit(1);
    			}      
    		}
    	}


    Grazie

  2. #2

    Re: [C] distinzione read(socket) da read(file)

    La read che utilizzi è una chiamata di sistema quindi è sempre la solita funzione che però chiami con parametri diversi. Cosa intendi dire per dire al compilatore quale read usare?

  3. #3
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    codice:
    		if(file = open(line,O_RDONLY)!=-1) {
    			printf("Opening file\n");
     			exit(1);
    		}
    Questo passaggio mi sembra strano: perché esci dal programma se il file descriptor ritornato dalla open è valido?

    La risposta alla tua domanda è: dal momento che il tuo programma è sequenziale, l'ordine è quello che hai impostato durante la stesura del programma: se vuoi cambiarlo basta che inverti le posizioni delle read interessate.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86

    Re: Re: [C] distinzione read(socket) da read(file)

    Originariamente inviato da murder eyes
    La read che utilizzi è una chiamata di sistema quindi è sempre la solita funzione che però chiami con parametri diversi. Cosa intendi dire per dire al compilatore quale read usare?
    OOps colpa mia!!! Avevo letto male

    Credevo che nella librearia sys/socket.h ci fosse una funzione open....invece usa quella di sistema....

    Cmq risolto questo primo dubbio...come faccio a trasferire un qualsiasi file tramite socket??

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    Originariamente inviato da ibykos
    Questo passaggio mi sembra strano: perché esci dal programma se il file descriptor ritornato dalla open è valido?
    Sto facendo delle prove....

    Cmq come faccio a trasferire un file tramite socket???? Non riesco a trovare un esempio stupidissimo in rete

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    Server:
    codice:
    [...]
    
    void str_srv_echo(int sockd)
    {
    	int	n,file,ff;
    	char	line[MAXLINE];
    	char buf[MAXBUFFLEN+1];
    	
    	while(1) {
    		if ((n = recv(sockd, line, MAXLINE,0)) == 0)
    			return; /* il client ha chiuso la connessione e inviato EOF */
    		printf("%s__\n",line);
    		if(file = open(line,O_RDONLY)==-1) {
    			printf("[%u] Error Opening file\n",file);
    // 			exit(1);
    		}
    		else printf("[%u] Opening file\n",file);
    		
    		while(ff=read(file,buf,MAXBUFFLEN)>0) {
    			printf("Reading frome file\n");
    			if (send(sockd, buf, ff,0) != n) {
    				fprintf(stderr, "errore in write");
    				exit(1);
    			}      
    		}
    	}
    }
    Client:
    codice:
    [...]
    void str_cli_echo(char* file, int sockfd) {
    	int fout,n;
    	char buf[MAXBUFFLEN+1];
    	
    	
    	if(write(sockfd,file,MAXBUFFLEN)<0) {
    		perror("Errore in write");
    		exit(1);
    	}
    	
    	if((fout=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) == -1) {
    		perror("open output");
    		exit(1);
    	}
    	
    	while((n=read(sockfd,buf,MAXBUFFLEN)) > 0) {
    		if(write(fout,buf,n) < n) {
    			perror("open output");
    			exit(1);
    		}	
    	}
    	if(n < 0) {
    		perror("read");
    		exit(1);
    	}
    }
    Sicuramente c'è qualcosa che non va!! Ho lanciato il prog ma non mi trasferisce nessun file!! Se non esiste lo crea ma non ci scrive nulla!!

    Suggerimenti??

  7. #7
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    La programmazione di rete è particolarmente delicata, per cui consiglio di leggere prima "Unix Network programming" di R. W. Stevens e successivamente scrivere un FTP.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    Si lo sto leggendo, studiando, sfogliando, ma forse ho la testa dura e non riesco a trovare nulla che mi possa servire. So come funziona un socket e tutto ciò che c'è sotto ma non riesco a scrivere uno stupidissimo programma che mi trasferisca un file da un peer ad un altro!!! Vi ho messo il codice, se c'è qualcuno che può aiutarmi facendomi capire dove sbaglio, bene



    EDIT: mi sto studiando pure il Krishnamurty!!!

    PS: Non voglio fare un FTP ma voglio solo trasferire un file e basta!!!!!!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    86
    Uppete!!

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.