O programa C executa o equivalente a este script:
#!/bin/bash
export LD_LIBRARY_PATH=.
exec /usr/lib/mono/4.5/mono-service.exe Audio_Video_Recorder.exe --debug '>&' LOGCamster.txt
echo "Oops!" >&2
exit 255
Observe que >&
e LOGCamster.txt
são passados como argumentos literais para sua linha de comando. Especificamente, >&
é não interpretado pelo shell para significar "attach stderr para stdout " porque não há nenhum shell manipulando sua linha de comando.
As chances são de que o programa não goste do "> &" parâmetro que está sendo dado e sai imediatamente.
A definição de LD_LIBRARY_PATH
para .
abre um buraco de segurança potencialmente enorme. Eu realmente não faria isso se fosse você.
Se você realmente precisa fazer isso de um executável, então você pode fazer uma das duas coisas
-
Redirecione stdout e stderr você mesmo. Aqui você precisará
close(1)
eopen()
em seu arquivo de log. Você pode entãoclose(2)
edup(1)
. Depois disso, apenasexecve
do seu programa sem tentar redirecionar a saída para qualquer lugar - porque ele já está sendo redirecionado para o arquivo de log. -
Chame um shell para interpretar seu comando. Aqui você precisa de três argumentos:
char *argv[] = { "/bin/sh", "-c", "mono-service.exe Audio_Recorder.exe --debug >& log.txt" }
. No entanto, se você estiver fazendo isso, é melhor usar um script, que é mais fácil de escrever e manter.