gpt4 book ai didi

c - Linux 设备驱动程序,是否可以使用文件描述符获取次要编号?

转载 作者:太空狗 更新时间:2023-10-29 17:06:43 24 4
gpt4 key购买 nike

我正在为 Linux 编写设备驱动程序。它创建一个具有 4 个次要编号的设备。每当我们尝试写入次设备编号 3 的设备时,我们都应该终止该设备,目前它除了打印它正在写入 booga 设备之外不应该做任何其他事情。这是我当前的一些代码,如有必要,我可以发布更多代码:

写法:

static ssize_t booga_write (struct file *filp, const char *buf, size_t count, loff_t *f_pose) {
printk("Attempting to write to booga device\n");
/* need to protect this with a semaphore if multiple processes
will invoke this driver to prevent a race condition */

if (down_interruptible (&booga_device_stats->sem))
return (-ERESTARTSYS);
booga_device_stats->num_bytes_written += count;
up(&booga_device_stats->sem);
return count; // pretend that count bytes were written

}

如何测试:

static void run_write_test(char *device, int bufsize)
{
char *buf;
int src;
int out;

src = open(device, O_WRONLY);
if (src < 0) {
perror("Open for write failed:");
exit(1);
}
buf = (char *) malloc(sizeof(char)*(bufsize+1));
fprintf(stderr, "Attempting to write to booga device\n");
out = write(src, buf, bufsize);
fprintf(stderr, "Wrote %d bytes.\n", out);
free(buf);
close(src);

}

我想知道是否有办法获得次要号码。我查看了 linux/fs.h,发现文件结构有一个名为 private_data 的成员,但每当我尝试调用它时,它都会使我的系统崩溃,因为它当前设置为 null。

或者我根本不应该尝试从结构文件中获取次要编号,而是应该在我第一次打开设备时尝试跟踪它?

最佳答案

你可以这样获取次要号码:

iminor(filp->f_path.dentry->d_inode)

关于c - Linux 设备驱动程序,是否可以使用文件描述符获取次要编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982318/

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