为什么我无法读取此文件。我尝试用cat读取此文件:
cat /dev/video0
但它说
cat: /dev/video0 : invalid arguments
同样,如果我尝试将dd用作:
dd if=/dev/video0 ~/vid
仍然无法阅读。
请注意,video0是我的网络摄像头的设备文件。
答案 0 :(得分:3)
在这种情况下,找到更多信息的一种方法是在 strace中运行命令
strace cat /dev/video0
将显示故障点的更多细节:
....
open("/dev/video0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, 0x2379000, 65536) = -1 EINVAL (Invalid argument)
....
在我的情况下似乎是说我的/ dev / video0设备不支持所需的操作:所以在这种情况下,'cat'试图从设备读取64k字节。
然而,我发现使用nc(netcat)代替cat确实可以用于此目的:
nc -l 1234 </dev/video0
用相应的:
nc 127.0.0.1 1234 | mplayer tv://device=/dev/stdin
在本地显示; SSH隧道端口也可以在这里工作。
答案 1 :(得分:2)
我用:
dd if=/dev/video0 of=~/movie.mpg
然后
vlc movie.mpg
但我正在使用PVRUSB2 mpg编码器/解码器作为源。
在您的dd调用中,您可能会考虑使用“of”构造的重定向“&gt;”。
答案 2 :(得分:1)
我认为您在驱动程序中创建的设备节点“video0”的show函数可能是错误的。
在下面举一个例子。
static DEVICE_ATTR(video0, S_IRUGO|S_IWUSR|S_IWGRP|S_IWOTH, video0_show, video0_store);
static ssize_t video0_show(struct device *dev, struct device_attribute *attr, char *buf);
static ssize_t video0_store(struct device *dev, struct device_attribute *attr, char *buf, size_t count);
当您在运行时捕获设备节点“video0”时,它会调用“video0_show”函数来打印某些内容。 错误消息“cat:/ dev / video0:invalid arguments”表示video0_show函数的参数错误。你应该调试驱动程序。