首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UPC读取文件

使用UPC读取文件
EN

Stack Overflow用户
提问于 2012-07-06 10:45:39
回答 1查看 231关注 0票数 3

我开始学习UPC,我有以下一段读取文件的代码:

代码语言:javascript
复制
upc_file_t *fileIn;
int n;
fileIn = upc_all_fopen("input_small", UPC_RDONLY | UPC_INDIVIDUAL_FP , 0, NULL);
upc_all_fread_local(fileIn, &n, sizeof(int), 1, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC);

upc_barrier;
printf("%d\n", n);

upc_all_fclose(fileIn);

然而,输出(n的值)总是808651319,这意味着有问题,我找不到它是什么。我输入的文件的第一行是'7',所以printf的结果应该是7…

知道为什么会这样吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-06 19:08:16

UPC并行I/O库执行非格式化(二进制)输入/输出,而不是像标准C库中的(f)printf(3)/(f)scanf(3)那样格式化输入/输出。并行I/O不能处理文本文件,因为它们的固有属性,如可变长度记录。

代码语言:javascript
复制
upc_all_fread_local(fileIn, &n, sizeof(int), 1, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC)

其行为类似于以下对标准C库函数的调用,以便从文件中进行非格式化读取:

代码语言:javascript
复制
fread(&n, sizeof(int), 1, fh)

您只需将文件中的1个sizeof(int)字节(在大多数平台上为4个字节)读取到n的地址中。您得到的十六进制808651319的数字是0x30330A37。在像x86/x64这样的小端系统上,它以0x37 0x0A 0x33 0x30 (颠倒字节顺序)的形式存储在内存和磁盘中。以下是字符串7\n30的前4个字节的ASCII码(\n或LF是换行符/换行符),所以我猜您的input_small文件如下所示:

代码语言:javascript
复制
7
30...
...

您应该使用fwrite(3)准备二进制格式的输入数据,而不是使用(f)printf(3)或您选择的文本编辑器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11355194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档