nunolevezinho Posted June 14, 2013 at 11:13 PM Report #513064 Posted June 14, 2013 at 11:13 PM (edited) Tenho um programa que envia comandos a um servidor e esse servidor responde de volta para o cliente. Normalmente as respostas são frases curtas, mas agora tentei enviar vária frases (respostas) e para isso tiver de fazer um ciclo while no cliente. O problema é que o cliente nunca para de ler do pipe, mesmo que o tenha fechado do lado do servidor. Cliente while(read(c_fifo_fd, & resp, sizeof(resp)) != 0) { printf("[sERVER]: %s \n", resp.palavra); } Servidor case 5: sprintf(c_fifo_fname, CLIENT_FIFO, perg.pid_cliente); c_fifo_fd = open(c_fifo_fname, O_WRONLY | O_NONBLOCK); while (fscanf(oldFlightsFile, "%s %s %s %s %s", id, origem, destino, seats, dia) != EOF) { sprintf(resp.palavra, "Voo %s de %s para %s com %s pessoas ocorreu no dia %s.", id, origem, destino, seats, dia); write(c_fifo_fd, & resp, sizeof(resp)); } fclose(oldFlightsFile); break; // ...código... // sprintf(resp.palavra, "Fim do Comando"); sprintf(c_fifo_fname, CLIENT_FIFO, perg.pid_cliente); c_fifo_fd = open(c_fifo_fname, O_WRONLY | O_NONBLOCK); write(c_fifo_fd, & resp, sizeof(resp)); close(c_fifo_fd); E já agora existe outra maneira de mandar várias frases numa só resposta sem ter de enviar várias respostas ? Edited June 15, 2013 at 11:07 AM by nunolevezinho
pmg Posted June 15, 2013 at 10:36 AM Report #513091 Posted June 15, 2013 at 10:36 AM (edited) Informacao do manual: RETURN VALUE Upon successful completion, these functions shall return a non-negative integer indicating the number of bytes actually read. Otherwise, the functions shall return -1 and set errno to indicate the error. em caso de erro (valor devolvido igual a -1) o teu programa continua a processar o stream. Edited June 15, 2013 at 10:37 AM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
nunolevezinho Posted June 15, 2013 at 11:04 AM Author Report #513094 Posted June 15, 2013 at 11:04 AM (edited) Mesmo mudando o while para != (-1), o read está sempre a retornar 1, parece que o servidor não está a fazer close correctamente, o que é estranho porque se eu fizer um pedido noutro cliente que não tenha aquele ciclo while read, funciona bem. EDIT: Resolvido! Tinha o Open do pipe do cliente fora do ciclo. (no lado do cliente) Edited June 15, 2013 at 12:09 PM by nunolevezinho
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now