nunolevezinho Posted June 13, 2013 at 03:24 PM Report #512685 Posted June 13, 2013 at 03:24 PM (edited) Estou a tentar enviar uma frase / comando de um cliente para um servidor e interpretar esse comando no servidor, o problema é que só consigo enviar o "tipo" de comando e não consigo enviar os argumentos. request.h typedef struct { pid_t pid_cliente; int status; char command[TAM_MAX]; char password[TAM_MAX]; int client_type; } request; ClientSide printf("[ADMIN]: "); scanf("%s[^\n]", buffer); //reads command printf("Sending -> '%s'\n", buffer); strcpy(request.command, buffer, MAX_SIZE-1) //MAX_SIZE = 50 write(server_fifo, & request, sizeof(request)); ServerSide read_res = read(server_fifo, & request, sizeof(request)); if (read_res < sizeof(request)) { if (!strncasecmp("exit",(char *) & request,4)) return; else { fprintf(stderr, "\nMessage Error!"); return; } } token = strtok(request.command, " "); //reads command printf("Command -> '%s'\n", token) .. interprets wich command to do .. token = strtok(NULL, " "); //reads command argument printf("Argument -> '%s'\n", token); Input: addcity lisbon Output: Sending -> addcity Sending -> lisbon Command -> addcity Argument -> (NULL) EDIT: Resolvido, estava a fazer mal o scanf. scanf(” %[^\n]s”, buffer); Edited June 13, 2013 at 03:57 PM by nunolevezinho
pmg Posted June 13, 2013 at 03:45 PM Report #512693 Posted June 13, 2013 at 03:45 PM Usa fgets() para obter input linha-a-linha. Depois, se necessario, usa sscanf() para tratar o input (ou outra forma mais apropriada consoante as necessidades). 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!
brunoais Posted June 13, 2013 at 03:48 PM Report #512694 Posted June 13, 2013 at 03:48 PM ClientSide scanf("%s[^\n]", buffer); //reads command Hum... será que seria: scanf("%[^\n]", buffer); //reads command De qq modo, se queres a funcionalidade do fgets(), pq não usar o fgets()? "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
nunolevezinho Posted June 13, 2013 at 04:01 PM Author Report #512697 Posted June 13, 2013 at 04:01 PM Pensei em usar, scanf(” %[^\n]s”, buffer); Acham que deva usar o fgets sendo assim?
brunoais Posted June 14, 2013 at 07:40 AM Report #512813 Posted June 14, 2013 at 07:40 AM Pensa um bom bocado e apenderar tudo. O que achas? O que é que há de vantagens em relação a usar 1 e usar outro? (tens que pensar!) "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
nunolevezinho Posted June 14, 2013 at 11:47 AM Author Report #512894 Posted June 14, 2013 at 11:47 AM char * fgets ( char * str, int num, FILE * stream ); O fgets lê o que eu inserir até ler (num-1) caracteres ou entrar um '\n'. int scanf ( const char * format, ... ); No meu caso o scanf lê os espaços e pára ao encontrar '\n'. A meu ver a maior diferença é que posso definir um tamanho máximo para os comandos com o fgets
PlayMa256 Posted June 14, 2013 at 03:15 PM Report #512951 Posted June 14, 2013 at 03:15 PM pode utilizar o scanf tbm, mas como alguns ja falaram, ele tem o problema de buffer que fica o \n antes do proximo scanf. Em vez de pedir pra ele inserir o \n do jeito que fez, faça de uma maneira mais simples, que foi o que funcionou pra mim, mas tbm, podes utilizar o fgets que ja faz a inserção direta pro vetor e tambem nao vai ter problemas com o \n no final. Mas se quer continuar a utilizar o scanf, faça da seguinte maneira scanf("%s", pra onde vai); getchar(); // como disse, é uma maneira paliativa pra se arrumar esse problema, mas é preferivel que utilize o fgets. scanf("%s", segundo argumento); Como ja disse, havia tentado da maneira que vc fez, mas tbm nao tinha dado certo, desta maneira que fiz pode nao ser a certa, mas funciona.
nunolevezinho Posted June 14, 2013 at 04:24 PM Author Report #512993 Posted June 14, 2013 at 04:24 PM Acabei por mudar para fgets, de qualquer modo, muito obrigado pela explicação 😉
PlayMa256 Posted June 14, 2013 at 07:50 PM Report #513025 Posted June 14, 2013 at 07:50 PM por nada! o engraçado, o problema dos outros eu resolvo, o meu nao 😄
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