processos em background

backspace_key.jpg
 
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?
 
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.
 
Back
Topo