Linux TIFFOpen:打开的文件太多
我试图从ASTER数据集中打开一个geotiff,但它给出了一个我无法理解的错误。这是我的密码: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"
#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:哈哈!难以置信。现在一切都正常。我以后会小心这类事情。谢谢!哈哈!难以置信。现在一切都正常。我以后会小心这类事情。谢谢!