11

Я обнаружил, что если я передаю большое количество данных между двумя процессами через канал, временный файл будет создан linux в каталоге /tmp. Если операция конвейера завершится успешно, соответствующий временный файл будет автоматически удален ОС. Но если операция не удалась, файл tmp остается там.

По какой-то причине я не хочу, чтобы у пользователя была возможность получать данные, которые я передал через канал, поэтому я не хочу, чтобы что-либо оставалось на жестком диске, даже если моя программа потерпела крах. Как я могу это сделать?

3 ответа3

11
  1. трубы не хранят данные на диске. /bin /echo foo | grep bar не создает файлов. попробуйте strace -f sh -c '/bin/echo foo | grep bar' чтобы увидеть все системные вызовы, сделанные оболочкой при запуске конвейера. echo - встроенная оболочка, поэтому я предложил /bin/echo чтобы оболочка работала.

  2. /tmp не обязательно должен быть на диске. Он может быть смонтирован на tmpfs (т.е. поддерживается виртуальной памятью). Обратите внимание, что перезагрузка опустошит /tmp в этом случае, поэтому используйте /var/tmp для всего, что вы хотите оставить.

Если то, что вы делаете, это помещает данные в файл, тогда он не использует канал. Если файл представляет собой fifo, а не обычный файл, то это просто именованное рандеву и не содержит данных. Используйте ls -l, чтобы узнать.

И обратите внимание, что если вы надеетесь не дать пользователям увидеть, что происходит через каналы в процессах, которыми они владеют, вы в значительной степени SOL, потому что strace может проверять все, что делает процесс, взаимодействующий с чем-либо вне процесса, кроме чтения / записи mmapped. Общая память. ltrace еще более агрессивен. Если ваша программа будет работать в системах, где у локального пользователя есть root, вы не сможете остановить их вообще. В Unix root может делать все что угодно и имеет для этого мощные инструменты.

1

Истинный канал - это блок памяти в ядре, буфер, который читается / записывается некоторыми процессами. Он не создает файлы нигде.

В некоторых приложениях есть опции, которые переключаются между использованием каналов (быстрее, без попадания на диск, занимает немного больше памяти) и использованием временных файлов (занимает немного меньше памяти, позволяет вам видеть временные файлы, на ощупь медленнее). gcc является одним из таких приложений, хотя, вероятно, другие.

0

Грязный хак: зашифруйте данные перед отправкой и расшифруйте их при получении, если вы можете изменить оба процесса ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .