免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 799 | 回复: 0
打印 上一主题 下一主题

内核定时任务学习实例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-15 14:01 |只看该作者 |倒序浏览
/*
*kernel module
*char device
*mytimer.c
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME "chardev"
static ssize_t chardev_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos);
static struct file_operations chardev_fops = {
            .read = chardev_read,
};
static struct cdev *cdevp = NULL;
static dev_t devno;
static wait_queue_head_t queue;
static int flag = 0;
static struct timer_list timer;
static void timer_callback(unsigned long arg)
{
    printk("callback...%ld %ld\n",timer.expires,jiffies);
    flag = 1;
    struct task_struct *p=(struct task_struct *)arg;
    wake_up_interruptible(&queue);
    //wake_up_process(p);
}
static ssize_t chardev_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
{
    char sendbuf[] = "hello world";
    init_timer(&timer);
    timer.expires = jiffies + HZ * 20;
    timer.data =(unsigned long)current;
    timer.function = timer_callback;
    add_timer(&timer);
    printk(" HZ...%d\n",HZ);
    printk(" befoer schedule...%ld %ld\n",timer.expires,jiffies);
    wait_event_interruptible(queue, flag != 0);
    //schedule();
    printk("time out...%ld %ld\n",timer.expires,jiffies);
    flag = 0;
    del_timer(&timer);
    copy_to_user(buf, sendbuf, strlen(sendbuf));
    return strlen(res);
}
static int __init chardev_init(void)
{
    int ret;
    ret = alloc_chrdev_region(&devno, 0, 1, DEVICE_NAME);
    if (ret
#include
#include
#include
#include
int main()
{
    int fd=0;
    int rf=0;
    char buf[15];
    fd=open("/dev/chardev",O_RDWR);
    if ( fd == -1 )
        {
          printf("Cann't open file \n");
          exit(0);
        }
    memset(buf, 0, sizeof(buf));
    rf=read(fd,buf,12);
    if(rf

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/65841/showart_689096.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP