Linux C函数之时间函数

asctime
ctime
gettimeofday
gmtime
localtime
mktime
settimeofday
time

 


asctime
(将时间和日期以字符串格式表示)

相关函数

timectimegmtimelocaltime

表头文件

#include<time.h>

定义函数

char * asctime(const struct tm * timeptr);

函数说明

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

返回值

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

附加说明

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

范例

#include <time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,asctime(gmtime(&timep)));
}

执行

Sat Oct 28 02:10:06 2000

 


ctime
(将时间和日期以字符串格式表示)

相关函数

timeasctimegmtimelocaltime

表头文件

#include<time.h>

定义函数

char *ctime(const time_t *timep);

函数说明

ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“Wed Jun 30 21 :49 :08 1993\n”。若再调用相关的时间日期函数,此字符串可能会被破坏。

返回值

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

范例

#include<time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,ctime(&timep));
}

执行

Sat Oct 28 10 : 12 : 05 2000

 


gettimeofday
(取得目前的时间)

相关函数

timectimeftimesettimeofday

表头文件

#include <sys/time.h>
#include <unistd.h>

定义函数

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; /*
日光节约时间的状态*/
};
上述两个结构都定义在/usr/include/sys/time.htz_dsttime 所代表的状态如下
DST_NONE /*
不使用*/
DST_USA /*
美国*/
DST_AUST /*
澳洲*/
DST_WET /*
西欧*/
DST_MET /*
中欧*/
DST_EET /*
东欧*/
DST_CAN /*
加拿大*/
DST_GB /*
大不列颠*/
DST_RUM /*
罗马尼亚*/
DST_TUR /*
土耳其*/
DST_AUSTALT /*
澳洲(1986年以后)*/

返回值

成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tvtz所指的内存空间超出存取权限。

范例

#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d\n”, tv,.tv_sec) ;
printf(“tv_usec; %d\n”,tv.tv_usec);
printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);
printf(“tz_dsttime, %d\n”,tz.tz_dsttime);
}

执行

tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0

 


gmtime
(取得目前时间和日期)

相关函数

time,asctime,ctime,localtime

表头文件

#include<time.h>

定义函数

struct tm*gmtime(const time_t*timep);

函数说明

gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
结构tm的定义为
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
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
从今年11日算起至今的天数,范围为0-365
int tm_isdst
日光节约时间的旗标
此函数返回的时间日期未经时区转换,而是UTC时间。

返回值

返回结构tm代表目前UTC 时间

范例

#include <time.h>
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf(“%d%d%d”,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(“%s%d;%d;%d\n”, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}

执行

2000/10/28 Sat 8:15:38

   

 


localtime
(取得当地目前时间和日期)

相关函数

time, asctime, ctime, gmtime

表头文件

#include<time.h>

定义函数

struct tm *localtime(const time_t * timep);

函数说明

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

返回值

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

范例

#include<time.h>
main(){
char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*
取得当地时间*/
printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf(“%s%d:%d:%d\n”, wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}

执行

2000/10/28 Sat 11:12:22

 


mktime
(将时间结构数据转换成经过的秒数)

相关函数

timeasctimegmtimelocaltime

表头文件

#include<time.h>

定义函数

time_t mktime(strcut tm * timeptr);

函数说明

mktime()用来将参数timeptr所指的tm结构数据转换成从公元197011000 秒算起至今的UTC时间所经过的秒数。

返回值

返回经过的秒数。

范例

/* time()取得时间(秒数),利用localtime()
转换成struct tm 再利用mktine()将struct tm转换成原来的秒数*/
#include<time.h>
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf(“time() : %d \n”,timep);
p=localtime(&timep);
timep = mktime(p);
printf(“time()->localtime()->mktime():%d\n”,timep);
}

执行

time():974943297
time()->localtime()->mktime():974943297

 


settimeofday
(设置目前时间)

相关函数

timectimeftimegettimeofday

表头文件

#include<sys/time.h>
#include<unistd.h>

定义函数

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

函数说明

settimeofday()会把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构。详细的说明请参考gettimeofday()。注意,只有root权限才能使用此函数修改时间。

返回值

成功则返回0,失败返回-1,错误代码存于errno

错误代码

EPERM 并非由root权限调用settimeofday(),权限不够。
EINVAL
时区或某个数据是不正确的,无法正确设置时间。

 


time
(取得目前的时间)

相关函数

ctimeftimegettimeofday

表头文件

#include<time.h>

定义函数

time_t time(time_t *t);

函数说明

此函数会返回从公元197011日的UTC时间从000秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存。

返回值

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

范例

#include<time.h>
mian()
{
int seconds= time((time_t*)NULL);
printf(“%d\n”,seconds);
}

执行

9.73E+08

 

 

linux下的系统错误errno描述一览

 

 收集到的linux下的各种系统错误errno描述一览:

     0 --            Success
     1 EPERM        +Operation not permitted
     2 ENOENT       +No such file or directory
     3 ESRCH        +No such process
     4 EINTR        +Interrupted system call
     5 EIO          +Input/output error
     6 ENXIO        +No such device or address
     7 E2BIG        +Argument list too long
     8 ENOEXEC      +Exec format error
     9 EBADF        +Bad file descriptor
    10 ECHILD       +No child processes
    11 EAGAIN       +Resource temporarily unavailable
    12 ENOMEM       +Cannot allocate memory
    13 EACCES       +Permission denied
    14 EFAULT       +Bad address
    15 ENOTBLK       Block device required
    16 EBUSY        +Device or resource busy
    17 EEXIST       +File exists
    18 EXDEV        +Invalid cross-device link
    19 ENODEV       +No such device
    20 ENOTDIR      +Not a directory
    21 EISDIR       +Is a directory
    22 EINVAL       +Invalid argument
    23 ENFILE       +Too many open files in system
    24 EMFILE       +Too many open files
    25 ENOTTY       +Inappropriate ioctl for device
    26 ETXTBSY       Text file busy
    27 EFBIG        +File too large
    28 ENOSPC       +No space left on device
    29 ESPIPE       +Illegal seek
    30 EROFS        +Read-only file system
    31 EMLINK       +Too many links
    32 EPIPE        +Broken pipe
    33 EDOM         +Numerical argument out of domain
    34 ERANGE       +Numerical result out of range
    35 EDEADLK      +Resource deadlock avoided
    36 ENAMETOOLONG +File name too long
    37 ENOLCK       +No locks available
    38 ENOSYS       +Function not implemented
    39 ENOTEMPTY    +Directory not empty
    40 ELOOP         Too many levels of symbolic links
    42 ENOMSG        No message of desired type
    43 EIDRM         Identifier removed
    44 ECHRNG        Channel number out of range
    45 EL2NSYNC      Level 2 not synchronized
    46 EL3HLT        Level 3 halted
    47 EL3RST        Level 3 reset
    48 ELNRNG        Link number out of range
    49 EUNATCH       Protocol driver not attached
    50 ENOCSI        No CSI structure available
    51 EL2HLT        Level 2 halted
    52 EBADE         Invalid exchange
    53 EBADR         Invalid request descriptor
    54 EXFULL        Exchange full
    55 ENOANO        No anode
    56 EBADRQC       Invalid request code
    57 EBADSLT       Invalid slot
    59 EBFONT        Bad font file format
    60 ENOSTR        Device not a stream
    61 ENODATA       No data available
    62 ETIME         Timer expired
    63 ENOSR         Out of streams resources
    64 ENONET        Machine is not on the network
    65 ENOPKG        Package not installed
    66 EREMOTE       Object is remote
    67 ENOLINK       Link has been severed
    68 EADV          Advertise error
    69 ESRMNT        Srmount error
    70 ECOMM         Communication error on send
    71 EPROTO        Protocol error
    72 EMULTIHOP     Multihop attempted
    73 EDOTDOT       RFS specific error
    74 EBADMSG      +Bad message
    75 EOVERFLOW     Value too large for defined data type
    76 ENOTUNIQ      Name not unique on network
    77 EBADFD        File descriptor in bad state
    78 EREMCHG       Remote address changed
    79 ELIBACC       Can not access a needed shared library
    80 ELIBBAD       Accessing a corrupted shared library
    81 ELIBSCN       .lib section in a.out corrupted
    82 ELIBMAX       Attempting to link in too many shared libraries
    83 ELIBEXEC      Cannot exec a shared library directly
    84 EILSEQ        Invalid or incomplete multibyte or wide character
    85 ERESTART      Interrupted system call should be restarted
    86 ESTRPIPE      Streams pipe error
    87 EUSERS        Too many users
    88 ENOTSOCK      Socket operation on non-socket
    89 EDESTADDRREQ  Destination address required
    90 EMSGSIZE     +Message too long
    91 EPROTOTYPE    Protocol wrong type for socket
    92 ENOPROTOOPT   Protocol not available
    93 EPROTONOSUPPORT Protocol not supported
    94 ESOCKTNOSUPPORT Socket type not supported
    95 EOPNOTSUPP    Operation not supported
    96 EPFNOSUPPORT  Protocol family not supported
    97 EAFNOSUPPORT  Address family not supported by protocol
    98 EADDRINUSE    Address already in use
    99 EADDRNOTAVAIL Cannot assign requested address
   100 ENETDOWN      Network is down
   101 ENETUNREACH   Network is unreachable
   102 ENETRESET     Network dropped connection on reset
   103 ECONNABORTED  Software caused connection abort
   104 ECONNRESET    Connection reset by peer
   105 ENOBUFS       No buffer space available
   106 EISCONN       Transport endpoint is already connected
   107 ENOTCONN      Transport endpoint is not connected
   108 ESHUTDOWN     Cannot send after transport endpoint shutdown
   109 ETOOMANYREFS  Too many references: cannot splice
   110 ETIMEDOUT    +Connection timed out
   111 ECONNREFUSED  Connection refused
   112 EHOSTDOWN     Host is down
   113 EHOSTUNREACH  No route to host
   114 EALREADY      Operation already in progress
   115 EINPROGRESS  +Operation now in progress
   116 ESTALE        Stale NFS file handle
   117 EUCLEAN       Structure needs cleaning
   118 ENOTNAM       Not a XENIX named type file
   119 ENAVAIL       No XENIX semaphores available
   120 EISNAM        Is a named type file
   121 EREMOTEIO     Remote I/O error
   122 EDQUOT        Disk quota exceeded
   123 ENOMEDIUM     No medium found
   124 EMEDIUMTYPE   Wrong medium type