Параллельное программирование: Учебное пособие, страница 128

Каждый процесс "видит" файл в соответствии с тем представлением данных, которое используется на той платформе, на которой он выполняется. Преобразование форматов хранения данных не производится.

Таблица 6.4. Режимы доступа к файлу

Режим

Описание

MPI_MODE_RDONLY

Открыть только для чтения

MPI_MODE_RDWR

Открыть для чтения и записи

MPI_MODE_WRONLY

Открыть только для записи

MPI_MODE_CREATE

Создать файл, если не существует

MPI_MODE_EXCL

Вернуть сообщение об ошибке, если создаваемый файл уже существует

MPI_MODE_DELETE_ON_CLOSE

Удалить файл после закрытия

MPI_MODE_UNIQUE_OPEN

Открыть файл только один раз

MPI_MODE_SEQUENTIAL

Открыть файл только для последовательного доступа

MPI_MODE_APPEND

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

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

Подпрограмма MPI_Info_create создает информационный параметр info, который является выходным:

int MPI_Info_create(MPI_Info *info)

В этот информационный параметр с помощью подпрограммы MPI_Info_set можно добавить специальную пару входных параметров (ключ, значение):

int MPI_Info_set(MPI_Info info, char *key, char *value)

Подпрограмма MPI_Info_get_nkeys возвращает количество подобного рода ключей, добавленных ранее в информационный параметр:

int MPI_Info_get_nkeys(MPI_Info info, int *nkeys)

Входным параметром является информационный параметр info, а выходным nkeys — количество определенных ключей.

Получить значение n-го по счету, ключа в информационном параметре info можно с помощью подпрограммы MPI_Info_get_nthkey, которая возвращает значение ключаkey:

int MPI_Info_get_nthkey(MPI_Info info,

intn, char *key)

Длина значения, соответствующего ключуkey, определяется с помощью подпрограммы MPI_Info_get_valuelen:

int MPI_Info_get_valuelen(MPI_Info info,

char *key, int *valuelen, int *flag)

Ее входные параметры:

·  info — информационный параметр;

·  key — ключ;

Возвращаются:

·  valueien — длина аргумента value;

·  flag — флаг, значение которого равно "истина", если ключ определен.

Извлечь значение (value), связанное с ключом, можно с помощью подпрограммы MPI_Info_get:

int MPI_Info_get(MPI_Info info, char *key,

                 int valuelen, char *value, int *flag)

Входные параметры:

·  info — информационный параметр;

·  key — ключ;

·  valuelen — длина аргументаvalue.

Если ключ не определен, параметру flag присваивается значение false.

Пара (ключ, значение) удаляется из информационного параметра подпрограммой MPI_Info_delete:

int MPI_Info_delete(MPI_Info info, char *key)

Ее входными параметрами являются:

·  info — информационный параметр;

·  key — ключ (строковое значение).

Подпрограмма MPI_Info_free уничтожает информационный параметр:

int MPI_Info_free(MPI_Info *info)

Чтение из файла данных без блокировки процесса с использованием индивидуального файлового указателя выполняется с помощью подпрограммы MPI_File_iread:

int MPI_File_iread(MPI_File fh, void *buf, int count,

MPI_Datatype datatype, MPIO_Request *request)

Ее входными параметрами являются:

·  fh — файловый дескриптор;

·  count — количество элементов в буфере;

·  datatype — тип каждого элемента в буфере.

Выходными параметрами являются:

·  buf — стартовый адрес буфера;

·  request — идентификатор операции.

Подпрограммой MPI_File_iwrite выполняется запись без блокирования:

int MPI_File_iwrite(MPI_File fh, void *buf, int count,

MPI_Datatype datatype, MPIO_Request *request)

Ее параметры:

·  fh — файловый дескриптор;