0

我正在尝试从 ASTER 数据集中打开一个 geotiff,但它给出了一个我一直无法弄清楚的错误。这是我的代码:

#include "stdlib.h"
#include "stdio.h"
#include "tiffio.h"

void read(void);

void main() {
    read();
    return;
}

void read(void) {
    TIFF* file;

    file = TIFFOpen("./ASTGTM2_N50E002_dem.tif", "r");
    if (file != NULL)
        TIFFClose(file);
    else
        printf( "won't open\n" );
    return;
}

我是这样编译的:

gcc parse.c -ltiff -lm;

这是我得到的输出的一部分:

TIFFOpen: ./ASTGTM2_N50E002_dem.tif: Too many open files.
./ASTGTM2_N50E002_dem.tif: Cannot read TIFF header.

第二条消息重复了几百次,然后

won't open

之后显示几百次。

read() 被调用一次,为什么我得到一些 700 多张打印件?

我正在运行 Debian,我检查过

lsof | grep ASTGTM2_N50E002_dem.tif

并且没有人打开此文件。

我也遵循了这里的建议:https ://stackoverflow.com/a/9012019/1877851

我仍然收到同样的错误。这是怎么回事?

4

1 回答 1

3

您的代码的问题就在我们面前!

你看到你写的那个函数叫做read()? 是的,那不好。它与同名的标准库函数发生冲突(尽管参数不同)。所以它最终被 libtiff 调用——而不是从文件中获取数据,它递归地打开,直到程序无法再打开文件,所以 libtiff 停止尝试读取。

重命名你的函数,一切都会好起来的。

于 2013-03-08T04:23:40.400 回答