关于ldd3中的ioctl的调用

本文详细介绍了如何使用 scull 程序中的 ioctl 操作,包括自定义头文件 sculltest.h 的创建与使用,以及通过 ioctl 进行设备属性读写的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天终于把scull程序弄好了,重点是知道ioctl怎么用了,主要是要自己写一个头文件定义一些操作,这个应该是 和scull.h中定义的一模一样的。然后再在自己的应用程序中包含这个头文件,我的头文件名字为sculltest.h。具体的,我的应用程序编写如下:
 #include   <stdio.h>
#include   <fcntl.h>
#include   <sys/ioctl.h>
#include   <sys/types.h>
#include   <linux/kdev_t.h>
#include   <stdlib.h>
#include  "sculltest.h"
/*   device   path   */
char   path[]   =   "/dev/scull0";
char   buf[128];
char   temp[128];
int   main()
{
int  temp11,temp22;
int   f   =   open(path,   O_RDWR);
if   (f   ==   -1)
{
printf("device   open   error!/n");
return   1;
}
ioctl(f,SCULL_IOCGQUANTUM,&temp11);
printf("quantum is %d/n" , temp11);
printf("quantum set is /n" );
temp11 = 0;
scanf("%d",&temp11);
ioctl(f,SCULL_IOCTQUANTUM,temp11);
ioctl(f,SCULL_IOCGQUANTUM,&temp22);
printf("quantum is %d/n" , temp22);



printf("Input   a   string   to   write   device   /n");
scanf("%s",   buf);
write(f,   buf,   4); /*   device   wirte   */

printf("Read   the   string   from   device.../n");
read(f,   temp,   128); /*   device   read   */
printf("%s/n",   buf);

close(f);
}


sculltest.h文件内容如下:
/* Use 'k' as magic number */
#define SCULL_IOC_MAGIC  'k'
/* Please use a different 8-bit number in your code */

#define SCULL_IOCRESET    _IO(SCULL_IOC_MAGIC, 0)

/*
 * S means "Set" through a ptr,
 * T means "Tell" directly with the argument value
 * G means "Get": reply by setting through a pointer
 * Q means "Query": response is on the return value
 * X means "eXchange": switch G and S atomically
 * H means "sHift": switch T and Q atomically
 */
#define SCULL_IOCSQUANTUM _IOW(SCULL_IOC_MAGIC,  1, int)
#define SCULL_IOCSQSET    _IOW(SCULL_IOC_MAGIC,  2, int)
#define SCULL_IOCTQUANTUM _IO(SCULL_IOC_MAGIC,   3)
#define SCULL_IOCTQSET    _IO(SCULL_IOC_MAGIC,   4)
#define SCULL_IOCGQUANTUM _IOR(SCULL_IOC_MAGIC,  5, int)
#define SCULL_IOCGQSET    _IOR(SCULL_IOC_MAGIC,  6, int)
#define SCULL_IOCQQUANTUM _IO(SCULL_IOC_MAGIC,   7)
#define SCULL_IOCQQSET    _IO(SCULL_IOC_MAGIC,   8)
#define SCULL_IOCXQUANTUM _IOWR(SCULL_IOC_MAGIC, 9, int)
#define SCULL_IOCXQSET    _IOWR(SCULL_IOC_MAGIC,10, int)
#define SCULL_IOCHQUANTUM _IO(SCULL_IOC_MAGIC,  11)
#define SCULL_IOCHQSET    _IO(SCULL_IOC_MAGIC,  12)

/*
 * The other entities only have "Tell" and "Query", because they're
 * not printed in the book, and there's no need to have all six.
 * (The previous stuff was only there to show different ways to do it.
 */
/* ... more to come */

#define SCULL_IOC_MAXNR 14

呵呵,就ok了,呵呵,好好学习,总会感觉到自己在进步。
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 HttpServletRequestWrapper 是 Java Servlet API 中的一个工具类,位于 javax.servlet.http 包中,用于对 HttpServletRequest 对象进行封装,从而在 Web 应用中实现对 HTTP 请求的拦截、修改或增强等功能。通过继承该类并覆盖相关方法,开发者可以轻松地自定义请求处理逻辑,例如修改请求参数、添加请求头、记录日志等。 参数过滤:在请求到达处理器之前,可以对请求参数进行检查或修改,例如去除 URL 编码、过滤敏感信息或进行安全检查。 请求头操作:可以修改或添加请求头,比如设置自定义的 Content-Type 或添加认证信息。 请求属性扩展:在原始请求的基础上添加自定义属性,供后续处理使用。 日志记录:在处理请求前记录请求信息,如 URL、参数、请求头等,便于调试和监控。 跨域支持:通过添加 CORS 相关的响应头,允许来自不同源的请求。 HttpServletRequestWrapper 通过继承 HttpServletRequest 接口并重写其方法来实现功能。开发者可以在重写的方法中添加自定义逻辑,例如在获取参数时进行过滤,或在读取请求体时进行解密。当调用这些方法时,实际上是调用了包装器中的方法,从而实现了对原始请求的修改或增强。 以下是一个简单的示例,展示如何创建一个用于过滤请求参数的包装器: 在 doFilter 方法中,可以使用 CustomRequestWrapper 包装原始请求: 这样,每当调用 getParameterValues 方法时,都会先经过自定义的过滤逻辑。 HttpServletRequestWrapper 是 Java Web 开发中一个强大的工具,它提供了灵活的扩展性,允许开发者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值