📄 adio.h
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* * Copyright (C) 1997 University of Chicago. * See COPYRIGHT notice in top-level directory. *//* main include file for ADIO. contains general definitions, declarations, and macros independent of the underlying file system *//* Functions and datataypes that are "internal" to the ADIO implementation prefixed ADIOI_. Functions and datatypes that are part of the "externally visible" (documented) ADIO interface are prefixed ADIO_. An implementation of MPI-IO, or any other high-level interface, should not need to use any of the ADIOI_ functions/datatypes. Only someone implementing ADIO on a new file system, or modifying an existing ADIO implementation, would need to use the ADIOI_ functions/datatypes. */#ifndef ADIO_INCLUDE#define ADIO_INCLUDE#ifdef SPPUX#define _POSIX_SOURCE#endif#ifdef USE_FORT_STDCALL#define FORT_CALL __stdcall#elif defined (USE_FORT_CDECL)#define FORT_CALL __cdecl#else#define FORT_CALL#endif#ifdef USE_FORT_MIXED_STR_LEN#define FORT_MIXED_LEN_DECL , int#define FORT_END_LEN_DECL#define FORT_MIXED_LEN(a) , int a#define FORT_END_LEN(a)#else#define FORT_MIXED_LEN_DECL#define FORT_END_LEN_DECL , int#define FORT_MIXED_LEN(a)#define FORT_END_LEN(a) , int a#endif#ifdef HAVE_FORTRAN_API# ifdef FORTRAN_EXPORTS# define FORTRAN_API __declspec(dllexport)# else# define FORTRAN_API __declspec(dllimport)# endif#else# define FORTRAN_API#endif/* Use this macro for each parameter to a function that is not referenced in the body of the function */#ifdef HAVE_WINDOWS_H#define ADIOI_UNREFERENCED_ARG(a) a#else#define ADIOI_UNREFERENCED_ARG(a)#endif/* Include romioconf.h if we haven't already (some include files may need to include romioconf before some system includes) */#ifndef ROMIOCONF_H_INCLUDED#include "romioconf.h"#define ROMIOCONF_H_INCLUDED#endif#include "mpi.h"#include "mpio.h"#ifdef HAVE_FCNTL_H#include <fcntl.h>#endif#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#include <sys/stat.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#ifdef SPPUX#include <sys/cnx_fcntl.h>#endif#ifdef ROMIO_NTFS#include <winsock2.h>#include <windows.h>#define FDTYPE HANDLE#else#define FDTYPE int#endif#ifdef MPI_OFFSET_IS_INT typedef int ADIO_Offset;# define ADIO_OFFSET MPI_INT#elif defined(HAVE_LONG_LONG_64) typedef long long ADIO_Offset;# ifdef HAVE_MPI_LONG_LONG_INT# define ADIO_OFFSET MPI_LONG_LONG_INT# else# define ADIO_OFFSET MPI_DOUBLE# endif#elif defined(HAVE_INT64) typedef __int64 ADIO_Offset;# define ADIO_OFFSET MPI_DOUBLE#else typedef long ADIO_Offset;# define ADIO_OFFSET MPI_LONG#endif#ifndef SX4# define MPI_AINT MPI_LONG /* may need to change this later */#else# if (defined(_SX) && !defined(_LONG64))# define MPI_AINT MPI_LONG_LONG_INT# else# define MPI_AINT MPI_LONG# endif#endif#define ADIO_Status MPI_Status #ifndef MPIO_INCLUDE# ifdef NEEDS_MPI_FINT typedef int MPI_Fint; # endif#endif#if (!defined(HAVE_MPI_INFO) && !defined(MPIO_INCLUDE)) typedef struct MPIR_Info *MPI_Info;# define MPI_INFO_NULL 0# define MPI_MAX_INFO_VAL 1024int MPI_Info_create(MPI_Info *info);int MPI_Info_set(MPI_Info info, char *key, char *value);int MPI_Info_delete(MPI_Info info, char *key);int MPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag);int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag);int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);int MPI_Info_free(MPI_Info *info);#ifdef MPI_Info_f2c#undef MPI_Info_f2c#endif#ifdef MPI_Info_c2f#undef MPI_Info_c2f#endif/* above needed for some versions of mpi.h in MPICH!! */MPI_Fint MPI_Info_c2f(MPI_Info info);MPI_Info MPI_Info_f2c(MPI_Fint info);int PMPI_Info_create(MPI_Info *info);int PMPI_Info_set(MPI_Info info, char *key, char *value);int PMPI_Info_delete(MPI_Info info, char *key);int PMPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag);int PMPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag);int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys);int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key);int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo);int PMPI_Info_free(MPI_Info *info);MPI_Fint PMPI_Info_c2f(MPI_Info info);MPI_Info PMPI_Info_f2c(MPI_Fint info);#endif/* style: allow:strdup:1 sig:0 */#if defined(HAVE_STRDUP) && defined(NEEDS_STRDUP_DECL) && !defined(strdup)char *strdup(const char *s);# endif#if defined(HAVE_READLINK) && defined(NEEDS_READLINK_DECL) && !defined(readlink)int readlink(const char *path, char *buf, size_t bufsiz);# endif#if defined(HAVE_LSTAT) && defined(NEEDS_LSTAT_DECL) && !defined(lstat)int lstat(const char *file_name, struct stat *buf);# endif#if defined(HAVE_FSYNC) && defined(NEEDS_FSYNC_DECL) && !defined(fsync)int fsync(int fd);# endif#if defined(HAVE_FTRUNCATE) && defined(NEEDS_FTRUNCATE_DECL) && !defined(ftruncate)int ftruncate(int fd, off_t length);# endiftypedef struct ADIOI_Fns_struct ADIOI_Fns;typedef struct ADIOI_Hints_struct ADIOI_Hints;typedef struct ADIOI_FileD { int cookie; /* for error checking */ FDTYPE fd_sys; /* system file descriptor */ int fd_direct; /* On XFS, this is used for direct I/O; fd_sys is used for buffered I/O */ int direct_read; /* flag; 1 means use direct read */ int direct_write; /* flag; 1 means use direct write */ /* direct I/O attributes */ unsigned d_mem; /* data buffer memory alignment */ unsigned d_miniosz; /* min xfer size, xfer size multiple, and file seek offset alignment */ unsigned d_maxiosz; /* max xfer size */ ADIO_Offset fp_ind; /* individual file pointer in MPI-IO (in bytes)*/ ADIO_Offset fp_sys_posn; /* current location of the system file-pointer in bytes */ ADIOI_Fns *fns; /* struct of I/O functions to use */ MPI_Comm comm; /* communicator indicating who called open */ MPI_Comm agg_comm; /* deferred open: aggregators who called open */ int is_open; /* deferred open: 0: not open yet 1: is open */ char *filename;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -