2013-11-29 45 views
0

我正在做一些MPI编程,我已经做了大量搜索和搜索。我正在紧张的最后期限工作,现在是凌晨2点,所以在此先感谢回复。MPI_File_Iwrite,将fprintf复制到缓冲区

,而不是写入这样一个文件:

fprintf(fp, "%d %d %.12E %.12E %.12E %d\n", ii, jj, u_x, u_y, pressure, obstacles[ii * params.nx + jj]); 

我想用MPI_file_Iwrite(....buf.....)

这意味着我需要的格式完全一样,上面fprintf中,但需要它复制到缓冲区(字符数组)。 任何人都可以提出一个方法来做到这一点很容易。我有点难住,没有一些非常费力的类型转换和strcpy()strcat()在一个大for循环等。 谢谢!

回答

1

你所需要的这里是sprintf打印上述格式的缓冲

给你的例子继承人的C代码的例子,你需要

tmp = (char *) malloc(SIZE); 
strcpy(tmp, filename); 
sprintf(filename, "%d %d %.12E %.12E %.12E %d\n", ii, jj, u_x, u_y, pressure, obstacles[ii * params.nx + jj]); 

然后将培训相关MPI代码

MPI_File fh; 
MPI_File_open(MPI_COMM_SELF, filename, MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &fh); 
MPI_File_set_view(fh, 0, MPI_INT, MPI_INT, "native", MPI_INFO_NULL); 
MPI_File_iwrite(fh, buf, nints, MPI_INT, &request); 
MPI_Wait(&request, &status); 
MPI_File_close(&fh); 

有关完整示例,请参见here

+0

强烈建议不要使用'sprintf()'。应该使用'snprintf()'来代替。另外我不认为'sprintf'到'filename'是有道理的。 –