1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
/*
* Copyright (C) by Argonne National Laboratory
* See COPYRIGHT in top-level directory
*/
#include "adio.h"
/* set the shared file pointer to "offset" etypes relative to the current
view */
void ADIOI_NFS_Set_shared_fp(ADIO_File fd, ADIO_Offset offset, int *error_code);
void ADIO_Set_shared_fp(ADIO_File fd, ADIO_Offset offset, int *error_code)
{
ADIO_Status status;
MPI_Comm dupcommself;
#ifdef ROMIO_NFS
if (fd->file_system == ADIO_NFS) {
ADIOI_NFS_Set_shared_fp(fd, offset, error_code);
return;
}
#endif
if (fd->shared_fp_fd == ADIO_FILE_NULL) {
MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
fd->shared_fp_fname,
fd->file_system,
fd->fns,
ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE,
0, MPI_BYTE, MPI_BYTE,
MPI_INFO_NULL, ADIO_PERM_NULL, error_code);
}
if (*error_code != MPI_SUCCESS)
return;
ADIOI_WRITE_LOCK(fd->shared_fp_fd, 0, SEEK_SET, sizeof(ADIO_Offset));
ADIO_WriteContig(fd->shared_fp_fd, &offset, sizeof(ADIO_Offset),
MPI_BYTE, ADIO_EXPLICIT_OFFSET, 0, &status, error_code);
ADIOI_UNLOCK(fd->shared_fp_fd, 0, SEEK_SET, sizeof(ADIO_Offset));
}
|