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。