Функция Тессеракта без реализации

#c #function #implementation #tesseract

#c #функция #реализация #тессеракт

Вопрос:

Я пытаюсь создать проект с использованием Tesseract в чем-то другом, кроме Visual Studio, но, похоже, нет никакой документации о том, как это сделать.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что файл scanutils.cpp вызывает функцию open(char *, int, mode_t), и это нигде не определено. Возможно, это функция Unix, которая ускользнула или должна быть расположена где-то на моей машине?

Спасибо.

Редактировать: я обнаружил, что функция open включает использование файла fcntl.h в Unix, но ее версия, которая у меня есть (C Builder), не включает функцию open. Я мог бы просто определить функцию open в своем собственном файле, как в Unix, но это кажется немного опрометчивым. Есть предложения?

Ответ №1:

В инструментах Microsoft функция open() заменяется на _open() , определенная в io.h . Здесь (MSDN) вы можете найти более подробную информацию об этом.

Ответ №2:

open() это функция Posix, которая обычно переносит open системный вызов в соответствующие системы. Это довольно «низкоуровневая» функция, которая очень специфична для платформы.

Переносимая функция C, которая обеспечивает эквивалентную функциональность fopen() , в том смысле, что результат open() такой же, как FILE * fp = fopen(...); int fd = fileno(fp); — здесь fd целое число, возвращаемое базовым open() вызовом.

Стандартные функции C fwrite() и fread() сопоставляются с функциями Posix read() и write() , кстати.

Старайтесь максимально использовать стандартные функции и FILE* структуры данных C для максимальной переносимости. При необходимости вы всегда можете получить дескриптор файла Posix через fileno() .

Комментарии:

1. Отлично. Спасибо. В коде использовались флаги O_CREATE , O_TRUNC и O_WRONLY, и я полагаю, что fopen делает то же самое по умолчанию.

2. @user912447: Не совсем. fopen() имеет стандартный набор флагов (которые вы можете посмотреть в руководстве), которые соответствуют определенным open флагам. Но open предлагает гораздо больший и более точно настроенный набор флагов для всех видов поведения, специфичного для Posix. Опять же, проверьте руководство, man 2 open .

Ответ №3:

open() является стандартной функцией UNIX.

Комментарии:

1. Без реализации в Windows? Я спрашиваю, потому что обычно код tesseract, который предназначен только для unix, обернут в #ifdef и предлагает альтернативу Windows. В противном случае он не будет компилироваться в Visual Studio, что, я знаю, так и есть.