И это не проблема newlib или menuetlibc.
Не факт, что двухбайтный префикс сильно поможет. С именами типа "☺файляYYYY866.ttt" будут постоянно проблемы. ☺/tmp0/1/222/☺файляYYYY866.ttt валидный путь для файла файляYYYY866.ttt в каталоге /tmp0/1/222 или нет ?
Майкрософт не случайно сделала ASCII и Unicode версии системных функций.
Нет, маркер кодировки не является частью строки, это информация о ней, как ВОМ. Сначала маркер, потом строка: ☺/tmp0/1/222/файляYYYY866.ttt. Для cp866 как и раньше можно без маркера.
Pathoswithin
Если интересует, как обрабатывается Unicode в сишных программах, посмотри GLib. Там все строки хранятся в utf8. Для вызовов WinAPI строки конвертируются из utf8 в utf16. Linux понимает utf8. При этом специальные байты для обозначения кодировки не применяются.
Siemargl
Уже много раз обсуждалось. Наследуется от родительского процесса. Как и должно быть. Это не проблема ядра, там с текущим каталогом всё (почти) правильно.
Serge wrote:Siemargl
Уже много раз обсуждалось. Наследуется от родительского процесса. Как и должно быть. Это не проблема ядра, там с текущим каталогом всё (почти) правильно.
Ок. Я запускаю с рабочего стола еолайт. У него в иконке записан путь /sys/file managers/eolite
Дальше, запускаю из еолайта shell.
И что я вижу в pwd? /rd/1/
Отлично отнаследовалось.
Меняем каталог cwd, запускаем из шелл, например kfm или kfar - Они опять в /rd/1
Получается, что рабочего каталога по умолчанию у программы нет.
Меняем каталог cwd, запускаем из шелл, например kfm или kfar - Они опять в /rd/1
На что меняем ? Ты про это:
Kfar и KFM после запуска показывают на левой панели /rd/1/ и /hd0/1/ на правой. Это by design.
Оба кстати меняют текущий каталог при навигации.
В никсах передаётся в вершине стека. Подробно расписано в System V Application Binary Interface страница 54 Process Stack and Registers Кодировка строк не определена, могут быть и в utf-8. Строки нуль терминированные.
В Windows при помощи GetCommandLineW(). Сама строка скорее всего так же хранится в стеке. Потом рантайм разбирает строку на на аргументы. Примерно так LPWSTR* lpArgv = CommandLineToArgvW( GetCommandLineW(), &argc );