int fh = open (filename, O_RDONLY);
int **InputBuffer;
InputBuffer = (int **)malloc(rowLocal * sizeof(int));
for (i = 0; i < rowLocal; i++)
{
InputBuffer[i] = (int*)malloc(clmLocal * sizeof(int));
}
lseek(fh, rowLocal * clmLocal * sizeof(int) * MyRank,SEEK_SET);
for (index = 0; index < rowLocal; index++)
{
for (i = 0; i < clmLocal; i++)
{
int readchk = read (fh,&(InputBuffer[index][i]),sizeof(int));
}
}
for (index = 0; index < rowLocal; index++)
{
for (i = 0; i < clmLocal; i++)
{
printf(" %d \t",InputBuffer[index][i]);
}
}
它输错了输出:
Rank 1 of 2 processes
6475664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 End of File for process 1
Rank 0 of 2 processes
540614708 540221496 171319349 540287026 540221493 170926129 540483637 540155956 171384881 540352564 540221497 170926130 540614707 540024881 171057205 540352562 540024881 170991670 End of File for process 0
实际档案: 猫测试 4 9 8 3 5 6 2 4 5 3 1 0 5 7 4 2 1 7 4 5 9 3 2 0 3 9 1 0 5 2 2 5 1 0 6 1
整个它是一个MPI C程序。任何人都可以帮忙,让我知道我哪里出错了。
解决方案:读取是二进制操作不读取文本文件。尝试读取二进制文件时问题已解决。感谢每一位人士的帮助。
答案 0 :(得分:0)
问题可能是ASCII文本被生成为输入...而read()读取二进制数据。
引用here,流级I / O更灵活,通常更方便;因此,程序员通常只在必要时才使用描述符级函数。
您可以切换到stdio.h documentation。 open变得fopen而lseek变成fseek。如果您的输入是ASCII,那么fscanf(pFile,"%d",&(InputBuffer[index][i]));
也许可以做到这一点。