echo to file with different user permission

Я предполагаю, что вы не изменили настройки грязных страниц ядра. Для вашего варианта использования я бы попробовал что-то вроде этого:

/proc/sys/vm/dirty_background_bytes:50000000
/proc/sys/vm/dirty_bytes:4000000000
/proc/sys/vm/dirty_expire_centisecs:100
/proc/sys/vm/dirty_writeback_centisecs:20

(см. https://www.kernel.org/doc/Documentation/sysctl/vm.txt для подробностей.)

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

0
18.01.2017, 14:11
1 ответ

Из вашего вопроса неясно, какой текст вы действительно ожидаете в конечном итоге в файле.

В оболочке вы можете сделать

echo 'ab' | sudo tee myLog.txt

, чтобы «ab» записывалась в myLog.txt и также отображалась в стандартном выводе. Причина использования tee обычно заключается в его побочном эффекте, так что вам не нужно запускать оболочку как привилегированный пользователь, и вывод на стандартный вывод на самом деле нежелателен; так что вы можете добавить перенаправление, чтобы подавить это.

echo 'ab' | sudo tee myLog.txt >/dev/null

В вызове системы (3) в коде C вы можете просто поместить это в строку:

system("echo 'ab' | sudo tee myLog.txt >/dev/null");

Следующее в основном не определено:

echo 'ab' | echo 'Logging enabled'

но обычно просто отбрасывает " ab ", потому что второе echo ничего с ним не делает, а вместо этого производит собственный вывод. Если вы хотите объединить два фрагмента текста, попробуйте что-нибудь вроде

printf "%s\nLogging enabled\n" "$(echo ab)"

, но опять же, крайне неясно, что и если да, то как вы хотите сделать с двумя отдельными операторами echo .

(Чтобы повторить очевидное, a | b соединяет стандартный вывод a со стандартным вводом b и запускает два процесса параллельно, со стандартным входом, по-прежнему подключенным к стандартному входу a , и стандартным выходом, исходящим из b .)

3
28.01.2020, 02:25

Теги

Похожие вопросы