Info21 писал(а):
Илья Ермаков писал(а):
Я за второй вариант запуска [
viewtopic.php?p=75490#p75490 ].
Поддержу.
Второй вариант реализован (дельта KernelCmdline, решение 4), первый описан (решение 3). (обновлённый архив:
viewtopic.php?f=102&t=4118)
Цитата:
Решение 4, 21102012, ТЕЭ
Повторить подход Kernel для Windows не в лоб, организуя для других модулей командную строку, которую они не могут получить системным вызовом, а концептуально: основать передачу параметров на таком механизме ОС, который позволит получать их через системные вызовы. Тогда модули сами получают потребные параметры, Kernel же о параметрах ничего знать не надо.
Согласно документации libc, программа может получать параметры также и через переменные окружения, для чтения/записи которых предоставлены соответствующие функции. В случае динамической библиотеки этот способ оказывается единственным.
http://www.gnu.org/software/libc/manual ... ram-BasicsОтличие от Windows-подхода с командной строкой:
- программный: модули вместо разобра командной строки и выделения своих параметров, запрашивают значения переменных окружения с определёнными и зафиксированными в документации пользователя именами;
- пользователь: вместо указания параметров в командной строке при вызове программы, выставляет значения переменных окружения перед её вызовом.
Усё решение: из Kernel вычищены команднострочные костыли, получилось как в Kernel для Windows.
Теперь специальный пусковой скрипт .sh не нужен. Достаточно только бинарного пускача и библиотеки.HostFiles переделан под новый подход --- дельта HostFilesCmdline.
Цитата:
Серверная конфигурация
Исходный метод определения параметров серверной конфигурации:
- первичная папка = папка, содержащая выполняемый файл;
- вторичная папка = задана через командную строку ключом /USE.
Серверная конфигурация включается, если (корректно) задана вторичная папка.
Т. к. получение имени выполняемого файла — та же проблема, что и получение командной строки, то для неё тоже решение — первичная папка определяется явно через переменную окружения. Такой подход, в частности, позволяет использовать один и тот же выполняемый файл (библиотеку), размещённые в стандартных папках (FHS), для любых конфигураций.
Новый метод:
- первичная папка = значение переменной окружения bbServerDir;
- вторичная папка = значение переменной окружения bbWorkDir.
Переменные должны содержать полное имя папок (без "/" в конце). Серверная конфигурация включается, если (корректно) явно определены как первичная так и вторичная папка; если первичная папка не определена, в качестве неё используется текущая.
Тоже всё хорошо почистилось --- костыли и заметки как бы их улучшить заменились на штатные запросы переменных окружения.
Новая команда запуска показана ниже, workPath --- параметр тестовой программы.
Осталось только уточнить как обозвать
переменные окружения. Менять потом будет крайне проблематично.
Пока буду потихоньку переделывать инструкцию по сборке "екзе"..../home/test/dev$ gcc --version > 1.utf8 ;
env bb-primaryDir=$HOME/bb16rc6 bb-secondaryDir=$PWD workPath=Dev/Docu ./test >> 1.utf8
Код:
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
failed to install signal
32
failed to install signal
33
Server dir: /home/bb/bb16rc6
Work dir: /home/test/dev
Work path: Dev/Docu
********************
abs: "/home/bb/bb16rc6/Dev/Docu"
====== LocList (res = 0) ======
nlocs = 0
====== FileList (res = 0) ======
AlienTool.odc
Analyzer.odc
Browser.odc
Build-Tool.odc
CPB.odc
CPC486.odc
CPE.odc
CPH.odc
CPL486.odc
CPM.odc
CPP.odc
CPS.odc
CPT.odc
CPV486.odc
Cmds.odc
ComDebug.odc
ComInterfaceGen.odc
Commanders.odc
Compiler.odc
Debug.odc
Dependencies.odc
HeapSpy.odc
Inspector.odc
LinkChk.odc
Linker.odc
Markers.odc
MsgSpy.odc
P-S-I.odc
Packer.odc
Profiler.odc
RBrowser.odc
References.odc
Search.odc
Selectors.odc
SubTool.odc
Sys-Map.odc
TypeLibs.odc
User-Man.odc
nfiles = 38
********************
abs: "/home/test/dev/Dev/Docu"
====== LocList (res = 0) ======
nlocs = 0
====== FileList (res = 0) ======
ElfLinker-Link.odc
ElfLinker.odc
nfiles = 2
********************
"/Dev/Docu" (abs: "/home/test/dev/Dev/Docu")
====== LocList (res = 0) ======
nlocs = 0
====== FileList (res = 0) ======
AlienTool.odc
Analyzer.odc
Browser.odc
Build-Tool.odc
CPB.odc
CPC486.odc
CPE.odc
CPH.odc
CPL486.odc
CPM.odc
CPP.odc
CPS.odc
CPT.odc
CPV486.odc
Cmds.odc
ComDebug.odc
ComInterfaceGen.odc
Commanders.odc
Compiler.odc
Debug.odc
Dependencies.odc
ElfLinker-Link.odc
ElfLinker.odc
HeapSpy.odc
Inspector.odc
LinkChk.odc
Linker.odc
Markers.odc
MsgSpy.odc
P-S-I.odc
Packer.odc
Profiler.odc
RBrowser.odc
References.odc
Search.odc
Selectors.odc
SubTool.odc
Sys-Map.odc
TypeLibs.odc
User-Man.odc
nfiles = 40
./test > 1.utf8
Код:
failed to install signal
32
failed to install signal
33
Server dir: /home/test/dev
Work dir: /home/test/dev
Work path:
********************
abs: "/home/test/dev"
====== LocList (res = 0) ======
Code
Dev
Dev_dev
Host
Lin
Lin_dev
Sym
System
System_dev
Test
_dev
archives
d
nlocs = 13
====== FileList (res = 0) ======
1.utf8
Lin-Console-Coder-List.utf8
start.odc
starter.c
test
test.so
nfiles = 6
... для следующих двух случаев --- тоже самое