Linux程序设计——Linux环境

4.1 程序参数

当一个用C语言编写的Linux程序运行时,它是从main函数开始的,main函数的声明如下:

int main(int argc, char *argv[])

其中,argc是程序参数的个数,argv是一个代表参数自身的字符串数组。
通常,shell接受用户输入的命令行,将命令行分解成单词,然后把这些单词放入argv数组。例如:

$ myprog left right 'and center'

程序myprog将从main函数开始,main函数的参数是:

argc: 4
argv:{"myprog", "left", "right", "and center"}

注意,参数名包括程序名本身。
命令行参数规范
通常,使用一个以短横线(-)开头的命令行参数来设置标志(flag)或开关(switch)。

程序参数实验

源码

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int arg;

    for(arg = 0; arg < argc; arg++) {
        if(argv[arg][0] == '-')
            printf("option: %s\n", argv[arg]+1);
        else
            printf("argument %d: %s\n", arg, argv[arg]);
    }
    exit(0);
}

执行

$ gcc -o args args.c
$ ./args -i -lr 'hi there' -f fred.c

输出

arguments 0:./args
option :i
option :lr
arguments 3:hi there
option :f
arguments 5:fred.c

4.2环境变量

这是一些能用来控制shell脚本和其他程序行为的变量。你还可以用它们来配置用户环境。
检查环境变量

$ echo $HOME

/nogos
列出所有的环境变量

$ set

C语言程序访问环境变量

#include<stdlib.h>

char *getenv(const char *name);
int putenv(const char *string);

environ变量

程序的环境由一组格式为“key=value”的字符串组成。程序可以通过environ变量直接访问这些字符串数组。environ变量的声明如下所示:

#include<stdlib.h>

extern char **environ;

environ变量实验

源码

#include <stdlib.h>
#include <stdio.h>

extern char **environ;

int main()
{
    char **env = environ;

    while(*env) {
        printf("%s\n",*env);
        env++;
    }
    exit(0);
}

执行

$ gcc -o showenv showenv.c
$ ./showenv

输出

LC_PAPER=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
SHELL=/bin/bash
TERM=xterm-256color
LC_NUMERIC=en_US.UTF-8
OLDPWD=/usr/src/learning
USER=root
LC_TELEPHONE=en_US.UTF-8
......

4.3时间和日期

时间通过一个预定义的类型time_t来处理。Linux系统中,它是一个长整型,与处理时间的函数一起定义在头文件time.h中。

#include<time.h>

time_t time(time_t *tloc)

你可以通过调用time函数得到底层的时间值,它返回从纪元开始至今的秒数。如果tloc不是一个空指针,time函数还会把返回值写入tloc指针指向的位置。

time函数实验

源码

#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    int i;
    time_t the_time;

    for(i = 1; i <= 10; i++) {
        the_time = time((time_t *)0);
        printf("The time is %ld\n", the_time);
        sleep(2);
    }
    exit(0);
}

执行

gcc -o envtime envtime.c 
./envtime

输出

The time is 1513688247
The time is 1513688249
The time is 1513688251
The time is 1513688253
The time is 1513688255
The time is 1513688257
The time is 1513688259
The time is 1513688261
The time is 1513688263
The time is 1513688265

其他时间函数

  • difftime函数:计算两个时间值之间的差
double difftime(time_t time1, time_t time2);
  • gmtime函数:把底层时间值分解为一个结构。注:根据格林尼治标准时间(GMT)所在时区。
struct tm *gmtime(const time_t timeval);

tm结构包含一些常用的成员,如下:
- int tm_sec秒
- int tm_min分
- int tm_hour小时0-23
- int tm_mday月份中日期1-31
- int tm_mon月份0-11
- int tm_year年
- int tm_wday星期几0-6
- int tm_yday年份中的日期0-365
- int tm_isdst

  • localtime函数:返回结果类型同gmtime函数。注:根据当地时区。
struct tm *localtime(const time_t *timeval);
  • mktime函数:将tm结构转换成原始的time_t。
  • ctime函数:将时间值转换成可读的字符串。
  • strptime函数:将时间字符串转换成tm结构。
char *strptime(const char *buf, const char * format, struct tm *timeptr);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值