
Сообщение от
ВладОвен
Подскажите, а как с помощью библиотеки CmpSysExec передавать в Linux команды, в которых содержится кириллица?
Возможно ли для этого использовать CmpSysExec.sysExecute5?
Как-то так
У всех sysExecute принцип одинаковый. Нужна UTF8
Вот мой живой пример:
Код:
//Внутренние параметры
VAR
//Имя БД в UTF8
sBD_Name_UTF8: STRING(255);
//Имя файла в UTF8
sFileName_UTF8: STRING(255);
//ФБ для отправки команд на контроллерную консоль
fbSe4: CmpSysExec.SysExecute4;
END_VAR
Код:
//Константы
VAR CONSTANT
//Команда отправки на контроллерную консоль
sCommand: STRING(255) := 'bsqldb -S read -q -t $';$' -U sa -P mypassword -D #BD_NAME# -i #FILE_NAME#';
END_VAR
Код:
//Имя БД в правильной кодировке UTF8
STU.ConvertUTF16toUTF8(ADR(sBD_Name), ADR(sBD_Name_UTF8), SIZEOF(sBD_Name_UTF8), FALSE);
sCommand_Real := OSU.ReplaceSubstring(sCommand, '#BD_NAME#', sBD_Name_UTF8);
//Имя файла в правильной кодировке UTF8
STU.ConvertUTF16toUTF8(ADR(sFileName), ADR(sFileName_UTF8), SIZEOF(sFileName_UTF8), FALSE);
sCommand_Real := OSU.ReplaceSubstring(sCommand_Real, '#FILE_NAME#', sFileName_UTF8);
Код:
//Блок отправки команды через контроллерную консоль
fbSe4
(
xExecute := fbRiseEdge.Q, //Запуск на исполнение по переднему фронту
sCommand := sCommand_Real, //Команда Linux - например 'ls /'
xAbort := FALSE, //Аварийный останов процесса
sOutput => ResultString, //Массив строк для сохранения вывода процесса
cntReadStr => CountOfStrings,//Количество считанных строк вывода процесса
xOverFlow => , //Признак переполнения массива sOutput
xDone => xDone, //Признак завершённости процесса и/или того, что в данный момент не выполняется процесс Linux
xAborted => , //Признак прерывания по пользовательской команде
xError => xError, //Признак невозможности запуска из-за возникновекния ошибки
xBusy => xBusy, //Процесс выполняется
eErrorCode => //Код ошибки
);