К сожалению, нет способа сделать это с помощью UNIX или POSIX. Если вам нужно использовать его для поиска каких-либо данных, вам следует использовать переменную среды $ PATH и искать данные по пути, который относится к каждой записи в $ PATH. Например, весьма распространено хранить двоичные файлы в " installdir / bin" для некоторого установочного каталога "installdir" и сохранять связанные данные в " installdir / share / name_of_program"для некоторого установочного каталога и некоторой программы с именем" name_of_program ". Если это так, то поиск "../share/name_of_program/name_of_resource_file" относительно каждой записи в getenv ("PATH") является хорошим способом поиска ресурсов , Еще одна вещь, которую вы можете сделать, - разрешить предоставление необходимой информации в командной строке или в каком-либо файле конфигурации и выполнять поиск только в случае необходимости в качестве запасного варианта.
Редактировать
Теперь, когда вы изложили свое обоснование для этого, я бы посоветовал вам просто использовать класс QSettings из Qt для вашей информации о конфигурации, поскольку он использует предпочтительный собственный механизм для каждой платформы (реестр в Windows, файл PLIST в Mac OS X, база данных Gnome GConf в Linux). Возможно, вы захотите взглянуть на мой шаблон проекта C ++ , так как он использует Qt для этого и предоставляет простые параметры командной строки для легкой настройки параметров конфигурации ("--prefset", "--prefget ", и" --preflist "манипулируют QSettings).
Тем не менее, если вам абсолютно необходимо использовать собственный файл конфигурации XML вместо предпочитаемого собственного механизма, я настоятельно рекомендую вам поместить общесистемную конфигурацию в " installdir / etc", пока размещение вашей библиотеки в " installdir / lib" для некоторого установочного каталога "installdir", так как это типичное место для файлов конфигурации в системах UNIX, и " installdir / lib" должно быть ТОЛЬКО использоваться для файлов библиотеки, а не для файлов конфигурации и других ошибок. Я предлагаю вам разместить пользовательскую версию файла конфигурации в «$ XDG_CONFIG_HOME» (если он определен) или в «$ HOME / .config» (где «$ HOME» - домашняя папка пользователя).
При поиске общесистемного файла конфигурации я бы порекомендовал вам выполнить поиск в $ XDG_CONFIG_DIRS, если он определен; если он не определен, то возвращается к "/ etc / xdg" или ищет "../etc/name_of_your_program.conf.xml" относительно "$ PATH" и, возможно, также относительно "$ LD_LIBRARY_PATH", " $ DYLD_LIBRARY_PATH "," $ DYLD_FALLBACK_LIBRARY_PATH "), содержимое" /etc/ld.so.conf ", если оно существует, и содержимое" /etc/ld.so.conf.d/*.conf ", если эти файлы существует, остановка поиска, как только вы обнаружите первый допустимый такой файл конфигурации, будет разумным подходом.
Благодарность Роджеру за указание на XDG Basedir Spec и за его отличную конструктивную критику.