Linux TIFFOpen:打开的文件太多

Linux TIFFOpen:打开的文件太多,linux,libtiff,geotiff,Linux,Libtiff,Geotiff,我试图从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"

我试图从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
没有人打开这个文件

我在这里也遵循了这个建议:


我仍然收到同样的错误。发生了什么事?

你的代码问题就在眼前

您看到您编写的名为
read()
的函数了吗?是的,那不好。它以相同的名称与标准库的函数冲突(尽管参数不同)。因此,它最终被libtiff调用——它不是从文件中获取数据,而是递归地打开,直到程序无法再打开文件为止,因此libtiff停止尝试读取


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

你的代码问题就在眼前

您看到您编写的名为
read()
的函数了吗?是的,那不好。它以相同的名称与标准库的函数冲突(尽管参数不同)。因此,它最终被libtiff调用——它不是从文件中获取数据,而是递归地打开,直到程序无法再打开文件为止,因此libtiff停止尝试读取


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

strace myprog 2>&1 | grep open那样运行你的程序,告诉我们你发现了什么。open被调用了多少次?我在库文件上打开了一些文件,然后我得到了类似于
open(“./astgm2_N50E002_dem.tif”,O_RDONLY)=n
其中2是整个程序上面的代码?您是否尝试过使用不同的输入图像?哦,顺便说一下,
main()
的返回类型必须是
int
。是的,这是整个程序。我只是想打开这些数据,看看我现在能用它做些什么。我试过不同的图片,同样的问题。感谢大家对main()的介绍,我查看了它,现在我明白了。我运行了您的代码(在让它显示
intmain()之后)
它运行得很好。我在Mac OS上使用libtiff 4.0.3和GCC 4.7.2。我在这里使用了示例文件CCITT_5.TIF:像
strace myprog 2>&1 | grep open
那样运行程序,并告诉我们您发现了什么。调用open有多少次?我在库文件上打开了一些,然后我得到了
open之类的消息(“/astgm2_N50E002_dem.tif”,O_RDONLY)=n
其中2是您整个程序上面的代码?您尝试过使用不同的输入图像吗?哦,顺便问一下,
main()的返回类型
必须是
int
。是的,这是整个程序。我只是想打开这些数据,看看我现在能用它做些什么。我尝试了不同的图像,同样的问题。感谢main()的提示,我查看了它,现在我明白了。我运行了你的代码(在让它显示
int main()之后)
而且效果很好。我在Mac OS上使用libtiff 4.0.3和GCC 4.7.2。我在这里使用了示例文件CCITT_5.TIF:哈哈!难以置信。现在一切都正常。我以后会小心这类事情。谢谢!哈哈!难以置信。现在一切都正常。我以后会小心这类事情。谢谢!