我有问题的免费分配的文件描述符,它总是零!
例如:
$ cat /proc/sys/fs/file-nr
4448 0 1529806
AFAIK,这意味着:
4448 is total alocated file descriptors
0 is total of free alocated file descriptors
1529806 is the total limit of the system
此外,我还规定了以下限制:
$ ulimit -a
core file size (blocks, -c) 0
data seg size
我正在使用ioctl()从块设备(Scsi)读取数据。
我注意到,当我读取1024扇区时,ioctl完成时没有任何问题。当我读取2048时,过了很长一段时间后,它返回ENOMEM (errno=12),这甚至没有列在可能的错误列表中(请参阅)
我已经tripple检查了我传递的缓冲区大小是否合适,所以这不可能是这种情况--没有缓冲区溢出。
那么,我如何才能知道使用ioctl读取的最大缓冲区大小?
编辑1
一些附加信息可能会对您有所帮助:
Enterprise Linux Enterprise Linux Server release 5.3 (Carthage)
Red Hat Enterpr
目前,我有一个Linux2.6内核模块,它通过pci_get_device()和pci_read_config_dword()访问某个设备。将来,该模块将被修改为,也会工作一台似乎没有PCI总线的机器(/sys/ bus /pci不存在),但是在一个固定的已知地址上有特定的设备。现在,我希望one模块二进制没有在两台机器上工作的参数。为了能够在非PCI机器上加载模块,我认为我必须避免使用pci_get_device()等;因此,我必须以其他方式在PCI机器上获得所需的配置空间信息。我可以在init_module()中从init_module()中读取它,但我认为让内核模块读取文件被认为是错误的
在构建busybox时,我发现一些源文件包括linux内核头。我添加了#define __KERNEL__来选择头文件行的某些部分。我还在内核头文件中添加了#define _BUSYBOX_和插入#ifndef _BUSYBOX_,这样编译器就不会选择某些特定的部分(我不知道这是正确的方法)。
我面临的下一个问题是下面。它说fd_set被定义了两次。
In file included from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/thread_i