Что такое код dba_popen

Содержание

Что такое код dba_popen

dba_popen

(PHP 3>= 3.0.8, PHP 4)

dba_popen — открывает БД на постоянной основе.

Описание
resource dba_popen (string path, string mode, string handler [, . ])

dba_popen() устанавливает постоянный экземпляр БД для path с mode с использованием handler.

path это обычный регулярный путь вашей файловой системы.

mode это «r» — режим доступа для чтения (read), «w» для чтения/записи (read/write) к уже существующей БД, «c» для чтения/записи и создания БД, если она не существует, «n» для создания, усечения и для чтения/записи.

handler это имя дескриптора, который будет использован при доступе к path. Он передаёт все параметры-опции для dba_popen() и может работать от его имени.

dba_popen() возвращает положительный дескриптор или FALSE, в случаях успеха открытия или неудачи, соответственно.

См. также dba_open(), dba_close().

Отправить сообщение об ошибке
Если нашли ошибку в тексте выделите ее мышкой и нажмите сочетание клавиш Ctrl+ENTER, укажите правильный текст без ошибки.

Пример переделки кода fopen -> fopen_s

Нужно поменять его с применением на метод fopen_s

Кто сможет помочь с внедрением маленького куска кода не переписывая отдельные части кода?

Добавлено через 7 минут
Грубо говоря тут стоит задача, как превратить:
FILE** pFile в FILE* file
Или на оборот. То есть указатель с двумя звездочками превратить в указатель с одной звездочкой. Или наоборот.

18.03.2020, 07:47

Ошибка «C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead»
error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To.

Исправить ошибку «C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead.»
Добрый день! Помогите пожалуйста с программой. Программа запускается, но при компиляции выдает.

можно ли в реальности менять СУБД без ущерба (переделки) кода?
Это не очень нагло две темы подряд? Просто привык во всем разбираться до косточек, а вопросов.

Как работает popen () и как внедрить его в код c ++ в linux?

У меня проблемы с выяснением, как использовать POPEN () захватить стандартный вывод из дочерних программ в Linux в основную программу на C ++. Я осмотрелся и нашел этот фрагмент кода, который делает то, что я хочу. Но я не могу понять, как это работает. Я знаю основы программирования на С ++ (я занимаюсь этим уже несколько месяцев), но я в замешательстве, так что может кто-нибудь помочь мне объяснить это?

Решение

как использовать popen () для захвата stdout из дочерних программ в Linux
основная программа на C ++

Вы знакомы с философией UNIX? Вы можете прочитать начало статьи в Википедии «Философия UNIX». Вот фрагмент:

Философия UNIX документирована Дагом Макилрой [1] в Bell
Системно-технический журнал с 1978 г .: [2]

1) Сделайте так, чтобы каждая программа хорошо выполняла одну вещь. Чтобы сделать новую работу, построить заново
вместо того, чтобы усложнять старые программы, добавляя новые «функции».

2) Ожидайте, что выходные данные каждой программы станут входными данными для другой, так как
пока неизвестно, программа. Не засоряйте вывод посторонними
Информация. Избегайте строго столбчатых или двоичных форматов ввода. не
настаивать на интерактивном вводе.

Я предпочитаю popen получить доступ ко многим инструментам Linux, которые я считаю полезными. Примеры включают sort, unique, sha256sum и несколько других. Но вы можете заметить, что многие эквиваленты перемещаются в библиотеки C ++ (std :: sort и т. Д.) И, с усилием, я нашел, например, код sha256sum, подходящий для компиляции в моем приложении c ++.

1) При запуске popen присваивается строка, которая может состоять из одной части, идентифицирующей приложение для запуска, или из нескольких частей, первая — это приложение, а строки дополнений — это параметры, передаваемые этому приложению, как если бы это была командная строка вход. Так же, как в оболочке (подсказка)

2) При запуске в режиме ‘r’ канал stdout sha256sum направляется в дескриптор FILE *, открытый вашим вызовом popen. Таким образом, результат «возвращается» в вашу программу.

Но я не могу понять, как это работает.

Не очень полезный комментарий и не вопрос. Ваш фрагмент кода выглядит прямо передо мной (хотя по существу c код). Возможно, вам следует выбрать строку кода и спросить что-то конкретное об этом?

Но прежде чем вы будете слишком усердно работать над своим кодом, позвольте мне провести некоторое начальное исследование, где мы вручную запустим код, который мы хотим использовать с popen, и соберем результаты для проверки на основе результатов вашего приложения.

В своем фрагменте вы пытаетесь выполнить команду «which driftnet». Неудачный выбор, когда программа driftnet не существует в вашем PATH.

Результаты в моей системе:

Поскольку команда не существует, команда ‘which’ просто возвращает пустой результат.

Трудно сказать, сделали ли мы что-то не так или нет. Без дрифнета я тоже ничем не могу помочь.

Расследование 2 — несколько более интересное испытание.

sha256sum требует файл для ввода … Здесь я предоставляю свою программу «C ++ Hello World», которую вы можете записать в файл «HelloWorld.cc» (или в любое другое место) или использовать любой из ваших собственных файлов.

Всего 10 строк кода, начинается с комментария, имеет 1 пустую строку после одного включения. У меня есть редактор, настроенный на автоматическое удаление конечных пробелов. Если у вас есть пробел, ваш результат может отличаться.

Итак, что происходит, когда вы вычисляете сумму sha256 файла «HelloWorld.cc» из командной строки? Не нужно спекулировать … просто попробуйте!

В командной строке вызовите команду и просмотрите ее ответ в следующей строке:

Возможно, вы могли бы попробовать ваш попен код с sha256sum и известным файлом?

Теперь вы можете увидеть, что может содержать вывод (вашего popen-кода). Для этого исследования ** результатом команды sha256sum является 1 длинная строка с пробелом в ней.

К вашему сведению — я сломал свой открытый код C ++ несколько месяцев назад во время капитального ремонта моей библиотеки. Когда я это исправлю, я планирую пересмотреть ваши усилия, чтобы увидеть, как вы продвигаетесь.

Если ваш код начинает работать … Я призываю вас представить свой ответ!

Если вы можете определить более конкретный вопрос, уточните вопрос.

Я рекомендую вам перейти на код C ++ … если вы собираетесь что-то изучать и хотите изучать C ++, не нужно изучать то, что вы нашли.

Мой код снова работает. (обновление 2020/8/2)

Но сначала позвольте мне рассказать о нескольких последствиях философии UNIX в произвольном порядке:

Следствие 1 — трубы и фильтры

Фильтры — это программы, которые хорошо выполняют одну задачу. Они принимают входной поток и создают выходной поток, обычно «удаляя» что-то.

В области метрик кода руководство может проверять количество строк, чтобы получить представление о прогрессе (замедление роста количества строк) и проблемах (не замедление).

Каждый имеет свое мнение о метриках кода … не каждая строка в файле должна учитываться. Например, я думаю, что пробел важен, но строка пробела не должна считаться кодом. Аналогично, полная строка комментария не является кодом. ПО МОЕМУ МНЕНИЮ.

В следующей команде

f1..fn — фильтры, все они передаются в оболочку как одна команда. В моем инструменте метрик кода я создал

представляет собой одну строку, отправляемую в оболочку, которая в конечном итоге содержит 3 числа.

UNIX-подобная команда ‘wc’, вероятно, существует в вашей системе. На Ubuntu 15.10:

Указывая на HelloWorld.cc имеет 10 строк (без фильтрации).

Следствие 2 — списки команд

Список команд — это список команд оболочки, каждая из которых хорошо выполняет свою задачу. В списке указана временная последовательность выполнения. Более общая идея, чем труба и фильтр.

Например, я настроил мой редактор (emacs) с назначенным ключом (F8), чтобы предоставить следующую команду компиляции:

Илон Маск рекомендует:  Что такое код asp hcmaxdiskspaceusage

Определенный файл pfn, возможно, вводится один раз, но хранится в буфере истории внутри emacs, и, следовательно, нет необходимости повторно вводить его.

Обратите внимание на 3 точки с запятой. Они разграничивают несколько команд в одной строке, передаваемой в командную оболочку Linux. Список команд из 3 элементов: установите переменную среды, чтобы переопределить параметр по умолчанию; экспортировать новый флаг, чтобы сделать его доступным для компилятора; и запустить марку.

Так? popen () принимает списки команд. «Список команд», такой как shell, может принять.

Я, наконец, прочитал ответ «человек поп» с достаточной тщательностью.

Функция popen () открывает процесс путем создания канала, разветвления и
ссылаясь на ракушка.

Ваша команда, данная popen, запускается в оболочке.

Но я не могу понять, как это работает.

Этот «материал» должен начать обретать смысл, сейчас. Мы обращаемся к оболочке для обработки команды / списка команд / фильтров канала. Это запускает «другой» процесс и взаимодействует с первым процессом с помощью ТРУБЫ.

Так как же результат обработки команды в оболочке доставляется в мой код? некоторые подсказки для понимания следуют. Прилагаются некоторые демонстрационные примеры модульных тестов, где вы можете легко изменить popen cmd, а затем скомпилировать и запустить новый cmd.

Ниже приведен код для использования popen в одном из двух режимов. Да, они в 3 классе, базы и два производных. Надеюсь, что это позволяет вам запускать более одного из них одновременно. (Не очень полезно на моем 2-х ядерном компьютере.) Не стесняйтесь рефакторинг кода, оставляя только то, что вам нужно. Остальные будут здесь для вашего дальнейшего руководства.

Я думаю, что для копирования / вставки будет легче разделить их на 3 раздела. Но помните, у меня есть весь код в одном файле. Не один заголовочный файл, но он работает для меня. Вы можете рефакторинг в файлы .h и .cc, если хотите.

А теперь POpenWrite_t:

Затем у меня есть то, что я называю T514_t, класс, который определяет мой тестовый модуль или демонстрационные усилия. Запись в ‘exec ()’.

Оказывается, что оболочка, используемая в popen, может отличаться от оболочки, которую вы используете в терминале. Во время запуска сеанса часть оболочки решает, находится ли она в интерактивном (терминальном) или неинтерактивном (без терминального) режиме. В моей системе терминал / интерактивная оболочка ‘bash’, а popen / неинтерактивная оболочка ‘sh’. Помните об этом при разработке команд оболочки для popen.

Интересное использование POpenRead_t в методе «std :: string shellCheck (std :: stringstream& rsltSS)».

И, наконец, мой главный … Есть только несколько вещей, которые я хочу сделать здесь.

Итак, соберите и играйте с std :: string cmd; в интересующем вас режиме. Удачи.

Модуль subprocess

Модуль subprocess отвечает за выполнение следующих действий: порождение новых процессов, соединение c потоками стандартного ввода, стандартного вывода, стандартного вывода сообщений об ошибках и получение кодов возврата от этих процессов.

Рекомендуемым подходом к работе с подпроцессами является использование следующих вспомогательных функций для всех случаев, где они могут справиться. Для более сложных случаев может быть использован непосредственно интерфейс Popen.

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) — выполняет команду, описанную args. Ожидает завершения команды, а затем возвращает код возврата.

Аргументы, приведенные выше, являются лишь наиболее распространенными из них. Полная сигнатура функция в значительной степени такая же, как конструктор Popen. Аргумент timeout передается Popen.wait(). Если тайм-аут истекает, дочерний процесс будет убит, а затем будет поднято исключение TimeoutExpired.

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) — выполняет команду, описанную args. Ожидает завершения команды, а затем завершается, если код возврата 0, или поднимает исключение CalledProcessError, объект которого возвращает код завершения атрибутом returncode.

subprocess.check_output(args, *, input=None, stdin=None, stderr=None, shell=False, universal_newlines=False, timeout=None) — выполняет команду и возвращает её вывод. Поднимает исключение CalledProcessError, если код возврата ненулевой.

Создание новых процессов и управление ими в данном модуле обрабатывается классом Popen. Он предлагает большую гибкость, так что разработчики могут справиться с менее распространенными случаями, не охваченными удобными функциями.

subprocess.DEVNULL — значение, которое может использоваться в качестве аргумента stdin, stdout или stderr. Означает, что будет использован специальный файл devnull.

subprocess.PIPE — значение, которое может использоваться в качестве аргумента stdin, stdout или stderr. Означает, что для дочернего процесса будет создан пайп.

subprocess.STDOUT — значение, которое может использоваться в качестве аргумента stderr. Означает, что поток ошибок будет перенаправлен в поток вывода.

Класс subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=()) — Выполняет программу в новом процессе. args – строка или последовательность аргументов программы. Обычно первым указывают исполняемую программу, а затем аргументы, но также ее можно указать в параметре executable.

Также Popen поддерживает менеджеры контекста:

Методы класса Popen:

Popen.poll() — если процесс завершил работу — вернёт код возврата, в ином случае None.

Popen.wait(timeout=None) — ожидает завершения работы процесса и возвращает код возврата. Если в течение timeout процесс не завершился, поднимется исключение TimeoutExpired (которое можно перехватить, после чего сделать ещё раз wait).

Popen.communicate(input=None, timeout=None) — взаимодействовует с процессом: посылает данные, содержащиеся в input в stdin процесса, ожидает завершения работы процесса, возвращает кортеж данных потока вывода и ошибок. При этом в Popen необходимо задать значение PIPE для stdin (если вы хотите посылать в stdin), stdout, stderr (если вы хотите прочитать вывод дочернего процесса).

Если в течение timeout процесс не завершился, поднимется исключение TimeoutExpired (которое можно перехватить, после чего сделать ещё раз communicate, либо убить дочерний процесс).

_popen, _wpopen _popen, _wpopen

Создает канал и выполняет команду. Creates a pipe and executes a command.

Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. This API cannot be used in applications that execute in the Windows Runtime. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows. For more information, see CRT functions not supported in Universal Windows Platform apps.

Синтаксис Syntax

Параметры Parameters

command command
Команда для выполнения. Command to be executed.

mode mode
Режим возвращенного потока. Mode of the returned stream.

Возвращаемое значение Return Value

Возвращает поток, связанный с одним концом созданного канала. Returns a stream associated with one end of the created pipe. Другой конец канала связан со стандартным инициированным потоком ввода и вывода команд. The other end of the pipe is associated with the spawned command’s standard input or standard output. Эти функции возвращают значение NULL при возникновении ошибки. The functions return NULL on an error. Если ошибка является недопустимым параметром, например, если команда или режим является пустым указателем, или режим не является допустимым, то для параметра « еинвал» устанавливается значение «равно». If the error is an invalid parameter, such as if command or mode is a null pointer, or mode is not a valid mode, errno is set to EINVAL. Сведения о допустимых режимах см. в разделе «Примечания». See the Remarks section for valid modes.

Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr. For information about these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

Примечания Remarks

Функция _popen создает канал и асинхронно выполняет порожденную копию обработчика команд с помощью указанной командыString. The _popen function creates a pipe and asynchronously executes a spawned copy of the command processor with the specified string command. Строка символов mode определяет запрошенный тип доступа, как показано ниже. The character string mode specifies the type of access requested, as follows.

Режим доступа Access mode Описание Description
«r» «r» Вызывающий процесс может считывать инициируемый поток вывода команд с помощью возвращенного потока. The calling process can read the spawned command’s standard output using the returned stream.
«w» «w» Вызывающий процесс может записывать инициируемый поток ввода команд с помощью возвращенного потока. The calling process can write to the spawned command’s standard input using the returned stream.
«b» «b» Открыть в двоичном режиме. Open in binary mode.
«t» «t» Открыть в текстовом режиме. Open in text mode.

При использовании в программе Windows функция _popen возвращает недопустимый указатель на файл, который приводит к тому, что программа перестает отвечать на запросы неограниченно долго. If used in a Windows program, the _popen function returns an invalid file pointer that causes the program to stop responding indefinitely. _popen работает правильно в консольном приложении. _popen works properly in a console application. Сведения о создании приложения Windows, которое перенаправляет ввод и вывод, см. в разделе Создание дочернего процесса с перенаправленным входом и выходом в Windows SDK. To create a Windows application that redirects input and output, see Creating a Child Process with Redirected Input and Output in the Windows SDK.

_wpopen — это версия _popenдля расширенных символов; Аргумент path для _wpopen является строкой расширенных символов. _wpopen is a wide-character version of _popen; the path argument to _wpopen is a wide-character string. в противном случае _wpopen и _popen ведут себя одинаково. _wpopen and _popen behave identically otherwise.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Процедура Tchar.h Tchar.h routine _UNICODE и _MBCS не определены _UNICODE and _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_tpopen _tpopen _popen _popen _popen _popen _wpopen _wpopen

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
_popen _popen
_wpopen _wpopen или or

Дополнительные сведения о совместимости см. в разделе Совместимость. For more compatibility information, see Compatibility.

Библиотеки Libraries

Пример Example

Пример результатов выполнения Sample Output

Эти выходные данные предполагают, что в текущем каталоге находится только один файл с расширением имени файла .c. This output assumes that there is only one file in the current directory with a .c file name extension.

Что такое код dba_popen

(PHP 3>= 3.0.8, PHP 4)

dba_open — открывает базу данных.

Описание

resource dba_open (string path, string mode, string handler [, . ])

dba_open() устанавливает экземпляр БД для path с режимом mode , используя handler .

path это обычный регулярный путь в вашей файловой системе.

mode это «r» — режим доступа для чтения (read), «w» для чтения/записи (read/write) к уже существующей БД, «c» для чтения/записи и создания БД, если она не существует, «n» для создания, усечения и для чтения/записи.

handler это имя дескриптора, который будет использован при доступе к path . Он передаёт все параметры-опции для dba_open() и работает от его имени.

dba_open() возвращает положительный дескриптор или FALSE , в случаях успеха и неудачи, соответственно.

База данных Oracle Database для начинающих: основы базы данных

Замечательный пакет UTL_FILE в СУБД Oracle позволяет легко записывать и читать файлы операционной системы. Пакет UTL_FILE предлагает сокращенную версию стандартного потокового ввода-вывода операционной системы. Процедуры и функции пакета UTL_FILE дают возможность открывать, читать, писать и закрывать файлы операционной системы. Oracle также использует пакет текстового ввода-вывода клиентской стороны по имени TEXT_IO как часть Oracle Procedure Builder.

Использование пакета UTL_FILE

Пакет UTL_FILE СУБД Oracle легко использовать для чтения и записи файлов операционной системы. Во многих случаях, когда нужно создавать отчеты, пакет UTL_FILE оказывается идеальным средством создания файла, который затем можно отправить куда-нибудь с помощью утилиты FTP. Далее в статье блога мы ознакомимся с простым примером, иллюстрирующим использование этого пакета.

Создание каталога файлов

Первый шаг в использовании пакета UTL_FILE — создание каталога, куда будут помещаться файлы операционной системы. Для этой цели создается специальный каталог:

Совет. Инициализационный параметр UTL_FILE_DIR все еще остается в силе, но в Oracle отныне не рекомендуют им пользоваться. Вместо этого рекомендуется применять команду CREATE DIRECTORY. Использование подхода на основе этой команды лучше, потому что не приходится перезапускать базу данных, как при добавлении параметра UTL_FILE_DIR.

Выдача привилегий пользователям

Вы должны выдать пользователям привилегии для чтения и записи файлов в только что созданный каталог utl_dir с помощью следующей команды:

Процедуры и функции UTL_FILE

Пакет UTL_FILE использует множество своих процедур и функций для выполнения файловых манипуляций и действий по записи и чтению текста. В следующем разделе кратко рассматриваются ключевые процедуры и функции пакета UTL_FILE.

На заметку! UTL_FILE.FILE_TYPE — тип данных для обработки файлов, который используется во всех процедурах и функциях пакета UTL_FILE. Как вы вскоре убедитесь, при каждом применении пакета UTL_FILE внутри анонимного блока кода PL/SQL или внутри процедуры первым делом нужно объявить дескриптор файла типа UTL_FILE.FILE_TYPE.

Открытие файла операционной системы

Функция FEOPEN служит для открытия файла операционной системы для ввода и вывода. Файл можно открывать в трех режимах: чтение (r), запись (w) или добавление (a).

Чтение из файла

Чтобы выполнить чтение файла, сначала при открытии файла функцией FOPEN специфицируется режим чтения (r). Процедура GET_FILE позволяет читать по одной строке текста за раз из указанного файла операционной системы.

Запись в файл

Чтобы осуществить запись в файл, он должен быть открыт в режиме записи (w) или добавления (a). В режиме добавления (a) осуществляется дописывание в файл, а в режиме записи (w) — перезапись файла, если он уже существует. Если файл не существует в каталоге UTL_FILE, то утилита UTL_FILE сначала создаст и затем выполнит запись в него. Обратите внимание, что создавать файл вручную не придется — об этом позаботится функция FOPEN.

Для записи строки в файл применяется процедура PUT. После того, как пакет выполнит запись в файл, можно произвести переход к следующей строке с помощью процедуры NEW_LINE. Однако для записи в текстовый файл лучше использовать процедуру PUT_LINE, которая работает как комбинация PUT и NEW_LINE.

Закрытие файла

После завершения чтения или записи файла необходимо с помощью процедуры FCLOSE закрыть файл операционной системы. Если открыто более одного файла, можно применить процедуру FCLOSE_ALL, чтобы закрыть их все сразу.

Исключения

Всякий раз, когда вы используете пакет UTL_FILE в процедуре или блоке PL/SQL, не забудьте в конец добавить блок обработки исключений, чтобы перехватывать все возможные ошибки, которые могут возникнуть. Например, местоположение каталога может быть неверным, или же в процедуре возникнет ошибка “no data found” (“данные не найдены”). Ошибки чтения и записи происходят по множеству причин. Пакет UTL_FILE включает в себя множество предопределенных исключений, и рекомендуется применять все эти исключения в конце процедуры или блока кода, чтобы облегчить отладку.В случае использования RAISE_APPLICATION_ERROR для связывания номера ошибки и сообщения с исключением будет намного легче отлаживать код.

Простой пример использования пакета UTL_FILE

Следующий анонимный код PL/SQL применяет пакет UTL_FILE для записи информации, связанной с паролем, с использованием представлений словаря данных DBA_USERS и DBA_PROFILES. Цель состоит в создании файла операционной системы со списком имен пользователей, максимальным количеством разрешенных попыток регистрации, длительностью действия и временем блокировки паролей. Этот блок кода приведен в листинге 6.12.

Что такое код dba_popen

Самая актуальная документация по Visual Studio 2020: Документация по Visual Studio 2020.

Открывает файл. Эти версии fopen, _wfopen усовершенствованной безопасностью, как описано в функции безопасности в CRT.

Параметры

[выходной] pFile
Указатель на файловый указатель, который получит указатель на открытый файл.

[in] filename
Имя файла.

[in] mode
Тип разрешенного доступа.

Возвращает нуль в случае успеха или код ошибки в случае неудачи. В разделе errno _doserrno, _sys_errlist и _sys_nerr Дополнительные сведения об этих кодах ошибок.

Условия ошибок

pFile filename mode Возвращаемое значение Содержание pFile
NULL любые любые EINVAL без изменений
any NULL любые EINVAL без изменений
any any NULL EINVAL без изменений

Файлы, открытые с помощью fopen_s и _wfopen_s , не поддерживают совместный доступ. Если требуется обеспечить общий файл, используйте _fsopen _wfsopen с соответствующие константой режима совместного доступа — например, _SH_DENYNO для совместного чтения или записи.

Функция fopen_s открывает файл, заданный параметром filename . _wfopen_s — это двухбайтовая версия fopen_s ; аргументы для _wfopen_s представляют собой двухбайтовые строки. Поведение _wfopen_s и fopen_s идентично в противном случае.

Функция fopen_s принимает пути, допустимые в файловой системе во время выполнения; UNC-пути и пути, в которых фигурируют сопоставленные сетевых диски, принимаются функцией fopen_s , если система, которая выполняет код, имеет доступ к общему или сетевому диску в момент выполнения. При построении путей для fopen_s убедитесь, что драйверы, пути или сетевые общие папки будут доступны в среде выполнения. Можно использовать символы косой черты (/) или обратной косой черты (\) в качестве разделителей каталогов в пути.

Эти функции проверяют свои параметры. Если pFile , filename , или mode является пустым указателем, эти функции создают исключение недопустимого параметра, как описано в проверки параметров.

Всегда проверяйте возвращаемое значение, чтобы узнать, успешно ли выполнила свою работу функция, прежде чем выполнять какие-либо дальнейшие операции с файлом. При возникновении ошибки возвращается ее код и задается глобальная переменная errno . Дополнительные сведения см. в разделе errno _doserrno, _sys_errlist и _sys_nerr.

fopen_s поддерживает файловые потоки Юникода. Чтобы открыть новый или существующий файл Юникода, передайте флаг ccs , задающий нужную кодировку, в fopen_s :

Допустимые значения encoding — UNICODE , UTF-8 и UTF-16LE . Если значение для encoding не задано, fopen_s использует кодировку ANSI.

Если файл уже существует и открыт для чтения или добавления, метка порядка байтов (BOM), если она присутствует в файле, определяет кодировку. Кодировка, заданная меткой BOM, имеет приоритет над кодировкой, заданной флагом ccs . Заданная флагом ccs кодировка используется, только если метка BOM отсутствует или речь идет о новом файле.

Обнаружение метки BOM применяется только к файлам, которые будут открываться в режиме Юникода (т. е. путем передачи флага ccs ).

В следующей таблице приведены режимы, которые используются для различных флагов ccs , передаваемых fopen_s , и для меток порядка байтов в файле.

Кодирования, используемые на основе CCS-флага и метки BOM

Примечание
Флаг ccs Нет метки BOM (или новый файл) BOM: UTF-8 BOM: UTF-16
UNICODE UTF-16LE UTF-8 UTF-16LE
UTF-8 UTF-8 UTF-8 UTF-16LE
UTF-16LE UTF-16LE UTF-8 UTF-16LE

В файлы, открываемые для записи в режиме Юникода, метка BOM записывается автоматически.

Если mode — a, ccs= , функция fopen_s сначала пытается открыть файл с доступом на чтение и запись. Если эта операция завершается успешно, функция считывает метку BOM, чтобы определить кодировку для файла; если операция завершается сбоем, функция использует для файла кодировку по умолчанию. В любом случае fopen_s затем снова открывает файл с доступом только на запись. (Это актуально только для режима a , но не a+ .)

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H _UNICODE и _MBCS не определены _MBCS определено _UNICODE определено
_tfopen_s fopen_s fopen_s _wfopen_s

Символьная строка mode указывает тип доступа, который запрошен для файла, следующим образом.

«r»
Открывает для чтения. Если файл не существует или его невозможно найти, вызов fopen_s завершается ошибкой.

«w»
Открывает пустой файл для записи. Если файл существует, его содержимое удаляется.

«a»
Открывает файл для записи в конец файла (добавления) без удаления маркера конца файла перед записью в файл новых данных. Создает файл, если он не существует.

«r+»
Открывает для чтения и записи. (Файл должен существовать.)

«w+»
Открывает пустой файл для чтения и записи. Если файл существует, его содержимое удаляется.

«a+»
Открывается для чтения и добавления. Операция добавления включает в себя удаление маркера конца файла перед записью новых данных в файл. По завершении записи маркер конца файла восстанавливается. Создает файл, если он не существует.

Если файл открывается с использованием типа доступа «a» или «a+» , все операции записи выполняются в конце файла. Файловый указатель может быть перемещен с помощью fseek или rewind , но он всегда возвращается в конец файла перед выполнением какой-либо операции записи, поэтому существующие данные не могут быть перезаписаны.

Режим «a» не удаляет маркер конца файла перед добавлением в файл. После добавления команда MS-DOS TYPE отображает данные только до первоначального маркера конца файла, но не данные, добавленные в файл. Перед добавлением в файл режим «a+» удаляет маркер конца файла. После добавления команда TYPE MS-DOS отображает все данные в файле. Режим «a+» необходим для добавления данных в потоковый файл, завершаемый маркером конца файла CTRL+Z.

Когда «r+»,«»w+», или «a+» задан тип доступа, чтение и запись разрешены. (Считается, что файл открыт для «обновления»). Однако при переходе от чтения к записи операция ввода должна получить маркер конца файла. Если маркер конца файла отсутствует, необходимо воспользоваться промежуточным вызовом функции позиционирования в файле. Функции позиционирования в файле — это fsetpos , fseek и rewind . При переходе от записи к чтению необходимо воспользоваться промежуточным вызовом либо функции fflush , либо функции позиционирования в файле.

В дополнение к указанным выше значениям, в параметр mode можно добавить следующие символы, чтобы задать режим преобразования для символов новой строки:

t
Откройте файл в текстовом (переведенном) режиме. В этом режиме CTRL+Z интерпретируется как символ конца файла на входе. В файлах, открытых для чтения/записи с использованием режима «a+» , fopen_s проверяет наличие символа CTRL+Z в конце файла и удаляет его, если это возможно. Это делается потому, что использование функций fseek и ftell для перемещения в пределах файла, который заканчивается символом CTRL+Z, может вызвать неправильное поведение fseek вблизи конца файла.

Кроме того, в текстовом режиме сочетания символов возврата каретки и перевода строки переводятся в один символ перевода строки на входе, а символы перевода строки преобразуются на выходе в сочетания символов возврата каретки и перевода строки. Если функция ввода-вывода потока Юникода работает в текстовом режиме (по умолчанию) исходный или конечный поток рассматривается как последовательность многобайтовых символов. Поэтому входные функции потока Юникода преобразуют многобайтовые символы в расширенные (как если бы для этого вызывалась функция mbtowc ). По той же причине выходные функции потока Юникода преобразуют расширенные символы в многобайтовые (как если бы для этого вызывалась функция wctomb ).

b
При открытии в двоичном (непреобразованном) режиме преобразования, включающие символы возврата каретки и перевода строки, подавляются.

Если символ t или b в параметре mode не указан, режим преобразования по умолчанию определяется глобальной переменной _fmode. Если символ t или b указан как префикс аргумента, функция завершается с ошибкой и возвращает NULL .

Дополнительные сведения об использовании текстового и двоичного режимов в Юникод и многобайтовая поток ввода-вывода см. в разделе текста и двоичный режим файлового ввода-вывода и Юникода потоковый ввод-вывод в текстовом и двоичном режиме.

c
Включите флажок фиксации для связанного объекта filename , чтобы содержимое файлового буфера записывалось непосредственно на диск при вызове fflush или _flushall .

n
Сбросьте флажок фиксации для связанного объекта filename , задайте для него значение «без фиксации». Это значение по умолчанию. Оно также переопределяет глобальный флаг фиксации при соединении программы с COMMODE.OBJ. Значение по умолчанию глобального флага фиксации — «без фиксации» (no-commit), если только программа не связана явно с файлом COMMODE.OBJ (см. статью Link Options).

N
Указывает, что файл не наследуется дочерними процессами.

S
Указывает, что кэширование оптимизировано для последовательного доступа с диска, но не ограничивается им.

R
Указывает, что кэширование оптимизировано для случайного доступа с диска, но не ограничивается им.

T
Определяет файл как временный. По возможности он не сбрасывается на диск.

D
Определяет файл как временный. Он удаляется, если закрывается последний указатель файла.

ccs=ENCODING
Задает набор кодированных символов, которые требуется использовать для этого файла (UTF-8, UTF-16LE и UNICODE). Если требуется использовать кодировку ANSI, не указывайте никакое значение.

Допустимые символы для mode строку, используемую в fopen_s и _fdopen соответствуют oflag аргументы, используемые в _open и _sopen, как показано ниже.

Символы в строке режима Эквивалентный oflag значение _open / _sopen
a _O_WRONLY | _O_APPEND (обычно _O_WRONLY | _O_CREAT |«_O_APPEND )
a+ _O_RDWR | _O_APPEND (обычно _O_RDWR | _O_APPEND | _O_CREAT )
r _O_RDONLY
r+ _O_RDWR
w _O_WRONLY (обычно _O_WRONLY |«_O_CREAT | _O_TRUNC )
w+ _O_RDWR (обычно _O_RDWR | _O_CREAT | _O_TRUNC )
b _O_BINARY
t _O_TEXT
c Нет
n Нет
S _O_SEQUENTIAL
R _O_RANDOM
T _O_SHORTLIVED
D _O_TEMPORARY
ccs=UNICODE _O_WTEXT
ccs=UTF-8 _O_UTF8
ccs=UTF-16LE _O_UTF16

Если вы используете режим rb , не собираетесь портировать код, планируете считывать большое количество файлов или не заботитесь о быстродействии сети, можно рассмотреть вариант с использованием размещенных в памяти файлов Win32.

Функция Обязательный заголовок
fopen_s
_wfopen_s или

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

c , n , И t mode являются расширениями Microsoft для fopen_s и _fdopen и не должны использоваться где требуется переносимость ANSI.

Что такое код dba_popen

(PHP 3>= 3.0.8, PHP 4)

dba_popen — открывает БД на постоянной основе.

Описание

resource dba_popen (string path, string mode, string handler [, . ])

dba_popen() устанавливает постоянный экземпляр БД для path с mode с использованием handler .

path это обычный регулярный путь вашей файловой системы.

mode это «r» — режим доступа для чтения (read), «w» для чтения/записи (read/write) к уже существующей БД, «c» для чтения/записи и создания БД, если она не существует, «n» для создания, усечения и для чтения/записи.

handler это имя дескриптора, который будет использован при доступе к path . Он передаёт все параметры-опции для dba_popen() и может работать от его имени.

dba_popen() возвращает положительный дескриптор или FALSE , в случаях успеха открытия или неудачи, соответственно.

Что такое код dba_popen

(PHP 3>= 3.0.8, PHP 4 )

dba_popen — Open database persistently

Description resource dba_popen ( string path, string mode, string handler [, . ])

dba_popen() establishes a persistent database instance for path with mode using handler .

path is commonly a regular path in your filesystem.

mode is «r» for read access, «w» for read/write access to an already existing database, «c» for read/write access and database creation if it doesn’t currently exist, and «n» for create, truncate and read/write access.

dba_popen() returns a positive handle or FALSE , in the case the open is successful or fails, respectively.

Илон Маск рекомендует:  Что такое код fbsql_set_transaction
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL