Redirecionar gravações de arquivo de um aplicativo

3

Em Raspbian, estou usando um aplicativo de código fechado que grava alguns arquivos temporários no disco, faz um pouco de trabalho e os destrói rapidamente. Gostaria de inspecionar esses produtos intermediários, portanto, espero que haja uma maneira de redirecionar as gravações ou tornar os arquivos temporários persistentes.

Até agora, usei o opensnoop para confirmar a existência e a localização dos arquivos temporários.

Alguma sugestão? Eu tenho a opção de fazer isso no OSX, se é mais fácil. TIA.

    
por Wesley 01.05.2017 / 11:21

2 respostas

2

Você pode conectar em write () e todas as funções similares. Usando o LD_PRELOAD, você pode redirecionar as funções da libc e gravar os dados conforme desejar e, em seguida, passar o aplicativo para a função write () real - por exemplo. Eu suponho que seu programa está dinamicamente vinculado. Veja link .

Editar: Você também pode iniciar um loop bash (rápido) na temperatura. diretório e defina o sinalizador imutável do usuário nos arquivos de interesse em intervalos curtos. %código% Isso pode atrapalhar seu aplicativo ou pode passar por cima dos erros de exclusão internos. Para limpar os sinalizadores, use cd /tmp ; while true ; do chflags uchg foo* ; sleep 0.01 ; done .

    
por 01.05.2017 / 17:00
2

A solução mais fácil é pausar o programa temporariamente até que você termine de inspecionar os arquivos temporários. Observe, no entanto, que o programa pode não ser retomado corretamente depois, portanto, se ele abrir arquivos importantes do usuário, faça backups desses arquivos antes para evitar danos.

Suponhamos que seu programa seja chamado de prog . Para pausar o programa, execute kill -TSTP $(pidof prog) enquanto ele estiver em execução. Depois de terminar, continue com kill -CONT $(pidof prog) .

Como você já sabe a localização (e possivelmente o nome dos arquivos temporários), você pode tornar isso mais preciso "guardando-o" com um loop while assim:

while [ ! -f /path/to/temp_file ]; do echo -ne 'Waiting for file...\r'; done ; kill -TSTP $(pidof prog)

O loop while continuará em execução até que o arquivo temporário exista e somente então kill seja executado para enviar o sinal TSTP . Agora, com o loop ainda em execução, execute seu programa e copie o (s) arquivo (s) temporário (s), se necessário, e retome o processo para deixá-lo concluído e finalizado de forma limpa.

    
por 02.05.2017 / 04:32