conteudo do ficheiro para fgets em C

The Dealer

Power Member
Estou a tentar fazer uma aplicação cliente servidor.

A aplicação cliente liga-se ao servidor através de:
./client ipaddress port filename

A questão é, numa primeira fase eu tinha o programa a funcionar fazendo um input do nome do ficheiro (ver fprintf mais abaixo em comentario), mas agora quero passar o nome do ficheiro como argumento, mas não estou a conseguir fazer... Não me lembro sinceramente como se faz.. Em baixo está a parte do programa que faz isso, ou deveria fazer. Poderiam-me ajudar? Experimentei por
fgets(buffer,255,fp), mas da-me a informação "erro abrindo o ficheiro", algo que nao compreendo pois nem no código está, e se deixar como está agora, o programa nao avança...

Código:
 if( (fp = fopen(argv[3], "w")) == NULL) // esta é a parte "nova"
    {
    printf("Erro ao criar o ficheiro\n");
    exit(1);
    }
 
    
 //  fprintf(stderr,"Introduze nome do ficheiro a transferir: ");
   
   buffer=(char*)malloc(NOMELEN); 
   bzero(buffer,256); // limpar buffer                       // está e a "velha"
   fgets(buffer,255,stdin);                         // é este stdin que vai buscar a string do ficheiro para depois criar um novo.
   buffer [strlen(buffer)-1] = '\0';   //remover o /n deixado pela funcao fgets
      

   n=sendto(sock,buffer,strlen(buffer),0,(const struct sockaddr *)&server,length);
 
Última edição:
Código:
fp = fopen(argv[3], "w")
Penso que o teu problema é este. Estás a abrir o ficheiro para escrita ("w"), e no entanto estás a tentar fazer um fgets, que é leitura.

Não porque é assim: o servidor envia o conteudo de um ficheiro pelo buffer. E eu vou criar um ficheiro para lá escrever o conteudo (algo que faço mais a frente).

Se colocar essa instrucção fgets(buffer,255,fp), dá-me "erro abrindo ficheiro". Penso que essa deve ser uma informação predefinida do GNU, pois não tenho essa verificação em lado nenhum. (tenho outra mas não essa)
 
Se colocar essa instrucção fgets(buffer,255,fp), dá-me "erro abrindo ficheiro". Penso que essa deve ser uma informação predefinida do GNU, pois não tenho essa verificação em lado nenhum. (tenho outra mas não essa)

Vamos olhar para o teu fgets. fgets(buffer,255,fp) - o que é, aqui, o fp? É isto?

Código:
fp = fopen(argv[3], "w")
Se não for, mostra-me o que é o "fp" quando tu chegas ao fgets. O fgets só faz sentido em ficheiros abertos para leitura, e tu nunca postaste código que indicasse um ficheiro aberto para leitura, percebes a minha confusão?
 
Última edição:
Back
Topo