opendir и readdir кодирующие строки за моей спиной?

Наиболее распространенные syscalls - читают (2), и запись (2) берет 3 параметра: дескриптор, буфер и длина. Число возвратов байтов на самом деле чтение или записанный. близко (2), очевидно, берет один параметр - дескриптор для закрытия.

Большинство syscalls возвращается-1 в случае ошибки и наборов errno.

Все остальное я обычно читал в соответствующей странице справочника. Просто не забывайте команду: man 2 syscall_name

P.S.: у Вас есть введение (2)?

6
20.03.2017, 12:18
1 ответ

opendir и readdir самостоятельно работа над байтами. Они не работают и перекодирование.

Некоторые драйверы файловой системы могут наложить ограничения на последовательности байта. Например, HFS + нормализует имена файлов с помощью собственной схемы нормализации Unicode. Я ожидал бы форму, возвращенную readdir работать при передаче opendir, однако, столь как OP на форуме Ubuntu распараллеливают, что jw013 упомянутый, я подозреваю ошибку в HFS + драйвер. Это не единственная программа, которая смещена Хангылем на HFS +. Даже OSX, кажется, испытывает затруднения из-за нормализации Unicode.

1
27.01.2020, 20:30
  • 1
    Спасибо за ответ. Вы говорите, что некоторые драйверы налагают ограничения на последовательности байта. Это происходит на более низком уровне, чем opendir и readdir, и таким образом, походит на то, что Вы говорите, то, что байты имени файла в структуре dirents сообщаемый readdir не идентичны тому, что находится на самом деле на диске. Или это или байты, что мы даем opendir, не являются фактическими байтами, которые проверяются на диске. Другими словами, что-то все еще делается за нашими спинами, возможно, на более низком уровне драйвера. Действительно ли я прав относительно этого? –  bhh1988 20.07.2012, 12:15
  • 2
    @bhh1988 Да, что-то сделано на уровне драйвера, потому что HFS + файловая система не принимает произвольные последовательности байта и имеет обязательный способ преобразовать последовательности Unicode в каноническое представление. Похоже, что драйвер не делает этого правильно, но я не понимаю детали; я не знаком с HFS +. –  Gilles 'SO- stop being evil' 20.07.2012, 12:25
  • 3
    Gilles, я хотел бы знать, как Вы смогли узнать, что opendir и readdir не выполняют перекодирования? –  bhh1988 22.07.2012, 16:03
  • 4
    @bhh1988 можно проследить его через источник библиотеки C и код ядра. Если Вы работаете strace ls, можно непосредственно запустить с точки входа ядра: open syscall. Универсальный код поддержки файловой системы передает все байты кроме пустого указателя и / вдоль неизмененного. Это - только некоторые драйверы файловой системы, включая hfsplus, это преобразовывает имена файлов. –  Gilles 'SO- stop being evil' 22.07.2012, 20:09

Теги

Похожие вопросы