Ir para o conteúdo
Rorsch

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

Mensagens Recomendadas

Rorsch

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.


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rorsch

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

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

Mas assim não funciona


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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");
(...)


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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rorsch

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");

(...)


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rorsch

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


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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;
}


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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rorsch

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));


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.