• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rorsch

[Resolvido] Enviar o Process ID concatenado no fim de uma string para um socket

10 mensagens neste tópico

while (fgets(sendline, MAXLINE, fp) != NULL) {         

     n = strlen(sendline);

     if (writen(sockfd, sendline, n) != n)

           err_dump("str_cli: writen error on socket");

(...)

Como posso fazer para que ele adicione o pid no fim do array sendline (chars)? A ideia era eu escrever A 5000 e ele tornar o array sendline em "A 5000 432", onde 432 seria o pid.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar a função strcat. Tens é que ter cuidado com a dimensão dos arrays.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas o getpid() devolve-me um inteiro não é? seria algo deste género:

sprintf(sendline, " %u", getpid());

Mas assim não funciona

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz o sprintf para a parte "não usada" de sendline.

while (fgets(sendline, MAXLINE, fp) != NULL) {         
     n = strlen(sendline);

     /* verifica que tens tamanho em sendline! */
     sprintf(sendline + n - 1, " %u", getpid());

     if (writen(sockfd, sendline, n) != n)
           err_dump("str_cli: writen error on socket");
(...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo assim não funciona. Tenho isto assim:

while (fgets(sendline, MAXLINE, fp) != NULL) {       

    n = strlen(sendline);

    sprintf(sendline + n - 1, " %u", getpid());

    if (writen(sockfd, sendline, strlen(sendline)) != strlen(sendline))

          err_dump("str_cli: writen error on socket");

(...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O servidor já não responde, o sendline não está a ir com o formato "A 5000 432" onde 432 é o pid

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O sendline, depois do fgets, acaba com um '\n'?

Eu parti do princípio que sim, por isso é que pus o sprintf e escrever em sendline + n - 1.

O programa seguinte tem como output "A 5000 32185"

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void) {
  char sendline[100] = "A 5000\n";
  int n = (int)strlen(sendline);
  sprintf(sendline + n - 1, " %d", getpid());
  printf("%s\n", sendline);
  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao código deixado pelo pmg só falta o \n para funcionar. Muito obrigado :biggrin:

n = (int)strlen(sendline);
sprintf(sendline + n - 1, " %d\n", getpid());
write(1, sendline, strlen(sendline));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora