read():无效的参数

时间:2015-05-22 07:09:18

标签: c io

我正在尝试在功能良好的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()

2 个答案:

答案 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