【发布时间】:2012-11-12 22:26:14
【问题描述】:
根据 df 的说法,设备上还有很多(大约 50G)空间。
/ # df db
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p3 61812032 11308736 50503296 18% /db
为什么这个 vala 代码可能另有说明?
try
{
FileUtils.set_data(bmp_path, bmp);
}
catch (Error e)
{
printf("Error! FileUtils.set_data %s\n%s\n", bmp_path, e.message);
}
代码当然会打印出来
Error! FileUtils.set_data /db/20121112/165206.0.bmp
Failed to create file '/db/20121112/165206.0.bmp.9X8PNW': No space left on device
GLib.FileUtils 在一个目录中可以处理的文件数量是否有限制? /db/20121112 包含 27220 个文件(一半 jpeg 和一半 bmp)。
mmcblk0p3 就是这样创建的
echo -e "n\np\n3\n66\n\nt\n3\nc\nw" | fdisk /dev/mmcblk0
并像这样格式化
mkfs.vfat -n DB -F 32 /dev/mmcblk0p3
这可能无关紧要,但该设备是 64G SD 卡,并且 mmcblk0p1 和 mmcblk0p2 用于引导和 rootfs。
像 Barmar 在 cmets 中建议的那样检查 inode 会导致
df: invalid option -- 'i'
BusyBox v1.18.2 (2012-11-09 13:08:26 EST) multi-call binary.
这很奇怪,因为根据BusyBox docs,df -i 是有效的
df [-Pkmhai] [-B SIZE] [FILESYSTEM...]
-i Inodes
还有其他检查 inode 的方法吗?
更新 [2012 年 11 月 15 日]:我认为问题可能是每个文件夹的文件太多,所以我修改了代码以每小时而不是每天打开一个新文件夹,但在保存 44354 后它仍然死了 使用 16.7 个 64 GB SD 卡的图像大约均匀分布在 7 个文件夹中。
【问题讨论】:
-
用
df -i db检查你的inode是否用完了。 -
如果是嵌入式系统,可能是只读挂载的? /etc/fstab
-
bmp.length有多大? -
@AlexandreLavoie - 系统不是只读的。本期前写了27220个文件。
-
你没有回答我的问题。我要问的是您通过让程序在某处打印值或使用调试器来验证程序中的 bmp.length == 641078 。某些返回数组的函数(例如 Gdk.Pixbuf.get_pixels)不返回长度,因此长度将设置为 -1。当您将长度转换为无符号整数时,就像 GLib.FileUtils.set_content 一样,它会变成一个非常大的正数,这可以解释您看到的错误。所以,需要明确的是,您已经验证了 bmp.length == 641078,或者这正是您所期望的?
标签: embedded-linux glib vala fileutils