刚开始使用Openmpi。试图写入和读取文件的代码..写作代码:
写入文件的字符无法识别,主要是垃圾。
#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"
#define BUFSIZE 10
#define FIRSTCHAR 1
#define FILENAME "file1.dat"
int main(int argc, char* argv[]) {
int i, np, me;
int buf[BUFSIZE]; /* The buffer to write */
MPI_File myfile; /* Shared file */
/* Initialize MPI */
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &me);
MPI_Comm_size(MPI_COMM_WORLD, &np);
/* Initialize buf with characters. Process 0 uses 'a', process 1 'b', etc. */
for (i=0; i<BUFSIZE; i++) {
buf[i] = FIRSTCHAR+(me);
}
/* Open the file */
MPI_File_open (MPI_COMM_WORLD, FILENAME, MPI_MODE_CREATE | MPI_MODE_WRONLY,
MPI_INFO_NULL, &myfile);
/* Set the file view */
MPI_File_set_view(myfile, me*BUFSIZE*sizeof(int), MPI_INT, MPI_INT,
"native", MPI_INFO_NULL);
/* Write buf to the file */
MPI_File_write(myfile, buf, BUFSIZE*sizeof(int), MPI_INT, MPI_STATUS_IGNORE);
/* Close the file */
MPI_File_close(&myfile);
MPI_Finalize();
exit(0);
}
没有工作..请帮忙!
答案 0 :(得分:6)
写入的文件不是垃圾,只是二进制文件
如果你在linux上
首先备份你的文件
cp file file2
然后
尝试此命令将二进制转换为ascii
hexdump -v -e '7/4 "%10d "' -e '"\n"' file2
另请注意:除非您将数百万行写入文件,否则您甚至可能不需要mpi_file写入/加载函数
答案 1 :(得分:1)
int
正在以二进制模式写入文件,即它们不会像使用printf
的屏幕输出一样转换为字符串并打印,而是将它们的内存表示复制到文件以某种方式。如果您编写代码以从文件中读取它们(使用MPI_File_read
),它将正常工作。
请注意,二进制格式可能非常难以自行阅读,因为MPI尝试跨平台并且可能会写一些其他类型信息,因此您应该使用MPI从这些文件中读取。
答案 2 :(得分:0)
这是一个更简洁的命令,以ascii格式查看您的二进制文件 在Linux上: 按照pyCthon建议备份文件:
cp file temp
然后,运行以下命令以ascii字符的格式打印文件:
od -c temp
如果您的数据恰好是整数:
od -i temp