Usando a chamada de função do sistema para executar um comando shell [closed]

0

Estou tentando criar alguns diretórios e arquivos usando a chamada do sistema. ex)

system("mkdir directory3");

Estou com problemas para começar. Isso é o que eu tenho até agora:

#include <stdio.h>
int main(int argc, const char * argv[])
{
    system(“mkdir dir1”);
    system(“mkdir dir2”);
    system(“mkdir dir3);
    system(touch file1”);
    system(“touch file2”);
    system(“cd dir1”);
    system(“mkdir dir4”);
    system(“cd dir4”);
    system(“touch file4”);
    system(“cd”);    
}

este seria o formato certo para acompanhar? Eu sou novo no Unix, então não tenho certeza se estou fazendo isso corretamente.

    
por sabrinaje 05.02.2017 / 20:38

1 resposta

2

Eu suponho que você testou seu código antes de postar (ou talvez você não tenha feito, já que contém uma citação faltando, o que seria um erro de sintaxe) e descobriu que tudo, exceto os comandos cd , funciona basicamente.

Os comandos cd não funcionarão porque você está chamando um processo externo, alterando seu diretório de trabalho e, em seguida, o comando externo termina imediatamente depois, portanto, o comando não tem nenhum efeito.

Além do fato de que os outros comandos do funcionam, você não deve fazer dessa maneira. Todos os comandos que você está chamando ( mkdir , cd e touch ) podem ser feitos em uma ou duas chamadas de função C (na verdade, chamadas do sistema), portanto não há sentido em incorrer na penalidade de desempenho e segurança de executá-los como comandos externos.

system("mkdir foo") → mkdir("foo", 0777)
system("touch foo") → close(open("foo", O_WRONLY|O_CREAT, 0777))
chdir("foo")

(A verificação de erros é, obviamente, deixada como um exercício para o leitor.)

    
por 05.02.2017 / 20:45