copia o arquivo com cat em execl () finction

0

como posso copiar um arquivo com caminho completo e renomeá-lo no programa C usando execl? posso usar esta instrução:

execl("/bin/cat","cat",path_source,">",path_destination,NULL);
    
por Faceopace 30.11.2015 / 18:46

2 respostas

1

O código que você postou parece ter a intenção de imitar o seguinte comando shell:

cat path_source >path_destination

Mas, nesse cenário, > não é um parâmetro para cat ; em vez disso, é interpretado pelo seu shell, que executará cat com um único parâmetro path_source e sua saída padrão conectada a %código%. (Então o seu código C realmente faz path_destination .)

Uma maneira de imitar o que o comando cat path_source '>' path_destination acima faz é construir um string contendo seu comando shell ( cat ) e, em seguida, passe que, usando exec, como um argumento para "cat ... >..." , mas é difícil torná-lo confiável e seguro, se você não sabe ao certo que o arquivo nomes verificam algumas restrições.

Se você simplesmente renomear um arquivo, talvez seja melhor usar função padrão /bin/sh -c de rename em vez disso. Se não, por favor esclarecer sua pergunta.

    
por 30.11.2015 / 18:58
0

Isso soa como uma lição de casa, então estou sendo intencionalmente vago.

Parece que o requisito é imitar o comportamento do shell ao usar o operador de redirecionamento de saída. Você precisaria manipular os descritores de arquivo padrão antes de chamar execl() , de modo que a saída padrão do processo de chamada fosse um descritor de arquivo aberto para o arquivo de saída de destino. Dessa forma, quando o gato grava na saída padrão, o conteúdo irá para o arquivo de destino.

    
por 30.11.2015 / 22:28

Tags