gpt4 book ai didi

java - 来自 FileOutputStream.close() 的设备的不适当 ioctl

转载 作者:太空狗 更新时间:2023-10-29 11:09:50 25 4
gpt4 key购买 nike

我有一些代码可以使用 FileOutputStream 将一些首选项保存到文件中。这是我写了一千遍的标准代码:

FileOutputStream out = new FileOutputStream(file);
try {
BufferedOutputStream bos = new BufferedOutputStream(out);
try {
store(bos, comments);
} finally {
bos.close();
}
} finally {
out.close();
}

我们的一位用户在 close() 调用期间在 Linux 上报告以下错误。

java.io.IOException: Inappropriate ioctl for device
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.close(FileOutputStream.java:341)
at java.io.FilterOutputStream.close(FilterOutputStream.java:160)

有人知道这是否仅在使用错误的 -d32 或 -d64 参数(如 this question )错误地启动 JVM 时发生,或者是否可能发生其他事情?

最佳答案

我很确定您对 32/64 位模式的想法是正确的。几年前我们在嵌入式设备上遇到过这个问题,错误源于我们用来与 pci 开关通信的库,而库不支持 64 位 ioctl。

如果你真的想深入了解我的建议,我已经使用这种技术来调试 jni 代码。在 java 应用程序中设置一个断点,然后使用 gdb 附加到该进程。然后,您可以在 gdb 中设置断点以监视设备上的 ioctl。查看哪个请求被发送到设备并验证它是否正确支持该架构。

如果文件输出流正在从文件系统文件而不是另一种类型的设备文件中读取。那么这可能是 selinux 的问题,或者是某种虚拟化,如以下链接中的 chroot 环境。

此链接可能指向正确的方向。这是 chroot 的问题
http://us.generation-nt.com/answer/sndctl-tmr-timebase-tcgets-help-170073041.html

还要确定他们运行的jre,是openjdk还是sun java?我对较旧的 gcc jdk java 有一些非常奇怪的怪癖,这可以解释一些差异。

关于java - 来自 FileOutputStream.close() 的设备的不适当 ioctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com