Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Rorsch

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

Mensagens Recomendadas

Rorsch    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
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");
(...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rorsch    0
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");

(...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rorsch    0
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));

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade