next up previous contents
Next: Закрытие файла. Up: Работа с файлами. Previous: Работа с файлами.   Contents

Открытие файла.





MPI_FILE_OPEN(comm, filename, amode, info, fh)



IN comm коммуникатор (дескриптор)
IN filename имя открываемого файла (строка)
IN amode тип доступа к файлу (целое)
IN info информационный объект (дескриптор)
OUT fh новый дескриптор файла (дескриптор)




int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh) MPI_FILE_OPEN(COMM, FILENAME, AMODE, INFO, FH, IERROR) CHARACTER*(*) FILENAME INTEGER COMM, AMODE, INFO, FH, IERROR static MPI::File MPI::File::Open(const MPI::Intracomm& comm, const char* filename, int amode, const MPI::Info& info) MPI_FILE_OPEN открывает файл с именем filename для всех процессов из группы коммуникатора comm. MPI_FILE_OPEN - это коллективная подпрограмма: все процессы должны обеспечивать одинаковое значение amode и имена файлов, указывающие на один и тот же файл. (Значения info могут быть различны.) comm должен быть внешним коммуникатором; было бы ошибочно использовать внутренний коммуникатор при вызове MPI_FILE_OPEN. Ошибки в MPI_FILE_OPEN генерируются при помощи стандартного дескриптора ошибок работы с файлами (см. раздел I/O Error Handling ). Процесс может открыть файл независимо от других процессов, используя коммуникатор MPI_COMM_SELF. Возвращаемый дескриптор файла fh может быть использован для доступа до тех пор, пока файл не закроется при помощи MPI_FILE_CLOSE. Перед вызовом MPI_FINALIZE пользователь обязан закрыть (посредством MPI_FILE_CLOSE) все файлы, открытые с помощью MPI_FILE_OPEN. Заметим, что MPI_FILE_OPEN не влияет на коммуникатор comm, и тот остается доступным для всех подпрограмм MPI (например, MPI_SEND). Более того, использование comm не связано с поведением потока ввода/вывода.

Формат для задания имени файла в filename зависит от реализации и для каждой конкретной реализации должен быть документирован.

Совет разработчикам: При реализации может требоваться, чтобы filename включал в себя строку или строки, задающие дополнительную информацию о файле. Примерами могут послужить тип файловой системы (например, префикс ufs:), имя удаленного сервера (например, префикс machine.univ.edu:), или пароль к файлу (например, постфикс /PASSWORD=SECRET). []

Совет пользователям:

В некоторых реализациях MPI имена файлов могут не совпадать в различных процессах. Например, ``/tmp/foo'' может обозначать в разных процессах разные файлы; в то же время файл может иметь различные имена в зависимости от расположения процесса. Ответственность за обеспечение того, чтобы файл соответствовал аргументу filename, лежит на пользователе, так как для реализации иногда невозможно обнаружить такого рода ошибки.[]

Изначально все процессы просматривают файл как линейный поток байтов, и каждый процесс просматривает данные в своем собственном представлении (не производится никаких преобразований представления). (Файлы POSIX являются линейными потоками байтов в родном представлении.) Вид файла может быть изменен посредством подпрограммы MPI_FILE_SET_VIEW.

Поддерживаются следующие типы доступа (задаваемые в amode, получаемом при применении OR к следующим целым константам):

Совет пользователям:

Пользователи Си/С++ могут использовать побитовую операцию ИЛИ (OR), чтобы объединить эти константы; пользователи ФОРТРАН90 могут использовать встроенную операцию IOR. Пользователи ФОРТРАН77 могут использовать (непереносимо на другие системы) побитовую операцию IOR на тех системах, которые ее поддерживают. Кроме этого, пользователи ФОРТРАН могут использовать (переносимо) целочисленное сложение, чтобы получить желаемый результат (каждая константа должна входить в сумму не более одного раза). []

Совет разработчикам: Значения данных констант должны быть определены таким образом, чтобы побитовое ИЛИ и сумма любого неповторяющегося набора из этих констант были эквивалентны. []

Типы доступа MPI_MODE_RDONLY,MPI_MODE_RDWR, MPI_MODE_WRONLY, MPI_MODE_CREATE, и
[]MPI_MODE_EXCL имеют семантику, идентичную их POSIX аналогам. Ровно один из типов
[]MPI_MODE_RDONLY, MPI_MODE_RDWR или MPI_MODE_WRONLY должен быть задан. Ошибочно определять MPI_MODE_CREATE или MPI_MODE_EXCL в сочетании с MPI_MODE_RDONLY; ошибочно также определять MPI_MODE_SEQUENTIAL вместе с MPI_MODE_RDWR.

Тип MPI_MODE_DELETE_ON_CLOSE вызывает удаление файла (эквивалент вызову MPI_FILE_DELETE), когда файл закрывается.

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

Совет пользователям:

Для MPI_MODE_UNIQUE_OPEN, не открыт где-либо еще включает в себя процессы как внутри среды MPI, так и вне ее. В частности, необходимо быть осведомленным о возможных внешних событиях, которые могут открывать файлы (например, автоматические системы создания резервных копий). Когда определен тип MPI_MODE_UNIQUE_OPEN, на пользователе лежит ответственность за то, чтобы никакие события такого рода не происходили. []

Тип MPI_MODE_SEQUENTIAL позволяет реализации оптимизировать доступ к некоторым последовательным устройствам (кассеты и сетевые потоки). Ошибочно пытаться произвести непоследовательный доступ к файлу, который был открыт с данным типом доступа.

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

Ошибки, связанные с типами доступа, генерируются в классе MPI_ERR_AMODE. Аргумент info используется для обеспечения информации относительно шаблонов доступа к файлам и специфики файловой системы (см. раздел File Info ). В случаях, когда не нужно определять эту информацию, может быть использована константа MPI_INFO_NULL.

Совет пользователям:

Некоторые файловые атрибуты зависят от атрибутов, присущих реализации (например, права доступа к файлам). Эти атрибуты должны быть установлены, используя или аргумент info, или средства вне оболочки MPI. []

Файлы по умолчанию открываются с использованием неатомарной семантики непротиворечивости (см. раздел File Consistency ). Более строгая атомарная семантика, необходимая для атомарности конфликтующих попыток доступа, может быть

установлена функцией MPI_FILE_SET_ATOMICITY.


next up previous contents
Next: Закрытие файла. Up: Работа с файлами. Previous: Работа с файлами.   Contents
Alex Otwagin 2002-12-10