1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida programação linux

Discussão em 'Programação' iniciada por AssKicker4ever, 12 de Outubro de 2008. (Respostas: 5; Visualizações: 527)

  1. AssKicker4ever

    AssKicker4ever Power Member

    Boas,

    Estou com uma dúvida, preciso de fazer um programa em que preciso de obter os users em linux. Preciso de um processo que faça ps -aux e que separe o resultado por utilizadores, separar por utilizadores já consigo fazer, o problema é obter os utilizadores, há alguma instrução que faça isso, ou então há maneira de guardar o resultado do ps aux para um ficheiro de texto? se alguém me ajudar agradeço.
     
  2. Baderous

    Baderous Banido

    Código:
    ps -aux > file.txt
    Acho que isto resolve.
     
  3. AssKicker4ever

    AssKicker4ever Power Member

    Resulta e vai ser mesmo isto, obrigadão.
     
  4. r3pek

    r3pek Power Member

    explica-me uma coisa, pk não usas as funções do SO em vez de tares a programar à base de execs?!??!

    execs é só em ultimo caso, mas infelizmente mt gente aki no forum faz disso.... :(
     
  5. bsd

    bsd Power Member

    Sou da opinião do r3pek. Porquê depender do programa ps? Se calhar o problema que tens é não saber aonde é que o ps vai buscar essa informação. Nesse caso tens duas hipóteses: ou vais buscar o código fonte do ps e vês aonde é que ele a vai buscar, ou partes do princípio que ele vai buscar isso ao proc file system e fazes man 5 proc.

    Ler do proc filesystem, ou ler do output do ps, não é muito diferente.

    Problema: os ps não vai buscar utilizadores, mas sim processos, e agrupa-os. O que tu queres saber é mais directo se puderes ir buscar logo as sessões que existem (que são os process groups que têm terminal controlador). Eu sei que há uma lista de processos no proc filesystem, toda a gente sabe, é /proc/[numero do processo]/stat ou outra coisa. Agora, lista de grupos de processos não estou a ver, teria de ir ao man, senão tinha que ir ver se está no sysfs.

    Depois, para ler o output do ps, não faz sentido estar a escrever um ficheiro, mais vale mandá-los escrever para um pipe e ler directamente do pipe. Vantagem: o ficheiro nunca chega a aparecer no disco, ou perturbar o acesso ao disco.

    A ideia básica seria:
    Código:
    ...
    int fd[2];
    if (pipe(fd) == -1) /* deu erro, faz qq coisa. */;
    
    pid_t child;
    if ((child = fork()) == -1) /* deu erro */;
    
    if (child == 0) { /* processo filho, vai escrever no pipe. */
       close(fd[0]); /* fecha a ponta de leitura. */
       dup2(fd[1], STDOUT_FILENO); /* faz a ponta de escrita ser o nosso stdout */
       exec(...); /* faz o exec do ps com os argumentos que quiseres. */
    }
    else { /* processo pai, vai ler do pipe. */
       close(fd[1]); /* fecha a ponta de escrita. */
       read(fd[0], buffer, sizeof(buffer)); /* etc... */
       close(fd[0]); /* fecha a outra ponta. */
       waidpid(child, 0, 0); /* espera que o filho morra */
    }
    ...
    
    Se calhar a solução mais simples é esquecer o ps e ler directamente os ficheiros do proc filesystem. É mais fácil.
     
  6. AssKicker4ever

    AssKicker4ever Power Member

    o ps eu tenho de fazer porque faz parte do enunciado, e temos de usar o execl para isso, vou tentar e fazer a cena dos utilizadores com pipes porque fica menos "pedreiro", obrigado pela ajuda a todo o pessoal, depois deixo feedback. fikem bem.
     

Partilhar esta Página