#c #bash #shared-libraries #fopen #fwrite
#c #bash #общие библиотеки #fopen #fwrite
Вопрос:
Здравствуйте, я создал общую библиотеку с именем logger.so
. Эта библиотека является моей пользовательской fopen()
и fwrite()
. Он собирает некоторые данные и создает файл с этими данными.
Сейчас я пишу скрипт bash и хочу также использовать эту библиотеку. Создавая текстовый файл, я мог бы увидеть дополнительный файл, который создает мой пользовательский fopen()
. Поэтому, когда я использую команду fopen()
в файле c, создается этот дополнительный файл.
Мой вопрос в том, какие команды fopen()
и fwrite()
функции используются в bash?
Я уже предварительно загрузил свою общую библиотеку, но она не работает. Возможно, эти команды не используют fopen()
, fwrite()
export LD_PRELOAD=./logger.so
read -p 'Enter the number of your files to create: [ENTER]: ' file_number
for ((i=1; i<=file_number; i ))
do
echo file_"$i" > "file_${i}"
done
Комментарии:
1. Почему бы вам просто не проверить исходный код и не убедиться в этом самостоятельно?
2. не могли бы вы подсказать мне, где именно я могу провести свое исследование?
3. Вот и все git.savannah.gnu.org/cgit/bash.git
Ответ №1:
Это может потребовать некоторых проб и ошибок. Я вижу два способа сделать это. Один из них — запустить потенциальные команды, которые работают с файлами, bash
и посмотреть, вызывают ли они при отслеживании fopen
:
strace bash -c "read a < /dev/null"`
или
strace bash -c "read a < /dev/null"` 2amp;>1 | fgrep fopen
Это показывает, что это read
использует open
, а не fopen
.
Другой способ — grep
использовать исходный код bash, как предложил @oguz. Когда я это сделал, я нашел несколько мест, где fopen
вызывается, но я не стал исследовать дальше:
curl https://mirrors.tripadvisor.com/gnu/bash/bash-5.1-rc3.tar.gz|tar -z -x --to-stdout --wildcards *.c | fgrep fopen
Вы захотите разархивировать весь пакет и выполнить поиск по файлам .c один за другим, например:
curl https://mirrors.tripadvisor.com/gnu/bash/bash-5.1-rc3.tar.gz|tar -z -v -x --wildcards *.c
Вы также можете передать файл по FTP или сохранить его через браузер и выполнить tar
автономный режим, если у вас его нет curl
( wget
также будет работать).
Надеюсь, вы сможете отследить соответствующие команды, но это может быть непросто.
Ответ №2:
Не обязательно каждая программа использует стандартные функции stdio библиотеки C fopen
и fwrite
.
Но каждая программа использует open
и write
системные вызовы для открытия и записи файлов, которые вы можете вставлять / исправлять.
Современные программы, которые используют io_uring
, требуют другого метода вставки.