Вы не можете #include
два заголовка с одинаковым путем, но вы можете установить один вне обычных путей и заменить его при компиляции с помощью соответствующий переключатель (для gcc, -I
). Я думаю, вы уже это понимаете, поэтому не нужно слишком много думать, чтобы осознать это, если вы поместите более одного asm / fcntl.h
в обычные подключаемые каталоги, только один из них будет применить в любом случае .
Однако я не думаю, что вам есть о чем беспокоиться. Начнем с некоторых ваших комментариев:
Те функции в программе пользовательского пространства, которые используют новые механизмы ядра, могут быть отключены.
Это хорошо. Если вам нужно #define NEWVALUE 666
для компиляции , и это включает в себя функцию, которая будет работать только с более новым ядром, и вы можете поймать или отключить ее использование в противном случае, тогда секции, которые действительно применяют NEWVALUE
, никогда не будут вызваны. Помните, это не значит, что нет заголовка, определяющего это доступным, когда старое ядро работает - даже если бы он был, это не имело бы значения, поскольку настоящая проблема во время выполнения заключается в том, что вы фактически вызвали несуществующую часть ядро ABI . Вам не нужны никакие заголовки только для того, чтобы запустить исполняемый файл, поэтому возврат к старому ядру не имеет значения.
Возможно, я параноик, но ...
Да и нет.Если это система, в которой разные люди произвольно меняют местами разные заголовки ядра, чтобы использовать новые функции при компиляции вещей, которые будут оставлены и запущены позже с использованием более старого ядра, то паранойя - уместная реакция, лол. Однако, вероятно, не так много всего попадает в эту категорию.
Дистрибутивы заменяют заголовки ядра при каждом обновлении, но список вещей, которые пользователь должен заменить одновременно, обычно кажется не таким длинным (если он вообще существует). Я полагаю, что это отчасти потому, что поддерживать обратную совместимость в этом контексте довольно просто, но я думаю, что это также потому, что вещи в этом контексте не меняются кардинально с течением времени.
Полагаю, я мог бы сохранить старые заголовки и переустановить их.
Вы можете сделать это или при необходимости заменить их из соответствующего источника ( make headers_install
); если это ядро дистрибутива, и вы беспокоитесь, что они могут быть исправлены, в дистрибутиве должен быть пакет с исходным кодом для него.
AFAIK mp3info
записывает только теги ID3v1. Вы можете проверить это с помощью чего-нибудь вроде eyeD3
(инструмент, написанный на питоне): eyeD3 -1 file.mp3
(для проверки ID3v1) и eyeD3 -2 file.mp3
(для проверки IDv2, который считывается последними плеерами).
Вы также можете использовать eyeD3
для записи тегов v1 или v2.
Например, вы можете редактировать теги v2 с помощью:
eyeD3 -2 -a "The Artist" -A "Album Name" -t "Title of the song" /tmp/song.mp3