2013-11-29 186 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'是有道理的。 –