paulo1205
(usa Ubuntu)
Enviado em 30/11/2012 - 15:46h
Mas, gokernel, a função de
popen() não é de evitar que a saída do comando seja mostrada, mas sim de dar um canal para fluxo de dados unidirecional entre o processo pai e o comando que ele vai disparar (ou vice-versa). Pode até ser que o usuário queira exatamente isso, mas não foi o que ele pediu.
Para simplesmente desprezar a saida do comando, pode-se embutir um "> /dev/null 2>/dev/null" ao final da linha de comando passada a
system(), já que ela, por definição, será interpretada pelo shell "/bin/sh" (no Windows, o shell deve ser o CMD.EXE, e um ">NUL:" deve produzir o mesmo efeito).
Eu, porém, não gosto muito de usar
system(). Geralmente eu prefiro chamar alguns do mesmos componentes do sistema que ela chama internamente (
fork(), uma das funções da família de
exec() no processo filho, e uma da família de
wait() no processo pai), para consumir menos recuros (por exemplo, eu chamo o comando sem submetê-lo ao shell) e ter sobre eles maior controle. Como parte desse maior controle, eu poderia, antes de chamar
exec(), fechar ou redirecionar para "/dev/null" os descritores de arquivo referentes à saída padrão de dados ou saída padrão de erros.