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.)