É std:: sistema ou exec melhor prática?

eu tenho um programa que chama uma ferramenta de script shell que eu fiz que passa por um diretório e fecha arquivos, obtém o valor de checksum e chama algumas outras ferramentas para carregar os arquivos. A operação demora entre 3 e 4 minutos.

Eu chamo o guião assim:
int result = system("/bin/sh /path/to/my/script");

eu também tenho o mesmo resultado usando a família de funções exec():

int child = fork();
if(child == 0) {
    execl( "/bin/sh", "sh", "/path/to/my/script", (char*)0 );
}

Eu sei que com exec você pode redireccionar o resultado para o programa pai para que ele possa ler o resultado da linha de comandos ferramentas, mas para além disso quando deve utilizar system em vez de exec?

 3
c++
Author: Rakete1111, 2017-04-19

2 answers

Ignorando por enquanto que o uso de {[[0]} é portátil enquanto o uso de exec família de funções não é portátil...

Quando combina a utilização de exec família de funções com outras funções POSIX, tais como:pipe, dup, wait, você tem muito mais controle sobre como passar dados entre o processo pai e o processo filho.

Quando você não precisa de nenhum desses controles, ou seja, você só quer executar um comando, então usar {[[0]} é preferível, IMO.

 2
Author: R Sahu, 2017-04-19 17:08:59

O primeiro system chamado em sua pergunta vai fazer o mesmo, o que você está fazendo no próximo pedaço de código (fork e execl) {[[4]}

Da documentação:

 The system() library function uses fork(2) to create a child process
 that executes the shell command specified in command using execl(3)

Http://man7.org/linux/man-pages/man3/system.3.html

 1
Author: Naidu, 2017-04-19 17:02:26