• 一起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 <stdio.h>
    
    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函数參数的样例咱们就讲到这里。欲知后面还有什么样例。且听下回分解 。


  • 相关阅读:
    DB2隔离级别之RR/RS/CS/UR
    struts1之工作原理
    CSS之伪类
    JSF+EJB+JPA之整体思想
    microservice-cloud-03-provider-product-8001
    在SpringCloud中MAVEN配置文件中的更改
    springBoot和MyBatis整合中出现SpringBoot无法启动时处理方式
    使用springBoot和mybatis整合时出现如下错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)解决方案
    application.properties
    springboot
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7262934.html
Copyright © 2020-2023  润新知