C中时间/环境/终端控制相关函数

本文介绍了C语言中用于处理时间、环境变量及终端控制的相关函数,包括获取和设置时间的函数如time、settimeofday、mktime等,环境变量操作函数如getenv和putenv,以及终端控制函数如getopt和isatty。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C中时间/环境/终端控制相关函数

日期函数

  • time函数

    time_t time(time_t *t);

    函数说明:此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t并非空指针的话,此函数也会将返回值存在t指针所指的内存。

    返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于error中。

  • settimeofday函数

    int settimeofday(const struct timeval *tv, const struct timezone *tz);

    函数说明:settimeofday()会把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构。

    返回值:成功则返回0,失败返回-1,错误代码存在于error中。

    注意:在Linux下,只有root权限才能使用此函数修改时间。

  • mktime函数

    time_t mktime(struct tm *timeptr);

    函数说明:mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0秒算起至今的UTC时间所经过的描述。

    返回值:返回经过的秒数。

  • localtime函数

    struct tm* localtime(const time_t *timep);

    函数说明:localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。结构tm的定义可以参考gmtime()。此函数返回的时间日期已经转换成当地时区。

    返回值:返回结构tm代表目前的当地时间。

  • gmtime函数

    struct tm* gmtime(const time_t *timep);

    函数说明:gmtime()将参数timep所指的time_t中的信息转换成真实世界所使用的时间日期表示方法,然后结果由结构tm返回。

    结构tm的定义如下:

    struct tm
    {
        int tm_sec;  //代表目前秒数, 正常范围为0-59, 但允许至61 秒
        int tm_min;  //代表目前分数, 范围0-59
        int tm_hour;  //从午夜算起的时数, 范围为0-23
        int tm_mday;  //目前月份的日数, 范围01-31
        int tm_mon;  //代表目前月份, 从一月算起, 范围从0-11
        int tm_year;  //从1900 年算起至今的年数
        int tm_wday;  //一星期的日数, 从星期一算起, 范围为0-6
        int tm_yday;  //从今年1 月1 日算起至今的天数, 范围为0-365
        int tm_isdst;  //日光节约时间的旗标
    };
    

    返回值:此函数返回的日期未经时区转换,而是UTC时间。返回结构体tm代表目前UTC时间。

  • gettimeofday函数

    int gettimeofday(struct timeval *tv, struct timezone *tz);

    函数说明:gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放在tz所指的结构中。

    timeval 结构体为:
    struct timeval{
        long tv_sec;  //秒
        long tv_usec;  //微秒
    };
    
    timezone 结构体为:
    struct timezone
    {
        int tz_minuteswest;  //和Greenwich 时间差了多少分钟
        int tz_dsttime;  //日光节约时间的状态
    };
    

    返回值:成功则返回0,失败返回-1,错误代码存于error中。

  • ctime函数

    char *ctime(const time_t *timep);

    函数说明:ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“Wed Jun 27 23:46:07 1999\n”。

    返回值:返回一字符串表示当前当地的时间日期。

    注意:若再调用相关的时间日期函数,此函数可能会被破坏。

  • asctime函数

    char *asctime(const struct tm *timeptr);

    函数说明:asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串为“Wed Jun 27 23:46:07 1999\n”。

    返回值:若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构。

环境变量函数

  • getenv函数

    char *getenv(const char *name);

    函数说明:getenv()用来取得参数name环境变量的内容,参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name = value。

    返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。

  • putenv函数

    int putenv(const char *string);

    函数说明:putenv()用来改变或增加环境变量的内容。参数string的格式为name = value,如果该环境变量原先存在,则变量的内容会依参数string改变,否则此参数内容会成为新的环境变量。

    返回值:执行成功则返回0,有错误发生则返回-1。错误代码:ENOMEM内存不足,无法配置新的环境变量空间。

  • 终端控制函数

  • getopt函数

    int getopt(int agrc, char *const argv[], const char *optstring);

    函数说明:getopt()用来分析命令行参数。其中参数agrc和argv是由main()传递的参数个数和内容;参数optstring则代表欲处理的选项字符串。此函数会返回在agrv中下一个的选项字母,此字母会对应参数optstring中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg即会指向此额外参数。如果getopt()找不到符合的参数则会打印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

    返回值:如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring的选项字母则返回“?”字符,分析结构则返回-1。

  • isatty函数

    int isatty(int desc);

    函数说明:如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。

    返回值:如果文件为终端机返回1,否则返回0。

  • select函数

    int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

    函数说明:select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds,writefds和exceptfds称为描述词组,是用来回传该描述词的读,写或例外的状况。下面的宏提供处理三种描述词组的方式:

    FD_CLR(inr fd, fd_set* set); 用来清除描述词组set 中相关fd 的位
    FD_ISSET(int fd, fd_set *set); 用来测试描述词组set 中相关fd 的位是否为真
    FD_SET(int fd, fd_set*set); 用来设置描述词组set 中相关fd 的位
    FD_ZERO(fd_set *set); 用来清除描述词组set 的全部位
    

    timeout结构为timeval,用来设置select()的等待时间。

    struct timeval
    {
       time_t tv_sec;
       time_t tv_usec;
    };
    

    返回值:如果参数timeout设为NULL则表示select()没有timeout。

    错误代码:执行成功则返回文件描述词状态已改变的个数, 如果返回0 代表在描述词状态改变前已超过timeout 时间, 当有错误发生时则返回-1, 错误原因存于errno, 此时参数readfds, writefds, exceptfds 和timeout的值变成不可预测。

    EBADF 文件描述词为无效的或该文件已关闭
    EINTR 此调用被信号所中断
    EINVAL 参数n 为负值.
    ENOMEM 核心内存不足
    
  • **ttyname函数

    char *ttyname(int desc);

    函数说明:如果参数desc所代表的文件描述词为一终端机,则会将此终端机名称由一字符串指针返回,否则返回NULL。

    返回值:如果成功则返回指向终端机名称的字符串指针,有错误情况发生时则返回NULL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值