Linux設置內核參數的方法
1 內核參數的查看方法
使用「sysctl -a」命令可以查看所有正在使用的內核參數。內核參數比較多(一般多達500項),按照前綴主要分為以下幾大類:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安裝的組件和使用的方式不一樣,正在使用的內核參數是不一樣的。
所有的內核參數的說明文檔是放到/usr/src/linux/Documentation/sysctl中的,如果想知道對內核參數的說明,可以到該目錄下查看相應的說明文檔。
2 內核參數的的設置方法
由於Linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。也可以通過文件的方式進行設置。下面就介紹這兩種修改方法。
2.1 命令設置的方式
可以用兩種方法實現。
1、使用「sysctl -w 參數名=值」的方式
假設我們把net.ipv4.ip_forward的值修改為1,使用命令「sysctl -w net.ipv4.ip_forward=1」。
2、修改內核參數對應的proc文件
內核參數位於/proc/sys/之下,參數名稱是以文件所在的路徑,並將「/」以「.」來取代。舉例來說,/proc/sys/net/ip_forward的參數名稱為net.ipv4.ip_forward。
同樣把net.ipv4.ip_forward的值修改為1,使用命令「echo 「1」 > /proc/sys/net/ipv4/ip_forward」。
注意,這里proc文件跟普通的文件不一樣。一般一個文件用echo寫入內容之後,會變成一個文本文件,但echo修改proc文件之後還是個空文件。
② 解析命令行參數的函數
1.全局變數解釋:
optarg: 如果選項帶參數,參數保存在optarg中。如果選項帶可選參數,而實際無參數時,optarg為NULL。
optind:argv數組中下一次需要處理的元素的下標,系統默認初始化此值為1. 0是沒有意義的,argv[0]為程序名,在解析命令行參數中是沒有意義的。getopt正常解析完畢後,optind設置為argv數組中第一個不是選項的元素的下標(一般為0)。
opterr:存儲錯誤耐猛納選項字元.
2. GNU/Linux的命令行選項有兩種類型: 短選項和長選項昌沒 ,前者以 '-' 作為前導符,後者以 '--' 作為前導符。 -n 表示是一個不帶參數的短選項。 --n 表示是一個不帶參數的長選項。現在有一個帶有參數的短選項比如說 -w foo ,那麼它和長選項 --foo 是等價的。
函數聲明:
函數參數:
1.argc:主函數傳遞過來的實參
2.argv:主函數傳遞過來的實參
3.optstring:一個包含選項字元的字元串。 一組短選項組成的字元串
函數調用結果
1.該函數每解析完一個選項,就返回該選項字元。選項字元解析完畢後,調用getopt函數將會返回-1,然後optind設置為argv數組中第一個不是選項的元素的下標。
2. 當調用getopt函數檢測到錯誤時(比如說檢測到的選項字元不在optstring實參中),默認情況下函數返回'?'。 為什麼說是默認呢?因為如果通過optstring實參指明選項帶參數,而實際命令行沒有參數時,getopt返回 ':' 而不是 '?'
關於optstring,還有幾點說明:
1.如果選項帶參數,該選項後接冒號,比如optstring這個實參值為"a:b",指示a帶參數,b沒有參數;
2.如果選項帶可選參數,該選項後接兩個冒號,比如"a::b",表明a可能有參數,也可能沒有;
3.如果optstring的開頭字元為':',表明如果指明選項帶參數,而實際命令行沒有參數時,getopt返回':'而不是'?'(默認情況下返回 '?' ,和無法識別的參數返回一樣);
4.如果optstring的開頭字元為'+',表明一但遇到一個非選項參數,馬上停止掃描,隨後的部分當作參數來解釋;
5.如果optstring的開頭字元為'-',表明如知賀果遇到無選項參數,則把它當作選項1(不是字元Ƈ')的參數
示例:(來源於man文檔)
運行示例:
函數聲明:
函數參數:
longops:指向一個option結構體數組的第一個元素。
longindex:getopt_long的最後一個參數longindex在函數返回時指向被搜索到的選項在longopts數組中的下標。
關於option struct如下:
注意在初始化option struct時: The last element of the array has to be filled with zeros.
函數返回值:
1.如果flag這個實參為null,那麼這個函數返回val的值。 這樣短選項字元解析和長選項解析搭建了橋梁。
2.如果flag這個實參不為null,那麼這個函數返回0
3.選項字元解析完畢後,調用getopt_long函數將會返回-1
4.當調用getopt_long函數檢測到錯誤時(比如說檢測到的選項字元不在longops實參中),默認情況下函數返回'?'
示例:(來源於man 文檔)
運行示例如下:
getopt_long_only類似於getopt_long,但是它把 '-' 開頭的選項當作長選項來處理。如果該選項與長選項不匹配,而與短選項匹配,則可以作為短選項解析。
③ linuxc運行進程中輸入命令行參數linuxc運行
c語言與操作系統有什麼關系?
操作系統是電腦的管家,管理著電腦的各種資源,C語言中申請內存空間,最終還是要通過api向操作系統申請的。
C源程序如果由LINUX平台的編譯器編譯,那麼就可以在LINUX平台上運行,如果在Win平台的編譯器編譯,那就可以在Win平台上運行。C語言只是一種規范,和具體的平台無關
linux下搞c編程有什麼前途?
linux環境下c語言編程普片應用於硬體驅動程序、嵌入式開發、底層開發等場景。用途還是非常大的。linux下學c語言也有利於了解硬體和系統相關知識。
到底怎麼在Linux里編寫c程序啊?
gccfirst.C-ofirst說明:
1>編譯當前目錄下、名字叫做first.C的c源文件;
2>在當前目錄下、生成名字叫first(這個名字可以自己隨便寫、符合linux命名規則就行)的可執行程序;關於運行:用ls-l命令,可以看到當前目錄下有一個綠色的文件、名字叫first,就是剛剛編譯得到的文件;使用命令「./first」既可運行(無雙引號、雙引號是用來說明的);
為什麼linux運行c語言文件會報許可權不夠?
修改許可權可以解決該問題。
可以使用chmod命令修改許可權。
語法:chmodmodefile...
說明:Linux/Unix的檔案調用許可權分為三級:檔案擁有者、群組、其他。利用chmod可以藉以控制檔案如何被他人所調用。
參數:
mode:許可權設定字串,格式如下:...],其中
u表示該檔案的擁有者,g表示與該檔案的擁有者屬於同一個群體(group)者,o表示其他以外的人,a表示這三者皆是。
+表示增加許可權、-表示取消許可權、=表示唯一設定許可權。
r表示可讀取,w表示可寫入,x表示可執行,X表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
-c:若該檔案許可權確實已經更改,才顯示其更改動作
-f:若該檔案許可權無法被更改也不要顯示錯誤訊息
-v:顯示許可權變更的詳細資料
-R:對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞回的方式逐個變更)
--help:顯示輔助說明
--version:顯示版本