91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Linux APM結構中函數實現

發布時間:2021-11-01 16:33:01 來源:億速云 閱讀:155 作者:柒染 欄目:系統運維

如何進行Linux APM結構中函數實現,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

需要注意,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;

看完上述內容,你們掌握如何進行Linux APM結構中函數實現的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武功县| 淮南市| 洮南市| 兴国县| 清远市| 长沙县| 龙井市| 河间市| 汉沽区| 嵩明县| 兴宁市| 海林市| 丰原市| 仁化县| 左云县| 江北区| 漳浦县| 五指山市| 历史| 聊城市| 西畴县| 富蕴县| 河西区| 太湖县| 太和县| 大洼县| 都江堰市| 湄潭县| 华亭县| 长岭县| 遂川县| 罗定市| 页游| 赞皇县| 峨眉山市| 芒康县| 临洮县| 乐亭县| 军事| 大理市| 洛宁县|