程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第一百二十七回:C語言實例--查看main函數的參數)

一起talk C栗子吧(第一百二十七回:C語言實例--查看main函數的參數)

編輯:關於C語言

一起talk C栗子吧(第一百二十七回:C語言實例--查看main函數的參數)



各位看官們,大家好,上一回中咱們說的是static關鍵字的例子,這一回咱們說的例子是:查看main函數的參數。閒話休提,言歸正轉。讓我們一起talk C栗子吧!

看官們,我們在第五十七回中介紹過main函數的參數,如果有看官忘記的話,可以點擊這裡查看以前的內容。在以前的內容中,我們介紹的是在程序中直接操作main函數的參數。也就是直接操作argv和argc。這種方法需要提前在代碼中編寫相關的內容來操作argv和argc。如果我們想在程序運行時查看main函數的參數,怎麼辦呢?有看官說,可以再代碼中添加操作argv和argc的內容。這個時候再返回代碼中編寫操作argv和argc的代碼就有點晚了,我們還需要重新編譯代碼,把大把的時間白白浪費在了等待程序編譯上,真是太可惜了。台下已經有看官在搖頭歎氣呢。看官莫要灰心,我們今天來介紹另外一種查看main函數參數的方法,通過該方法可以在程序運行時查看程序中main函數的參數。

Linux中有一個特殊的文件系統叫作:proc。該文件系統中存放關Linux系統相關的信息。今天我們只介紹其中的一種信息,那就是進程的命令行參數,也就是我們要介紹的main函數的參數。接下來我們通過例子來說明如何查看進程的命令行參數,也就是我們要介紹的main函數的參數。

#include 

int main(int argc, char *argv[])
{
    int i = 0;

    while(i++ < argc*3)
        sleep(1);

    return 0;
}

我們寫一些簡單的代碼,代碼中使用sleep函數讓程序暫時一段時間,該時間等於程序的參數個數乘以三,單位為秒。我們把上面的代碼保存到一個文件中,然後使用gcc編譯該文件,並且生成名為s的可執行文件。

我們在終端中運行該程序,具體的命令如下:

./s -a -b &                  //在後台運行該程序,並且傳遞給程序兩個參數:-a和-b
[1] 3231                     //程序在後台運行中,同時終端中顯示該程序的進程ID
cat /proc/3231/cmdline       //使用cat命令查看進程的命令行參數
./s-a-b                      //終端中顯示也進程的命令行參數,這裡省略了終端的提示信息
[1]+  Done                    ./s -a -b //程序在後台運行完成

從上面的運行結果中可以看到,我們在終端中通過cat命令可以直接查看進程的命令行參數,也就是該進程中main函數的參數:-a -b。該參數正是我們在運行程序時傳遞給程序的參數。

“ /proc/3231/cmdline”是什麼意思喲?這時有看官在提問了,看官莫急,我們剛才說了proc是一種特殊的文件系統,而該文件系統中有很多目錄,這些目錄中有一部分目錄名稱是數字,這些以數字為目錄名的目錄中包含有進程相關的信息,而目錄名就是進程的PID。在該類型的目錄中有一個叫cmdline的文件,該文件中的內容就是進程的命令行參數,也就是main函數的參數。我們在上面的例子中運行命令:cat /proc/3231/cmdline其意思就是查看PID為3231進程的命令行參數。

看官們,該方法可以在程序運行或者調試程序的過程中直接查看main函數的參數。這樣就不需要我們提前在代碼中編寫操作argv和argc的內容了,而且可以節省重新編譯程序的時間,真是一舉兩得呀!

各位看官,關於查看main函數參數的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved