Начиная с gFormatRecord->dataFork
, похоже, что вы пытаетесь написать плагин для Photoshop.Это не будет работать так хорошо.
Photoshop (и, вероятно, большинство программного обеспечения Mac Adobe) полон много кода углерода, который был разработан, чтобы быть в значительной степени идентичным существующим API-интерфейсам 8.5, в то время кактакже совместимость API / ABI с OS X (я не знаю, была ли / когда поддержка CFM Carbon прекращена).
Согласно документации, вы должны использовать вместо этого FSSetForkPosition (), что, вероятно, заканчиваетсядо того же вызова функции в конце.Вы почти наверняка не можете использовать fseek()
/ fsetpos()
/ fseeko()
, который ожидает FILE *
, в то время как дескриптор файла Carbon выглядит как SInt16 согласно моему заголовку (веб-документы говорят, что это FSIORefNum).[1]
Также обратите внимание, что fopen()
и друзья не POSIX;они стандартные C. Функции POSIX, как правило, одинаковы без начального f, за исключением поиска, который равен lseek()
.[2] POSIX «дескриптор файла» - это дескриптор файла, который представляет собой int
.
Теперь, если вам повезет невероятно , FSIORefNum будет просто файломдескриптор, который вы можете передать read()
/ write()
/ lseek()
.Но это в конечном итоге для небольшой выгоды;если Photoshop все еще построен на Carbon, какой смысл?
Сноски!
- Не исключено, что специальные случаи fseek () указывают на нулевую страницу, но я не понимаюНе думаю, что они загрязнят libc этим.)
- В Linux / x86 вам потребуется
#define __FILE_OFFSET_BITS 64
или около того, чтобы получить поддержку больших файлов, что легко забыть.Позор, это не так легко сделать универсально ...