O pipe precisa gravar um arquivo temporário?

10

Descobri que se eu transferir uma grande quantidade de dados entre dois processos via pipe, algum arquivo temporário será criado pelo linux no diretório / tmp. Se a operação de pipe for bem-sucedida, o arquivo temporário correspondente será removido automaticamente pelo sistema operacional. Mas se a operação falhou, o arquivo tmp permanece lá.

Por alguma razão, não quero que o usuário tenha a oportunidade de obter os dados que eu transferi para o canal, por isso não quero mais nada no disco rígido, mesmo que o meu programa tenha falhado. Como posso fazer isso?

    
por solotim 09.12.2009 / 11:30

3 respostas

11
    Os pipes
  1. não armazenam dados no disco. / bin / echo foo | A barra grep não cria nenhum arquivo. tente strace -f sh -c '/bin/echo foo | grep bar' para ver todas as chamadas do sistema feitas por um shell ao executar um pipeline. echo é um shell embutido, então eu sugeri /bin/echo para fazer o shell rodar um executável.

  2. /tmp não precisa estar no disco. Pode ser montado em tmpfs (isto é, suportado pela memória virtual). Note que uma reinicialização irá esvaziar /tmp nesse caso, então use /var/tmp para qualquer coisa que você queira deixar.

Se o que você está fazendo é colocar dados em um arquivo, não está usando um canal. Se o arquivo é um fifo, não um arquivo normal, então é apenas um encontro nomeado e não contém dados. Use ls -l para descobrir.

E observe que, se você quiser impedir que os usuários vejam o que está passando por canais nos processos que possuem, você é praticamente SOL, porque strace pode inspecionar tudo que um processo interage com qualquer coisa fora do processo, exceto para leitura / gravação de memória compartilhada em mmap. ltrace é ainda mais invasivo. Se o seu programa for executado em sistemas nos quais o usuário local tenha raiz, você não poderá pará-lo. No Unix, o root pode fazer qualquer coisa e possui ferramentas poderosas para o propósito.

    
por 09.12.2009 / 20:46
1

Um pipe verdadeiro é um bloco de memória no kernel, um buffer lido / gravado por alguns processos. Não cria arquivos em nenhum lugar.

Alguns aplicativos têm opções que alternam entre o uso de canais (mais rápido, sem bater no disco, consome um pouco mais de memória) e o uso de arquivos temporários (ocupa um pouco menos de memória e permite ver os arquivos temporários com um toque mais lento). gcc é um desses aplicativos, embora provavelmente sejam outros.

    
por 24.09.2010 / 18:54
0

Hack suja: Criptografar os dados antes de enviar e decifrá-lo ao receber, se você pode mudar os dois processos ...

    
por 09.12.2009 / 11:38

Tags