execl () argumentos [closed]

1

Como posso usar a função execl () com argumentos que são inseridos por um usuário em C?

Eu posso fazer isso com execv(args[0],args) . Como posso converter execv () para execl ()?

obrigado.

    
por Duygu Yılmaz 09.12.2016 / 18:02

1 resposta

1

execv e execl fazem exatamente a mesma coisa, com a diferença que execl é destinado ao uso quando você sabe antecipadamente o número de argumentos da linha de comando enquanto execv permite que o número de argumentos seja determinado dinamicamente.

A função mais geral é execv ; execl é uma espécie de abreviação quando o número de argumentos é conhecido e permite ao programador evitar a construção da matriz argv[] .

De qualquer forma, para responder a pergunta conforme solicitado: você deve saber antecipadamente o número de argumentos máximo que será passado para o programa para ser exec d. Se você sabe o número máximo de argumentos, então você pode preparar antecipadamente uma chamada para execl desenrolando a matriz de argumentos.

Suponha que você tenha:

char * exec_argv [21];
char * exec_pathname;

As duas chamadas seguintes são equivalentes para qualquer conteúdo legal da matriz de argumentos exec_argv[] :

execv (exec_pathname, exec_argv);

execl (exec_pathname, 
  exec_argv [0], exec_argv [1], exec_argv [2], exec_argv [3],
  exec_argv [4], exec_argv [5], exec_argv [6], exec_argv [7],
  exec_argv [8], exec_argv [9], exec_argv [10], exec_argv [11], 
  exec_argv [12], exec_argv [13], exec_argv [14], exec_argv [15],
  exec_argv [16], exec_argv [17], exec_argv [18], exec_argv [19],
  NULL
);

(O último argumento de execl é NULL em vez de exec_argv[20] porque gcc irá procurá-lo se invocado com -Wall ; já que deve ser um NULL algures em exec_args[] isto não introduz qualquer diferença nos efeitos das duas chamadas de função.)

    
por AlexP 09.12.2016 / 20:04