\hypertarget{ompi_2mca_2io_2base_2base_8h}{\section{ompi/mca/io/base/base.h File Reference}
\label{ompi_2mca_2io_2base_2base_8h}\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
}


M\+C\+A io base framework public interface functions.  


{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}mpi.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/class/opal\+\_\+list.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/class/ompi\+\_\+free\+\_\+list.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/io/io.\+h\char`\"{}}\\*
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
B\+E\+G\+I\+N\+\_\+\+C\+\_\+\+D\+E\+C\+L\+S O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a13b499ce0a67f6ad1672cdc148e504a2}{mca\+\_\+io\+\_\+base\+\_\+open} (void)
\begin{DoxyCompactList}\small\item\em Initialize the io M\+C\+A framework. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a609333f162bb79834d45f145a6eb4821}{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available} (bool enable\+\_\+progress\+\_\+threads, bool enable\+\_\+mpi\+\_\+threads)
\begin{DoxyCompactList}\small\item\em Create list of available io components. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a50a399c82a431970b6eec701159178ea}{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select} (struct \hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t} $\ast$file, \hyperlink{mca_8h_a8ec1d0b303938c31727745037481d1bf}{mca\+\_\+base\+\_\+component\+\_\+t} $\ast$preferred)
\begin{DoxyCompactList}\small\item\em Select an available component for a new file handle. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_af946d991b97930a94e856b5250268282}{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect} (struct \hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t} $\ast$file)
\begin{DoxyCompactList}\small\item\em Finalize a io component on a specific file handle. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a61d084a00d05fcdf61b5c2cb9cedd004}{mca\+\_\+io\+\_\+base\+\_\+delete} (char $\ast$filename, struct \hyperlink{structompi__info__t}{ompi\+\_\+info\+\_\+t} $\ast$info)
\begin{DoxyCompactList}\small\item\em Invoke a back-\/end component to delete a file. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_adf3bfd4d4146c9e7396bd2a567890a6f}{mca\+\_\+io\+\_\+base\+\_\+close} (void)
\begin{DoxyCompactList}\small\item\em Shut down the io M\+C\+A framework. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_a24bc7ebb020d9ef630555ea0eef922dc}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int {\bfseries mca\+\_\+io\+\_\+base\+\_\+register\+\_\+datarep} (char $\ast$, M\+P\+I\+\_\+\+Datarep\+\_\+conversion\+\_\+function $\ast$, M\+P\+I\+\_\+\+Datarep\+\_\+conversion\+\_\+function $\ast$, M\+P\+I\+\_\+\+Datarep\+\_\+extent\+\_\+function $\ast$, void $\ast$)}\label{ompi_2mca_2io_2base_2base_8h_a24bc7ebb020d9ef630555ea0eef922dc}

\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_a964cffa9c49cea0aca35bfc4b263e43e}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a964cffa9c49cea0aca35bfc4b263e43e}{mca\+\_\+io\+\_\+base\+\_\+param}}\label{ompi_2mca_2io_2base_2base_8h_a964cffa9c49cea0aca35bfc4b263e43e}

\begin{DoxyCompactList}\small\item\em Index number from the \char`\"{}io\char`\"{} M\+C\+A parameter, created when the io framework is initialized and used during scope selection. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_a077055c0e7adc18a92e1491ae6acbb81}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi_2mca_2io_2base_2base_8h_a077055c0e7adc18a92e1491ae6acbb81}{mca\+\_\+io\+\_\+base\+\_\+output}}\label{ompi_2mca_2io_2base_2base_8h_a077055c0e7adc18a92e1491ae6acbb81}

\begin{DoxyCompactList}\small\item\em io framework debugging stream I\+D used with \hyperlink{output_8h_a3405da348d8cc528b921c8a1d8302be7}{opal\+\_\+output()} and \hyperlink{output_8h_a0864d696ef030700e849021731a358e0}{opal\+\_\+output\+\_\+verbose()}. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_ac2b8ee9347496009e1dda4bef7ae9f50}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C bool \hyperlink{ompi_2mca_2io_2base_2base_8h_ac2b8ee9347496009e1dda4bef7ae9f50}{mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened\+\_\+valid}}\label{ompi_2mca_2io_2base_2base_8h_ac2b8ee9347496009e1dda4bef7ae9f50}

\begin{DoxyCompactList}\small\item\em Indicator as to whether the list of opened io components is valid or not. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_a6e518b1e2c410cc772b607a33629a15d}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structopal__list__t}{opal\+\_\+list\+\_\+t} \hyperlink{ompi_2mca_2io_2base_2base_8h_a6e518b1e2c410cc772b607a33629a15d}{mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened}}\label{ompi_2mca_2io_2base_2base_8h_a6e518b1e2c410cc772b607a33629a15d}

\begin{DoxyCompactList}\small\item\em List of all opened components; created when the io framework is initialized and destroyed when we reduce the list to all available io components. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_a58202e4d6889797c5d4cb8fb643e7b45}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C bool \hyperlink{ompi_2mca_2io_2base_2base_8h_a58202e4d6889797c5d4cb8fb643e7b45}{mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available\+\_\+valid}}\label{ompi_2mca_2io_2base_2base_8h_a58202e4d6889797c5d4cb8fb643e7b45}

\begin{DoxyCompactList}\small\item\em Indicator as to whether the list of available io components is valid or not. \end{DoxyCompactList}\item 
\hypertarget{ompi_2mca_2io_2base_2base_8h_aff9913761fc93d9a7ceff06d202937b3}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \hyperlink{structopal__list__t}{opal\+\_\+list\+\_\+t} \hyperlink{ompi_2mca_2io_2base_2base_8h_aff9913761fc93d9a7ceff06d202937b3}{mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available}}\label{ompi_2mca_2io_2base_2base_8h_aff9913761fc93d9a7ceff06d202937b3}

\begin{DoxyCompactList}\small\item\em List of all available components; created by reducing the list of open components to all those who indicate that they may run during this process. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
M\+C\+A io base framework public interface functions. 



\subsection{Function Documentation}
\hypertarget{ompi_2mca_2io_2base_2base_8h_adf3bfd4d4146c9e7396bd2a567890a6f}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+close@{mca\+\_\+io\+\_\+base\+\_\+close}}
\index{mca\+\_\+io\+\_\+base\+\_\+close@{mca\+\_\+io\+\_\+base\+\_\+close}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+close}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+close (
\begin{DoxyParamCaption}
\item[{void}]{}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_adf3bfd4d4146c9e7396bd2a567890a6f}


Shut down the io M\+C\+A framework. 


\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & Always\\
\hline
\end{DoxyRetVals}
This function shuts down everything in the io M\+C\+A framework, and is called during \hyperlink{mpiruntime_8h_a657cd1789f5cbe7dbb711f6c836398e6}{ompi\+\_\+mpi\+\_\+finalize()} and the special case of the laminfo fileand.

It must be the last function invoked on the io M\+C\+A framework. 

References mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available\+\_\+valid, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened\+\_\+valid, mca\+\_\+io\+\_\+base\+\_\+output, and O\+B\+J\+\_\+\+D\+E\+S\+T\+R\+U\+C\+T.



Referenced by ompi\+\_\+mpi\+\_\+finalize().

\hypertarget{ompi_2mca_2io_2base_2base_8h_a61d084a00d05fcdf61b5c2cb9cedd004}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+delete@{mca\+\_\+io\+\_\+base\+\_\+delete}}
\index{mca\+\_\+io\+\_\+base\+\_\+delete@{mca\+\_\+io\+\_\+base\+\_\+delete}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+delete}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+delete (
\begin{DoxyParamCaption}
\item[{char $\ast$}]{filename, }
\item[{struct {\bf ompi\+\_\+info\+\_\+t} $\ast$}]{info}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_a61d084a00d05fcdf61b5c2cb9cedd004}


Invoke a back-\/end component to delete a file. 


\begin{DoxyParams}{Parameters}
{\em filename} & Name of the file to be deleted \\
\hline
{\em info} & M\+P\+I\+\_\+\+Info for additional information\\
\hline
\end{DoxyParams}
This function is a bit different than most other M\+P\+I\+\_\+\+File\+\_\+$\ast$ functions -- it does not take a M\+P\+I\+\_\+\+File handle. As such, this function function invokes appropriate delete handlers on all the available components (rather than some pre-\/selected module). See \hyperlink{io_8h_source}{io.\+h} for details. 

References mca\+\_\+base\+\_\+param\+\_\+lookup\+\_\+string(), mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t\+::mca\+\_\+component\+\_\+name, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available, mca\+\_\+io\+\_\+base\+\_\+output, mca\+\_\+io\+\_\+base\+\_\+param, O\+B\+J\+\_\+\+R\+E\+L\+E\+A\+S\+E, opal\+\_\+argv\+\_\+count(), opal\+\_\+argv\+\_\+free(), opal\+\_\+argv\+\_\+split(), opal\+\_\+list\+\_\+remove\+\_\+first(), opal\+\_\+list\+\_\+remove\+\_\+last(), and opal\+\_\+output\+\_\+verbose().

\hypertarget{ompi_2mca_2io_2base_2base_8h_a50a399c82a431970b6eec701159178ea}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select@{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select}}
\index{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select@{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+file\+\_\+select (
\begin{DoxyParamCaption}
\item[{struct {\bf ompi\+\_\+file\+\_\+t} $\ast$}]{file, }
\item[{{\bf mca\+\_\+base\+\_\+component\+\_\+t} $\ast$}]{preferred}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_a50a399c82a431970b6eec701159178ea}


Select an available component for a new file handle. 


\begin{DoxyParams}{Parameters}
{\em file} & \hyperlink{classFile}{File} Handle that the component will be selected for. \\
\hline
{\em preferred} & The component that is preferred for this file handle (or N\+U\+L\+L).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S Upon success. 

O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R Upon failure.
\end{DoxyReturn}
Note that the types of the parameters have \char`\"{}struct\char`\"{} in them (e.\+g., \hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t}\char`\"{} vs. a plain \char`\"{}\hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t}\char`\"{}) to
avoid an include file loop.  All similar types (e.\+g., \char`\"{}struct \hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t} $\ast$\char`\"{}, \char`\"{}\hyperlink{structompi__file__t}{ompi\+\_\+file\+\_\+t} $\ast$\char`\"{}, and \char`\"{}M\+P\+I\+\_\+\+File") are all typedef'ed to be the same, so the fact that we use struct here in the prototype is ok.

This function is invoked when a new file handle is created and a io component needs to be selected for it. It should be invoked near the end of the file handle creation process such that almost everything else is functional on the file handle.

This function invokes the selection process for io components, which works as follows\+:


\begin{DoxyItemize}
\item If the {\itshape preferred} argument is N\+U\+L\+L, the selection set is defined to be all the components found during \hyperlink{ompi_2mca_2io_2base_2base_8h_a609333f162bb79834d45f145a6eb4821}{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available()}.
\item If {\itshape preferred} is not N\+U\+L\+L, then the selection set is just that component. (However, in this mode, we may make 2 passes through the selection process -- more on this below).
\item All components in the selection set are queried to see if they want to run with that file handle. All components that want to run are ranked by their priority and the highest priority component is selected. All non-\/selected components have their \char`\"{}unquery\char`\"{} function invoked to let them know that they were not selected.
\item The selected module will have its \char`\"{}init\char`\"{} function invoked to let it know that it was selected. All unselected components will have their file\+\_\+unselect function invoked.
\item If we fall through this entire process and no component is selected {\itshape and} the {\itshape preferred} argument is not N\+U\+L\+L, then run the entire process again as if the {\itshape preferred} argument was N\+U\+L\+L (i.\+e., use the entire available set of components).
\end{DoxyItemize}

At the end of this process, we'll either have a single component/module pair that is selected and initialized for the file handle, or no component was selected and an error is returned up the stack. 

References ompi\+\_\+file\+\_\+t\+::f\+\_\+filename, ompi\+\_\+file\+\_\+t\+::f\+\_\+io\+\_\+selected\+\_\+component, ompi\+\_\+file\+\_\+t\+::f\+\_\+io\+\_\+selected\+\_\+data, ompi\+\_\+file\+\_\+t\+::f\+\_\+io\+\_\+selected\+\_\+module, ompi\+\_\+file\+\_\+t\+::f\+\_\+io\+\_\+version, mca\+\_\+base\+\_\+param\+\_\+lookup\+\_\+string(), mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t\+::mca\+\_\+component\+\_\+name, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available, mca\+\_\+io\+\_\+base\+\_\+output, mca\+\_\+io\+\_\+base\+\_\+param, O\+B\+J\+\_\+\+R\+E\+L\+E\+A\+S\+E, opal\+\_\+argv\+\_\+count(), opal\+\_\+argv\+\_\+free(), opal\+\_\+argv\+\_\+split(), opal\+\_\+list\+\_\+remove\+\_\+first(), opal\+\_\+list\+\_\+remove\+\_\+last(), and opal\+\_\+output\+\_\+verbose().

\hypertarget{ompi_2mca_2io_2base_2base_8h_af946d991b97930a94e856b5250268282}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect@{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect}}
\index{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect@{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+file\+\_\+unselect (
\begin{DoxyParamCaption}
\item[{struct {\bf ompi\+\_\+file\+\_\+t} $\ast$}]{file}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_af946d991b97930a94e856b5250268282}


Finalize a io component on a specific file handle. 


\begin{DoxyParams}{Parameters}
{\em file} & The file handle that is being destroyed.\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & Always.\\
\hline
\end{DoxyRetVals}
Note that the type of the parameter is only a \char`\"{}struct
ompi\+\_\+file\+\_\+t\char`\"{} (vs. a plain \char`\"{}ompi\+\_\+file\+\_\+t\char`\"{}) to avoid an include file loop. The types \char`\"{}struct ompi\+\_\+file\+\_\+t $\ast$\char`\"{}, \char`\"{}ompi\+\_\+file\+\_\+t $\ast$\char`\"{}, and \char`\"{}\+M\+P\+I\+\_\+\+File\char`\"{} are all typedef'ed to be the same, so the fact that we use struct here in the prototype is ok.

This function is invoked near the beginning of the destruction of a file handle. It finalizes the io component associated with the file handle (e.\+g., allowing the component to clean up and free any resources allocated for that file handle). Note that similar to mca\+\_\+io\+\_\+base\+\_\+select(), as result of this function, other file handles may also be destroyed. \hypertarget{ompi_2mca_2io_2base_2base_8h_a609333f162bb79834d45f145a6eb4821}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available@{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available}}
\index{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available@{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+find\+\_\+available (
\begin{DoxyParamCaption}
\item[{bool}]{enable\+\_\+progress\+\_\+threads, }
\item[{bool}]{enable\+\_\+mpi\+\_\+threads}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_a609333f162bb79834d45f145a6eb4821}


Create list of available io components. 


\begin{DoxyParams}{Parameters}
{\em allow\+\_\+multi\+\_\+user\+\_\+threads} & Will be set to true if any of the available components will allow multiple user threads \\
\hline
{\em have\+\_\+hidden\+\_\+threads} & Will be set to true if any of the available components have hidden threads.\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & If one or more io components are available. \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R} & If no io components are found to be available.\\
\hline
\end{DoxyRetVals}
This function is invoked during \hyperlink{mpiruntime_8h_a6352a08abfa7bd8a402a866ecebec0f3}{ompi\+\_\+mpi\+\_\+init()} to query all successfully opened io components and create a list of all available io components.

This function traverses the (internal global variable) mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened list and queries each component to see if it ever might want to run during this M\+P\+I process. It creates another internal global variable list named mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available, consisting of a list of components that are available for selection when file handles are created. This variable should {\itshape only} be used by other io base functions -- it is not considered a public interface member -- and is only mentioned here for completeness. 

References mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+available\+\_\+valid, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened, mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened\+\_\+valid, O\+B\+J\+\_\+\+C\+O\+N\+S\+T\+R\+U\+C\+T, O\+B\+J\+\_\+\+D\+E\+S\+T\+R\+U\+C\+T, O\+B\+J\+\_\+\+R\+E\+L\+E\+A\+S\+E, opal\+\_\+list\+\_\+append, and opal\+\_\+list\+\_\+remove\+\_\+first().

\hypertarget{ompi_2mca_2io_2base_2base_8h_a13b499ce0a67f6ad1672cdc148e504a2}{\index{ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}!mca\+\_\+io\+\_\+base\+\_\+open@{mca\+\_\+io\+\_\+base\+\_\+open}}
\index{mca\+\_\+io\+\_\+base\+\_\+open@{mca\+\_\+io\+\_\+base\+\_\+open}!ompi/mca/io/base/base.\+h@{ompi/mca/io/base/base.\+h}}
\subsubsection[{mca\+\_\+io\+\_\+base\+\_\+open}]{\setlength{\rightskip}{0pt plus 5cm}B\+E\+G\+I\+N\+\_\+\+C\+\_\+\+D\+E\+C\+L\+S O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int mca\+\_\+io\+\_\+base\+\_\+open (
\begin{DoxyParamCaption}
\item[{void}]{}
\end{DoxyParamCaption}
)}}\label{ompi_2mca_2io_2base_2base_8h_a13b499ce0a67f6ad1672cdc148e504a2}


Initialize the io M\+C\+A framework. 


\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & Upon success \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R} & Upon failure\\
\hline
\end{DoxyRetVals}
This must be the first function invoked in the io M\+C\+A framework. It initializes the io M\+C\+A framework, finds and opens io components, etc.

This function is invoked during \hyperlink{mpiruntime_8h_a6352a08abfa7bd8a402a866ecebec0f3}{ompi\+\_\+mpi\+\_\+init()} and during the initialization of the special case of the laminfo command.

This function fills in the internal global variable mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened, which is a list of all io components that were successfully opened. This variable should {\itshape only} be used by other io base functions -- it is not considered a public interface member -- and is only mentioned here for completeness. 

References mca\+\_\+base\+\_\+param\+\_\+find(), mca\+\_\+base\+\_\+param\+\_\+reg\+\_\+int\+\_\+name(), mca\+\_\+io\+\_\+base\+\_\+components\+\_\+opened\+\_\+valid, mca\+\_\+io\+\_\+base\+\_\+output, mca\+\_\+io\+\_\+base\+\_\+param, and opal\+\_\+output\+\_\+open().

