我正在尝试在功能良好的oci_connect
返回的文件描述符上读取带有read()
的二进制文件,但它只能用open()
返回22
。
以下是代码:
errno
正在发生的事情是int input = open(argv[1], O_RDONLY|O_DIRECT);
char buffer_header[4];
if(read(input,buffer_header,4) > 0)
image_width = bytesToInt(buffer_header);
printf("%d\n",errno);
上的条件不匹配。难道我做错了什么?返回的文件描述符是read()
。
答案 0 :(得分:4)
我认为这可能与你的if语句有关> 0.
这里是read
手册页所说的内容(在终端中输入man 2):
返回值 成功时,返回读取的字节数(零表示文件结束),文件位置按此编号提前。如果这不是错误 此数字小于请求的字节数;这可能发生在例如因为现在实际可用的字节更少(可能是因为 我们接近文件结尾,或者因为我们正在从管道或终端读取数据,或者因为read()被信号中断了。 出错时,-1为 返回,并正确设置errno。在这种情况下,未指定文件位置(如果有)是否发生变化。
所以你的代码应该是类似
的东西 if(-1 == read(input,buffer_header,4)) {
perror("error with read");
} else {
do something;
}
编辑:对不起,刚看到评论感谢巴马!
编辑2:你也应该错误地检查open
系统调用。
int input = open(argv[1], O_RDONLY|O_DIRECT);
if(-1 == input) {
perror("error with open");
} else {
do stuff;
}
Here's一个可能有帮助的简短教程
答案 1 :(得分:1)
您应该只检查<template name="roles">
<div>
{{# if Template.subscriptionsReady }}
{{#with allRoles}}
<label>{{> role }}</label>
{{/with}}
{{ else }}
loading....
{{/if}}
</div>
</template>
<template name="role">
<div>{{ _id }}</div>
</template>
errno
是否返回read
以表明其出错。
-1