Теоретически это возможно, используя LD_PRELOAD с желаемой программой.
Напишите библиотеку для добавления оболочки над «открытыми» системными вызовами и используйте исходную программу (скажем cat
) как LD_PRELOAD=/path/to/library cat
.
Код overridden_open () в библиотеке-оболочке будет выглядеть примерно так же, как и в следующем фиктивном коде.
/* This is an illustrative code, and doesn't follow any good coding practice. */ int overridden_open (...) { /* Only do this for the config file. */ if (strcmp (filename, "/path/to/required/config/file") == 0) { /* Download a fresh copy, and if successful, overwrite the existing file. */ if (system ("wget -O /path/to/required/config/file.tmp http://remote.file/url") == 0 && system ("<perform awk/sed/grep operations>") == 0) { system ("mv /path/to/required/config/file.tmp /path/to/required/config/file"); } } return open (...); }