rtsIDr (1158449), страница 21
Текст из файла (страница 21)
| *IndirectAccessGroupRefPtr | | ссылка на группу буферов. |
| BufferHeader | | заголовок включаемого буфера. |
Возвращается нулевое значение.
15.8Запуск загрузки буферов удаленных элементов заданной группы
long loadig_ (IndirectAccessGroupRef *IndirectAccessGroupRefPtr);
*IndirectAccessGroupRefPtr ссылка на группу буферов.
Возвращается нулевое значение.
15.9Ожидание завершения загрузки буферов удаленных элементов заданной группы
long waitig_ (IndirectAccessGroupRef *IndirectAccessGroupRefPtr);
*IndirectAccessGroupRefPtr ссылка на группу буферов.
Возвращается нулевое значение.
15.10Уничтожение группы буферов удаленных элементов нерегулярного доступа
long delig_ (IndirectAccessGroupRef *IndirectAccessGroupRefPtr);
*IndirectAccessGroupRefPtr ссылка на уничтожаемую группу буферов.
Группа буферов удалённых элементов может быть уничтожена функцией delig_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10).
Группа буферов может быть уничтожена также с помощью функции delobj_ (см.п.17.5).
Возвращается нулевое значение.
16ВВОД/ВЫВОД
16.1Аналоги библиотеки языка C
Перечисленные ниже функции предназначены для ввода/вывода переменных, каждая из которых в момент вывода имеет одно и то же значение во всех процессорах решающего поля или принимает его после ввода. Их (функций) реализация основана на выполнении соответствующей функции библиотеки языка C только одним процессором, называемым процессором ввода/вывода, с последующей рассылкой результатов выполнения, если таковые имеются, всем остальным процессорам решающего поля. Например, применение функции dvm_printf приведет к однократному выводу, осуществленному процессором ввода/вывода, а применение функции printf – к многократному, произведенному каждым процессором решающего поля. Определить, является ли текущий процессор процессором ввода/вывода, при необходимости можно с помощью функции tstio_, описанной в п.17.6.
Функции ввода/вывода стандартной библиотеки языка C (ANSI), отсутствующие в нижеприведенном списке функций-аналогов (т.е. не имеющие нежелательных эффектов многократного выполнения), могут использоваться программой пользователя без всяких ограничений.
16.1.1Функции ввода/вывода высокого уровня
ANSI:
| void | dvm_clearerr | (DVMFILE *StreamPtr); |
| int | dvm_fclose | (DVMFILE *StreamPtr); |
| int | dvm_feof | (DVMFILE *StreamPtr); |
| int | dvm_ferror | (DVMFILE *StreamPtr); |
| int | dvm_fflush | (DVMFILE *StreamPtr); |
| int | dvm_fgetc | (DVMFILE *StreamPtr); |
| int | dvm_fgetpos | (DVMFILE *StreamPtr, fpos_t *PosPtr); |
| char | *dvm_fgets | (char *StringPtr, int n, DVMFILE *StreamPtr); |
| DVMFILE | *dvm_fopen | (const char *FileNamePtr, const char *TypePtr); |
| int | dvm_fprintf | (DVMFILE *StreamPtr, const char *FormatPtr [,Argument,...]); |
| void | dvm_void_fprintf | (DVMFILE *StreamPtr, const char *FormatPtr [,Argument,...]); |
| int | dvm_fputc | (int c,DVMFILE *StreamPtr); |
| int | dvm_fputs | (const char *StringPtr, DVMFILE *StreamPtr); |
| int | dvm_fread | (void *BufferPtr, size_t Size, size_t Count, DVMFILE *StreamPtr); |
| DVMFILE | *dvm_freopen | (const char *FileNamePtr, const char *TypePtr, DVMFILE *StreamPtr); |
| int | dvm_fscanf | (DVMFILE *StreamPtr, const char *FormatPtr [,ArgumentPtr,...]); |
| int | dvm_fseek | (DVMFILE *StreamPtr, long Offset, int Origin); |
| int | dvm_fsetpos | (DVMFILE *StreamPtr, const fpos_t *PosPtr); |
| long | dvm_ftell | (DVMFILE *StreamPtr); |
| int | dvm_fwrite | (const void *BufferPtr, size_t Size, size_t Count, DVMFILE *StreamPtr); |
| int | dvm_getc | (DVM_FILE *StreamPtr); |
| int | dvm_getchar | (void); |
| char | *dvm_gets | (char *BufferPtr); |
| int | dvm_printf | (const char *FormatPtr, ... ); |
| void | dvm_void_printf | (const char *FormatPtr, ... ); |
| int | dvm_putc | (int c, DVMFILE *StreamPtr); |
| int | dvm_putchar | (int c); |
| int | dvm_puts | (char const *StringPtr); |
| void | dvm_rewind | (DVMFILE *StreamPtr); |
| int | dvm_scanf | (const char *FormatPtr, [,ArgumentPtr,...]); |
| void | dvm_setbuf | (DVMFILE *StreamPtr, char *BufferPtr); |
| int | dvm_setvbuf | (DVMFILE *StreamPtr, char *BufferPtr, |
| DVMFILE | *dvm_tmpfile | (void); |
| int | dvm_ungetc | (int c,DVMFILE *StreamPtr); |
| int | dvm_vfprintf | (DVMFILE *StreamPtr, const char *FormatPtr, |
| void | dvm_void_vfprintf | (DVMFILE *StreamPtr, const char *FormatPtr, |
| int | dvm_vprintf | (const char *FormatPtr, va_list ArgList); |
| void | dvm_void_vprintf | (const char *FormatPtr, va_list ArgList); |
BORLAND-C & MICROSOFT-C:
| int | dvm_fgetchar | (void); |
| int | dvm_fputchar | (int c); |
BORLAND-C:
| int | dvm_vfscanf | (DVMFILE *StreamPtr, const char FormatPtr, |
| int | dvm_vscanf | (const char *FormatPtr, va_list ArgList); |
В вышеперечисленных функциях для задания стандартных потоков ввода/вывода могут быть использованы следующие указатели:
| DVMFILE *DVMSTDIN | | стандартный ввод; |
| DVMFILE *DVMSTDOUT | | стандартный вывод; |
| DVMFILE *DVMSTDERR | | стандартный вывод сообщений об ошибках; |
| DVMFILE *DVMSTDAUX | | стандартный последовательный порт; |
| DVMFILE *DVMSTDPRN | | стандартное устройство печати. |
Замечание 1. Функции dvm_void_printf, dvm_void_fprintf, dvm_void_vprintf и dvm_void_vfprintf отличаются (в своей реализации) от функций dvm_printf, dvm_fprintf, dvm_vprintf и dvm_vfprintf тем, что процессор ввода/вывода не рассылает всем остальным процессорам значения, возвращаемые ему функциями printf, fprintf, vprintf и vfprintf, т.е. более быстрым выполнением.
Замечание 2. Функции dvm_fread и dvm_fwrite могут быть использованы для чтения и записи распределённых массивов. Для этого BufferPtr должен указывать на заголовок распределённого массива. В этом случае размер элемента массива полагается равным не Size, а *TypeSizePtr (тому значению, которое было задано при создании массива с помощью функции crtda_). Число читаемых или записываемых элементов полагается равным минимуму между Count*Size/(*TypeSizePtr) и числом элементов распределённого массива (см. также описание функций dvm_dfread и dvm_dfwrite в п.п.16.2 и 16.3).
Распределённый массив, задаваемый при обращении к функциям dvm_fread и dvm_fwrite, должен быть отображён в процессорную систему, каждый элемент которой обязан принадлежать текущей процессорной системе.
Замечание 3. Доступ к стандартному потоку stdaux (stdprn) через указатель DVMSTDAUX (DVMSTDPRN) возможен лишь при компиляции системы поддержки с определённой переменной компиляции _DVM_STDAUX_ (_DVM_STDPRN_).
16.1.2Функции ввода/вывода нижнего уровня
BORLAND-C & MICROSOFT-C & PORTLAND GROUP-C:
| int | dvm_close | (DVMHANDLE *HandlePtr); |
| int | dvm_fstat | (DVMHANDLE *HandlePtr, struct stat *BufferPtr); |
| long | dvm_lseek | (DVMHANDLE *HandlePtr, long Offset,int Origin); |
| DVMHANDLE | *dvm_open | (const char *FileNamePtr, int OFlag, int PMode); |
| int | dvm_read | (DVMHANDLE *HandlePtr, char *BufferPtr, |
| int | dvm_write | (DVMHANDLE *HandlePtr, const void *BufferPtr, |
Для доступа к стандартным потокам ввода/вывода в функциях ввода/вывода нижнего уровня могут использоваться следующие указатели:
| DVMSTREAM0 | | стандартный ввод; |
| DVMSTREAM1 | | стандартный вывод; |
| DVMSTREAM2 | | стандартный вывод сообщений об ошибках; |
| DVMSTREAM3 | | стандартный последовательный порт; |
| DVMSTREAM4 | | стандартное устройство печати. |
16.1.3Операции над каталогами и файлами
ANSI:
| int | dvm_remove | (const char *FileNamePtr); |
| int | dvm_rename | (const char *OldNamePtr, const char *NewNamePtr); |
| char | *dvm_tmpnam | (char *FileNamePtr); |
BORLAND-C & MICROSOFT-C & PORTLAND GROUP-C:
| int | dvm_access | (const char *FileNamePtr, int Mode); |
| int | dvm_stat | (const char *FileName, struct stat *BufferPtr); |
| int | dvm_unlink | (const char *FileNamePtr); |
Замечание. Функции ввода/вывода нижнего уровня, а также функции dvm_access и dvm_stat доступны пользовательской программе лишь в том случае, если библиотека используемого компилятора языка C содержит соответствующие им функции. Для использования функций ввода/вывода нижнего уровня система поддержки и программа пользователя должны быть скомпилированы с определённой переменной компиляции _DVM_LLIO_. Подключение функции dvm_access (dvm_stat) достигается компиляцией с определённой переменной _ACCESS_FUN_ (_STRUCT_STAT_).
При работе в среде WINDOWS+MPI+MICROSOFT_C (WINDOWS+MICROSOFT_C) подключение всех перечисленных выше функций осуществляется компиляцией системы поддержки и программы пользователя с определённой переменной компиляции _WIN_MPI_ (_DVM_MSC_).
16.2Чтение файла в подмассив распределенного массива
| long DisArrRead ( | DVMFILE | *StreamPtr, |















