亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不知道為什么不能成功,/sdcard軟鏈接到/mnt/sdcard也是這樣做的啊

不知道為什么不能成功,/sdcard軟鏈接到/mnt/sdcard也是這樣做的啊

小唯快跑啊 2023-04-24 16:19:55
我想在android機器里創建一個/anl目錄,然后/anl軟鏈接到/misc目錄。在init.rc 里:mkdir /anlsymlink /misc /anl不知道為什么不能成功,/sdcard軟鏈接到/mnt/sdcard也是這樣做的呀。求解決辦法。直接在init.rc里寫:symlink /misc /anl(不能先創建anl目錄)--------------------------------相關函數link,unlink表頭文件#include<unistd.h>定義函數int symlink( const char * oldpath,const char * newpath);函數說明symlink()以參數newpath指定的名稱來建立一個新的連接(符號連接)到參數oldpath所指定的已存在文件。參數oldpath指定的文件不一定要存在,如果參數newpath指定的名稱為一<bold>已存在的文件則不會建立連接</bold>。<br>
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

//總結:后面代碼不太相同;
//補充:
另外一個函數queue_builtin_action來向init進程中的一個待執行action隊列增加了一個名稱等于“console_init”的action。這個action對應的執行函數為console_init_action,它就是用來顯示第二個開機畫面的。
queue_builtin_action中也會執行action_add_queue_tail;和接下來調用的action_for_each_trigger一樣;
action_list列表用來保存從啟動腳本/init.rc解析得到的一系列action,以及一系列內建的action。當這些action需要執行的時候,它們就會被添加到action_queue列表中去,以便init進程可以執行它們。
回到init進程的入口函數main中,最后init進程會進入到一個無限循環中去。在這個無限循環中,init進程會做以下五個事情:

A. 調用函數execute_one_command來檢查action_queue列表是否為空。如果不為空的話,那么init進程就會將保存在列表頭中的action移除,并且執行這個被移除的action。由于前面我們將一個名稱為“console_init”的action添加到了action_queue列表中,因此,在這個無限循環中,這個action就會被執行,即函數console_init_action會被調用。
B. 調用函數restart_processes來檢查系統中是否有進程需要重啟。在啟動腳本/init.rc中,我們可以指定一個進程在退出之后會自動重新啟動。在這種情況下,函數restart_processes就會檢查是否存在需要重新啟動的進程,如果存在的話,那么就會將它重新啟動起來。
C. 處理系統屬性變化事件。當我們調用函數property_set來改變一個系統屬性值時,系統就會通過一個socket(通過調用函數get_property_set_fd可以獲得它的文件描述符)來向init進程發送一個屬性值改變事件通知。init進程接收到這個屬性值改變事件之后,就會調用函數handle_property_set_fd來進行相應的處理。后面在分析第三個開機畫面的顯示過程時,我們就會看到,SurfaceFlinger服務就是通過修改“ctl.start”和“ctl.stop”屬性值來啟動和停止第三個開機畫面的。
D. 處理一種稱為“chorded keyboard”的鍵盤輸入事件。這種類型為chorded keyboard”的鍵盤設備通過不同的銨鍵組合來描述不同的命令或者操作,它對應的設備文件為/dev/keychord。我們可以通過調用函數get_keychord_fd來獲得這個設備的文件描述符,以便可以監控它的輸入事件,并且調用函數handle_keychord來對這些輸入事件進行處理。
E. 回收僵尸進程。我們知道,在Linux內核中,如果父進程不等待子進程結束就退出,那么當子進程結束的時候,就會變成一個僵尸進程,從而占用系統的資源。為了回收這些僵尸進程,init進程會安裝一個SIGCHLD信號接收器。當那些父進程已經退出了的子進程退出的時候,內核就會發出一個SIGCHLD信號給init進程。init進程可以通過一個socket(通過調用函數get_signal_fd可以獲得它的文件描述符)來將接收到的SIGCHLD信號讀取回來,并且調用函數handle_signal來對接收到的SIGCHLD信號進行處理,即回收那些已經變成了僵尸的子進程。
注意,由于后面三個事件都是可以通過文件描述符來描述的,因此,init進程的入口函數main使用poll機制來同時輪詢它們,以便可以提高效率。

查看完整回答
反對 回復 2023-04-27
  • 1 回答
  • 0 關注
  • 363 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號