#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

void err_handler(int err, char *err_msg)
{
    int rank, errorclass, errorStringLen;
    char errorString[MPI_MAX_ERROR_STRING];

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Error_string(err, errorString, &errorStringLen);
    if (err_msg == NULL) err_msg = "";
    printf("rank %d: MPI error (%s) : %s\n", rank, err_msg, errorString);
}

int main(int argc, char **argv) {
    int            buf, err;
    MPI_File       fh;
    MPI_Status     status;

    MPI_Init(&argc, &argv);
    if (argc != 2) {
        printf("Usage: %s filename\n", argv[0]);
        MPI_Finalize();
        return 1;
    }
    err = MPI_File_open(MPI_COMM_WORLD, argv[1], MPI_MODE_CREATE | MPI_MODE_RDWR,
                        MPI_INFO_NULL, &fh);
    if (err != MPI_SUCCESS) err_handler(err, "MPI_File_open()");

    err = MPI_File_write_all(fh, &buf, 1, MPI_INT, &status);
    if (err != MPI_SUCCESS) err_handler(err, "MPI_File_write_all()");

    MPI_File_close(&fh);
    MPI_Finalize();
    return 0;
}


