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

processos em background

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por br_viseu, 28 de Maio de 2008. (Respostas: 3; Visualizações: 966)

  1. como fazer pa tirar o caracter & (introduzido para colocar um processo em background) de um comando e dp executa-lo??
     
  2. PrOdG

    PrOdG Power Member

  3. pois!!mas eu tou a fazer uma shell e precisava de codigo!!!tipo s intriduzir ls& ele vai pa background e dp ele tem de executar tirando & automaticamente!!tas a perceber?
     
  4. The_True_Eue

    The_True_Eue Power Member

    Qualquer coisa como:
    Código:
    #include <unistd.h>
    #include <wordexp.h>
    #include <readline/readline.h>
    #include <string.h>
    
    int main(int argc, char** argv)
    {
        // ler um comando
        char* cmd = readline("prompt: ");
    
        // procurar o último ampersand (&)
        char* ampp = strrchr(cmd, '&');
    
        // Verificar se existia um ampersand no comando
        if(ampp)
        {
             // Certificar que depois do último ampersand só tem espaços e/ou tabs
             if(strspn(ampp, "& \t") == strlen(ampp));   // *
             {
                   // "Cortar" a string no ampersand
                   ampp[0] = '\n';
             }
             else
             {
                   fprintf(stderr, "syntax error\n");
             }
    
             // Lançar um processo novo
             if(fork())
             {
                  wordexp_t words;
    
                  // Separar os argumentos
                  wordexp(cmd, &words, 0);
                  // Executar o comando
                  execvp(words.we_wordv[0], words.we_wordv);
             }
             else
             {
                  // Continuar a correr a shell...
             }
        }
        else
        {
             // execução normal
        }
        free(cmd);
        return 0;
    }
    
    Serve?

    Nota: Onde tem o *, tenho uma dúvida se o strspn também conta o '\0' que termina a string. Se sim, tem de ser == strlen(ampp)+1.
    Também falta perto de uma tonelada de verificação de erros.
     

Partilhar esta Página