Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230

    argc e argv

    Ciao ragazzi.
    ho scritto un sender UDP che invia file.
    Vorrei passargli quando lo eseguo l'indirizzo IP a cui inviare il file e il percorso dove si trova il file.
    esempio in linux da shell ./sender 10.0.0.201 /home/myfolfder/pippo.txt
    So che si può usare il vettore argv, ho provato a farlo con il mio programma ma ottengo segmentation fault. Se inserissi direttamente nel codice l'ind IP e il percorso, il programma funzionerebbe correttamente
    il listato è il seguente:
    Grazie

    Codice PHP:
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <errno.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #define PORT 5500
    #define BUFFSIZE 4096
    #define MIN(_x_,_y_)(((_x_)<(_y_) )? (_x_):(_y_))
    #define DEBUG 0


    int main (int argccharargv){
    printf("argc %d"argc);

      if (
    argc != 2) {
        
    fprintf(stderr,"usage: IPdestination path \n");
       exit(
    1);
    }

      
    FILEfin;
      
    int sd/*socket descriptor*/
      
    struct sockaddr_in dest;
      
    char buf[BUFFSIZE];  /*buffer for socket*/
      
    unsigned long lengthfile_sizeencoded_file_sizechunk_size;

      
    memset((char *)&dest0sizeof(dest));
      
    dest.sin_family AF_INET;
      
    dest.sin_port htons(PORT);
      
    dest.sin_addr.s_addr inet_addr(argv[1]); /*destination's address*/
     
      
    if ((sd socket(PF_INET,SOCK_DGRAM,0))<0) {
      
    perror("socket creation");
      }
      
    fin fopen(argv[2],"rb");
      if (
    fin != NULL){
          
    fseek(fin,0SEEK_END);
          
    file_size ftell(fin);
    #ifdef DEBUG
    printf("file_size %ld \n",file_size);
    #endif 

          
    fseek(fin,0SEEK_SET);
          
    encoded_file_size htonl(file_size); /*send dim file*/
            
    if(sendto(sd, &encoded_file_sizesizeof(encoded_file_size), 0, (struct sockaddr*)&destsizeof(dest))<0){
           
    perror("send to error");
           }
           for (
    length=0length file_sizelength += chunk_size ){
               
    chunk_size MIN(BUFFSIZEfile_size-length);
               
    fread(bufchunk_size,1fin);  /*Check*/
    #ifdef DEBUG
    printf("chunk_size %ld \n"chunk_size);
    printf("length %ld \n"length);
    #endif

               
    if (chunk_size != sendto(sdbufchunk_size,0,(struct sockaddr*)&destsizeof(dest)))
                  
    perror("Unable to send data");
           }
        
    fclose(fin);
        }else{
        
    printf("Unable to open file");
        }
    if (
    length == file_size){

    printf(" file has been sent successfully \n");

    }
    close(sd);   


  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il prototipo corretto del main è:
    codice:
    int main(int argc, char** argv) {
    }
    argv deve essere un array di stringhe, quindi un array di array di char.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    ok grazie e scusate per la banalità

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.