int fd;
fd = open("/dev/somedevice", O_RDWR);
我到底得到了什么?我可以看到man页面上说:
open()函数将返回一个文件描述符,该文件描述符是该进程当前未打开的最低文件描述符
但是就这样吗?它只是一个int
还是背后附带有数据?我之所以问是因为我发现了一些代码(Linux/C),我们正在从用户空间打开文件:
//User space code:
int fdC;
if ((fdC = open(DEVICE, O_RDWR)) < 0) {
printf("Error opening device %s (%s)\n", DEVICE, strerror(errno));
goto error_exit;
}
while (!fQuit) {
if ((nRet = read(fdC, &rx_message, 1)) > 0) {
在内核端,为该模块(提供fd)提供文件操作的函数将读取映射到n_read()
函数:
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
接下来,文件描述符在n_read()
中被使用,但是它被访问以获取数据:
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
所以...我猜这里发生的一件事情要么是:
A) 从open()
返回的文件描述符包含的数据不仅仅是一个描述性整数值
或者
B) 在用户空间中调用"read"的映射并不像我想象的那么简单,这个方程中缺少一些代码。
是否有任何可以帮助指导我的输入?
fQuit
在哪里声明的?是的,文件描述符只是整数。关于它们的任何信息都必须通过从内核文件描述符表中进行系统调用来获取。 - Sergey L.fQuite
的值为0。 - Mike