Linux程序设计-学习笔记-第四章Linux环境

4.1程序参数

        main函数参数里的argc的个数里包括程序名,argv[0]就是程序名本身。循环调用getopt函数可以一次获得每个参数选项,具体使用查书吧,挺麻烦的。

 

4.2环境变量

 

        可以用set命令来列出所有的本地环境变量,env列出所有的环境变量。可以通过putenv和getnev函数来访问环境变量。putenv函数以一个格式为“名字=值”的字符串为参数,并将该字符串加入当前环境变量中。环境只对程序本身以及子进程是有效的,环境变量值不会由子进程传播到父进程。environ变量时char**类型的,指向一个字符串数组,代表所有环境变量。

 

4.3时间和日期

    

       所有的类UNIX系统都是用同一个时间和日期的起点:格林尼治时间(GMT)1970年1月1日0点,是UNIX纪元的起点,linux中所有的时间都是以从那时起经过的秒数来衡量的。DOS是从1980年开始计时的。

      时间通过一个预定义的time_t类型来处理,是一个长整形(32位操作系统上为32位)。time_t time(time_t *tp);可以通过调用time函数得到底层的时间值,并返回从纪元到现在的秒数。struct tm *gmtime(time_t timeval)函数把底层时间分解为一个结构tm。tm是一个人性化显示时间和日期。

      gmtime函数返回的是格林尼治时间,想得到本地时间要用localtime函数。mktime函数将tm结构的时间转换回time_t表示的底层时间。asctime函数和ctime函数可以得到更友好的字符串。strptime函数可以将表示的字符串以任一种格式输出。

 

4.4临时文件

 

        char *tmpnam(char *s) 函数可以产生一个唯一的文件名。tmpfile()函数创建一个临时文件,防止用tmpname函数生成之后,另一个程序用同样的名字创建文件。

 

4.5用户信息

 

       除了著名的init用户程序之外,所有的linux程序都是由一个用户启动的。UID是用户的唯一标示符。也可以对程序进行设置,让他们看上去是另一个用户启动的。suid(set uid)权限被设置时,程序的运行好像是属主启动的。su命令被执行时,程序的运行就好像他是有超级用户启动的。

       UID有他自己的类型--uid_t,它定义在头文件sys/types.h中。getuid函数返回程序关联的UID,/etc/passwd包含一个账户数据库,其中的密码信息是隐藏的,有一个专门的shadow密码文件包含密码信息。

 

4.6主机信息

 

        uname函数把主机信息写入一个utsname结构中,该结构包括了操作系统名、主机名、系统版本号、硬件类型等信息。gethostid()函数返回一个与主机对应的一个唯一值,SUN工作站上该值是一个存储在非易失的存储器的。linux系统中返回一个基于该机器因特网地址的值。多用来帮助做版权验证。

 

4.7日志

 

     有专门的目录来保存日志信息。可能是/user/adm或者/var/log目录。可以通过查看/etc/syslog.conf文件来检查系统配置。可以通过syslog函数来产生日志信息,编写程序时,在希望使用日志功能的地方调用syslog函数,之后会在/var/log/message文件中找到记录的日志。如果想改变一些默认的写入日志的设置,可以通过openlog函数进行设置,这个函数会打开一个文件描述符,用closelog来关闭。

 

4.8资源和限制

 

     在limits.h中定义了许多代表操作系统方面限制的常量,比如NAME_MAX  代表文件中的最大字符数、CHAR_BIT  char类型值的位数、CHAR_MAX char类型的最大值、INT_MAX int 类型的最大值。在头文件sys/resource.h中定义rusage结构来确定cpu的时间,它至少包含以下成员:struct timeval  ru_utime   使用的用户时间  struct timeval  ru_stime   使用的系统时间。

      优先级:每个进程有一个相关的优先级,优先级越高的程序将分配到更多的cpu时间。普通用户只能降低其程序的优先级,而不能升高。应用程序可以用getpriority和setpriority函数来确定和更改优先级。默认优先级是0.正数优先级用于后台任务,他们只有在没有其他更高优先级的任务准备运行时才执行,优先级范围是-20~+20,优先级数值越低反而优先级越高。

你可能感兴趣的:(Unix/Linux)