成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux APM結構中函數實現

運維 系統運維
針對APM和ACPI兩種不同的標準,linux內核提供了兩個不同的模塊來實現電源管理功能,這就是apm和acpi

需要注意,Linux APM和acpi是互相沖突的兩個模塊,用戶在同一時間內只能加載其中之一,如果當他們在加載的時候發現二者之一已經加載,就會自動退出。

Linux APM結構中函數實現
當一個用戶進程打開apm_bios設備時, 它就會調用這個函數
static int apm_open(struct inode * inode, struct file * filp)
{
//這個關鍵是Linux APM_user結構變量as,它是用戶和Linux APM內核部分溝通的橋梁,當有Linux APM事件發生時,就把event掛到apm_user的queue上,這樣當用戶讀時就會讀到相關事件然后處理。
struct apm_user *as;
lock_kernel();
//分配一個Linux APM_user結構, 來表示一個用戶進程
as = kzalloc(sizeof(*as), GFP_KERNEL);
//讀寫等權限設置
if (as) {
as->suser = capable(CAP_SYS_ADMIN);
as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE;
as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ;
//將這個用戶加入用戶隊列
down_write(&user_list_lock);
list_add(&as->list, &apm_user_list);
up_write(&user_list_lock);
//這是一個傳遞私有數據的一個通用方式
filp->private_data = as;
}
unlock_kernel();
return as ? 0 : -ENOMEM;
}
當用戶空間進程去讀這個設備時, 這個函數就會被調用. 這個函數的主要作用是將事件讀出到用戶空間.
static ssize_t apm_read(struct file *fp, char __user *buf, size_t count, loff_t *ppos)
{
struct apm_user *as = fp->private_data;
apm_event_t event;
int i = count, ret = 0;
if (count < sizeof(apm_event_t))
return -EINVAL;
//隊列空, 且進程非阻塞讀, 立刻返回
if (queue_empty(&as->queue) && fp->f_flags & O_NONBLOCK)
return -EAGAIN;
//否則等待到隊列非空為止,
wait_event_interruptible(apm_waitqueue, !queue_empty(&as->queue));
//將隊列中的事件復制給用戶空間
while ((i >= sizeof(event)) && !queue_empty(&as->queue)) {
event = queue_get_event(&as->queue);
ret = -EFAULT;
if (copy_to_user(buf, &event, sizeof(event)))
break;

【編輯推薦】

  1. Linux 查看磁盤空間實現代碼介紹
  2. Linux操作系統需要微軟的十大幫助
  3. 探尋Linux到底需要多低的配置
  4. Linux測試工具tcpdump監視TCP/IP連接命令介紹
  5. Linux流量控制實例應用介紹
責任編輯:chenqingxiang 來源: IT實驗室
相關推薦

2010-06-21 10:40:06

Linux APM

2010-06-21 10:25:09

Linux APM

2010-06-21 14:05:08

Linux APM

2021-11-02 12:19:18

Go函數結構

2009-09-28 10:09:09

Linux內核Linux循環鏈表

2017-01-13 15:45:05

Linuxfork函數詳解

2011-08-11 15:39:39

apm中文man

2009-11-25 10:52:22

PHP函數contin

2010-10-08 09:52:18

JavaScript匿

2014-08-24 22:11:27

2023-03-26 22:02:53

APMPR監控

2012-11-20 10:02:33

Compuware A云挑戰云環境

2009-12-29 10:24:51

Linux內核循環鏈表

2021-09-06 08:13:35

APM系統監控

2015-03-20 16:16:56

APM應用性能管理云智慧

2012-10-12 09:38:13

APM應用性能管理深信服

2010-05-10 14:16:50

Oracle樹結構

2021-03-29 08:01:20

JavaScript數據結構

2010-01-18 17:38:54

C++虛函數表

2023-05-11 08:37:46

LinuxSpring MVC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品视频免费 | 做a视频在线观看 | 久久久久久亚洲欧洲 | 久久91精品国产 | 亚洲成人中文字幕 | 国产精品免费一区二区 | 特级a欧美做爰片毛片 | 日本aⅴ中文字幕 | 日韩在线观看视频一区 | 色视频在线免费观看 | 亚洲免费在线 | 一级免费毛片 | 成人永久免费 | 三级黄色网址 | 国产一区免费 | 成人动漫一区二区 | 不卡在线视频 | 婷婷二区| 99久久婷婷国产综合精品电影 | 精品综合网 | 久久精品久久综合 | 亚洲欧美日韩精品久久亚洲区 | 欧美精品第三页 | 国产欧美在线一区 | 中文一区 | 亚洲一区av| 国产精品久久久久久吹潮 | 亚洲成人毛片 | 三级在线视频 | 人人做人人澡人人爽欧美 | 日韩视频一区二区三区 | 黄篇网址| 中文字幕高清视频 | 碰碰视频 | 亚洲一区视频在线 | 亚洲一区二区三区四区五区中文 | 精品一二区 | 亚洲精品久久久久久久不卡四虎 | 国产剧情一区 | www国产精品 | 五月天激情综合网 |