自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux APM結(jié)構(gòu)中函數(shù)實(shí)現(xiàn)

運(yùn)維 系統(tǒng)運(yùn)維
針對(duì)APM和ACPI兩種不同的標(biāo)準(zhǔn),linux內(nèi)核提供了兩個(gè)不同的模塊來實(shí)現(xiàn)電源管理功能,這就是apm和acpi

需要注意,Linux APM和acpi是互相沖突的兩個(gè)模塊,用戶在同一時(shí)間內(nèi)只能加載其中之一,如果當(dāng)他們在加載的時(shí)候發(fā)現(xiàn)二者之一已經(jīng)加載,就會(huì)自動(dòng)退出。

Linux APM結(jié)構(gòu)中函數(shù)實(shí)現(xiàn)
當(dāng)一個(gè)用戶進(jìn)程打開apm_bios設(shè)備時(shí), 它就會(huì)調(diào)用這個(gè)函數(shù)
static int apm_open(struct inode * inode, struct file * filp)
{
//這個(gè)關(guān)鍵是Linux APM_user結(jié)構(gòu)變量as,它是用戶和Linux APM內(nèi)核部分溝通的橋梁,當(dāng)有Linux APM事件發(fā)生時(shí),就把event掛到apm_user的queue上,這樣當(dāng)用戶讀時(shí)就會(huì)讀到相關(guān)事件然后處理。
struct apm_user *as;
lock_kernel();
//分配一個(gè)Linux APM_user結(jié)構(gòu), 來表示一個(gè)用戶進(jìn)程
as = kzalloc(sizeof(*as), GFP_KERNEL);
//讀寫等權(quán)限設(shè)置
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;
//將這個(gè)用戶加入用戶隊(duì)列
down_write(&user_list_lock);
list_add(&as->list, &apm_user_list);
up_write(&user_list_lock);
//這是一個(gè)傳遞私有數(shù)據(jù)的一個(gè)通用方式
filp->private_data = as;
}
unlock_kernel();
return as ? 0 : -ENOMEM;
}
當(dāng)用戶空間進(jìn)程去讀這個(gè)設(shè)備時(shí), 這個(gè)函數(shù)就會(huì)被調(diào)用. 這個(gè)函數(shù)的主要作用是將事件讀出到用戶空間.
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;
//隊(duì)列空, 且進(jìn)程非阻塞讀, 立刻返回
if (queue_empty(&as->queue) && fp->f_flags & O_NONBLOCK)
return -EAGAIN;
//否則等待到隊(duì)列非空為止,
wait_event_interruptible(apm_waitqueue, !queue_empty(&as->queue));
//將隊(duì)列中的事件復(fù)制給用戶空間
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 查看磁盤空間實(shí)現(xiàn)代碼介紹
  2. Linux操作系統(tǒng)需要微軟的十大幫助
  3. 探尋Linux到底需要多低的配置
  4. Linux測試工具tcpdump監(jiān)視TCP/IP連接命令介紹
  5. Linux流量控制實(shí)例應(yīng)用介紹
責(zé)任編輯:chenqingxiang 來源: IT實(shí)驗(yàn)室
相關(guān)推薦

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函數(shù)結(jié)構(gòu)

2009-09-28 10:09:09

Linux內(nèi)核Linux循環(huán)鏈表

2017-01-13 15:45:05

Linuxfork函數(shù)詳解

2010-10-08 09:52:18

JavaScript匿

2009-11-25 10:52:22

PHP函數(shù)contin

2009-12-29 10:24:51

Linux內(nèi)核循環(huán)鏈表

2011-08-11 15:39:39

apm中文man

2023-03-26 22:02:53

APMPR監(jiān)控

2012-11-20 10:02:33

Compuware A云挑戰(zhàn)云環(huán)境

2010-01-18 17:38:54

C++虛函數(shù)表

2010-05-10 14:16:50

Oracle樹結(jié)構(gòu)

2021-03-29 08:01:20

JavaScript數(shù)據(jù)結(jié)構(gòu)

2014-08-24 22:11:27

2023-05-11 08:37:46

LinuxSpring MVC

2010-03-16 14:15:37

Linux系統(tǒng)

2012-10-12 09:38:13

APM應(yīng)用性能管理深信服

2022-02-28 08:17:24

重載函數(shù)JS前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)