использование общей библиотеки: пользовательский myfopen(), myfrwrite()

#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 , требуют другого метода вставки.