Beginning Linux Programming chapter 4

程序引数

       当操作系统启动一个新的程序时,参数argc和argv[]都会传递给程序。这些参数通常都是由另一个程序提供,大多数情况下都是有shell请求系统开始新的程序,shell获取命名行,然后分割成独立的词组保存在argv数组中。argc是记录参数个数的,包括程序名。程序名保存在argv[0]中。

 



环境变量
   Unix定义了很多标准的环境变量,包括终端类型、默认编辑器,时区......在C程序中可以使用getenv和setenv两个方法来使用环境变量。
      #include <stdlib.h>
      char *getenv(const char *name);    //返回获取name的环境变量值指针
      int putenv(const char *string);    //将“name=value”格式的值存储到环境变量中。

时间和日期
    Times通过使用一个结构体 time_t 来进行控制,这是一个长整形,定义在time.h头文件中。
      #include <time.h>
      time_t time(time_t *tloc);   //返回从epoth到现在的秒数,
      double difftime(time_t time1, time_t time2);    // 查看时间差,time1 - time2

      #include <time.h>
      struct tm *gmtime(const time_t timeval);    //gmtime将低级别的时间值分解到一个结构体tm中,tm至少包含
                int tm_sec   Seconds, 0-61
                int tm_min   Minutes, 0-59
                int tm_hour  Hours, 0-23
                int tm_mday  Day in the month, 1-31
                int tm_mon   Month in the year, 0-11 (January = 0)
                int tm_year  Years since 1900
                int tm_wday Day in the week, 0-6 (Sunday = 0)
                int tm_yday Day in the year, 0-365
                int tm_isdst Daylight savings in effect            
      struct tm *localtime(const time_t *timeval);   //返回一个调整到本地时区的的tm结构体。
      time_t mktime(struct tm *timeptr);    //将tm类型的值转换到time_t类型。错误,返回-1.
      char *asctime(const struct tm *timeptr);    //将tm类型的tmeptr转化给一个包含日期和时间的字符串返回
      char *ctime(const time_t *timeval);    //相当于asctime(localtime(timeval)),就是获取本地时间并转化给一个包含日期和时间的字符串返回。
      size_t strftime(char *s, size_t maxsize, const char *format, struct tm *timeptr);  //将timeptr安format的格式转化为最长为maxsize的字符串s。strftime(buf, 256, “%A %d %B, %I:%S %p”, tm_ptr);
      char *strptime(const char *buf, const char *format, struct tm *timeptr);  //将格式化后字符串buf,按照format的格式填充到timeptr中,返回值指向最后一个转化后的字符。如buf= "Thu 26 July 2007, 17:53 will do fine"; result = strptime(buf,”%a %d %b %Y, %R”, tm_ptr);

临时文件
    #include <stdio.h>
    char *tmpnam(char *s);   //返回产生一个唯一的文件名的字符串,如果s不为空,放入字符串中。
    FILE *tmpfile(void);     //这个方法返回一个指向唯一文件名的临时文件流指针。
 
用户信息
     #include <sys/types.h>
     #include <unistd.h>
     uid_t getuid(void);     //返回程序相关的uid
     char *getlogin(void);   //返回当前用户的登入名

     #include <sys/types.h>
     #include <pwd.h>
     struct passwd *getpwuid(uid_t uid);       //根据uid获取对应的passwd数据结构体
     struct passwd *getpwnam(const char *name);  //根据用户获取对应的passwd数据结构体
     passwd结构体定义在pwd.h中。有如下的成员 :    char *pw_name   The user’s login name
                                             uid_t pw_uid    The UID number
                                             gid_t pw_gid    The GID number             
                                             char *pw_dir    The user’s home directory
                                             char *pw_gecos  The user’s full name            
                                             char *pw_shell  The user’s default shell

主机信息
    #include <unistd.h>
    int gethostname(char *name, size_t namelen);   //将主机的网络名存入字符串name中,字符串的长度假设为namelen.
    
    #include <sys/utsname.h>
    int uname(struct utsname *name);  //将host的信息放入到utsname数据结构的指针中。
    utsname包含的成员    char sysname[]       The operating system name
            char nodename[]      The host name
            char release[]       The release level of the system
            char version[]       The version number of the system
            char machine[]       The hardware type

 

Logging
      通常log信息都是记录在系统中的,并且他们都是可变的,他们可能是/usr/adm或者/var/log。在典型的linux安装中,文件/var/log/messages包含着所有系统信息,/var/log/mail包含着关于邮件系统的log信息,/var/log/debug可能包含debug信息。根据你的系统版本,你可以检查你的系统配置文件/etc/syslog.conf或者/etc/syslog-ng/syslog-ng.conf。
      即使系统信息的格式和存储都会改变,但是产生信息的方法是标准的,Linux为所有的程序提供一个接口产生log信息,通过使用syslog方法:
         #include <syslog.h>
         void syslog(int priority, const char *message, arguments...);
      这个syslog方法发动一个log信息给logging设备,每一条信息都有一个priority参数,它是一个严重级别和一个设备值或运算得来的。设备值(from syslog.h)包括LOG_USER用于指明这条信息来自用户应用程序,还有 LOG_LOCAL0, LOG_LOCAL1, up to LOG_LOCAL7,都是有本地管理员赋值。
      这些严重级别按照权限递减,如下:
               LOG_EMERG      An emergency situation
               LOG_ALERT    High-priority problem, such as database corruption
               LOG_CRIT        Critical error, such as hardware failure
               LOG_ERR       Errors
               LOG_WARNING      Warning
               LOG_NOTICE      Special conditions requiring attention
               LOG_INFO    Informational messages
               LOG_DEBUG     Debug messages

      LOG_EMERG信息可能会广播给所有用户,LOG_ALERT信息可能会邮寄给管理员,LOG_DEBUG 可能会被忽略,其他的会被写入文件。当你想要创建一个log信息时,你可以写一个程序通过调用lsyslog函数使用logging设备来创建。由systlog创建的log信息包括信息头和信息体,信息头由设备标识器和日期时间创建,信息体则来自传递给syslog的message的参数,有点类似printf的格式化字符串。传递给syslog的参数可以根据printf类型转换。另外,“%m”可以用于添加根据当前errno的值的错误信息,这对于输出错误信息非常有用。

     在syslog.h中用于改变logging设备行为的其他方法:

           #include <syslog.h>

           void closelog(void);

           void openlog(const char *ident, int logopt, int facility);

           int setlogmask(int maskpri);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值