精华内容
下载资源
问答
  • Linuxtime函数都在time.h头文件中。1、头文件和时间有关的头文件有以下几个:time.hsys/time.hsys/times.hsys/timeb.hsys/timex.htime.h是C标准库的头文件,其余sys开头的都是Linux系统自己的头文件。/usr/include...

    Linux下time函数都在time.h头文件中。

    1、头文件

    和时间有关的头文件有以下几个:

    time.h

    sys/time.h

    sys/times.h

    sys/timeb.h

    sys/timex.h

    time.h是C标准库的头文件,其余sys开头的都是Linux系统自己的头文件。

    /usr/include/time.h定义了常用的time函数。

    到/usr/include/sys目录下查看这几个文件:

    sys/time.h定义了timezone结构体和Linux系统的时间函数。

    sys/times.h定义了进程使用CPU时间的结构体tms。

    sys/timeb.h定义了ftime函数的返回值的结构体timeb。

    sys/timex.h定义了关于时钟调整算法的结构体timex。

    2、常用函数和结构体

    time函数原型(time.h中):

    time_t time(time_t *calptr);

    参数:

    time_t类型变量的指针。

    返回值:

    time_t类型相当于一个long,time用于取Epoch记年以来到现在经过的秒数(系统当前时间),Epoch记年从1970年1月1日开始。把取到的时间存在指针指向的变量中。

    localtime函数原型(time.h中):

    struct tm *localtime(const time_t *calptr);

    参数:

    time_t类型变量的指针。

    返回值:

    指向tm结构体的指针类型。

    作用是将time_t的值转换为tm结构体。然后可以打印输出。

    tm结构体(time.h中):

    /* Used by other time functions. */

    struct tm

    {

    int tm_sec;/* Seconds.[0-60] (1 leap second) */

    int tm_min;/* Minutes.[0-59] */

    int tm_hour;/* Hours.[0-23] */

    int tm_mday;/* Day.[1-31] */

    int tm_mon;/* Month.[0-11] */

    int tm_year;/* Year- 1900. */

    int tm_wday;/* Day of week.[0-6] */

    int tm_yday;/* Days in year.[0-365]*/

    int tm_isdst;/* DST.[-1/0/1]*/

    #ifdef__USE_BSD

    long int tm_gmtoff;/* Seconds east of UTC. */

    __const char *tm_zone;/* Timezone abbreviation. */

    #else

    long int __tm_gmtoff;/* Seconds east of UTC. */

    __const char *__tm_zone;/* Timezone abbreviation. */

    #endif

    };

    ftime函数原型(timeb.h):

    int ftime(struct timeb *tp);

    参数:

    指向timeb结构体变量的指针。

    返回值:

    将当前系统时间存入timeb结构体中,包括了秒和毫秒。作用就是能获取当前时间精确到毫秒。

    timeb结构体(sys/timeb.h):

    /* Structure returned by the `ftime' function. */

    struct timeb

    {

    time_t time;/* Seconds since epoch, as from `time'. */

    unsigned short int millitm;/* Additional milliseconds. */

    short int timezone;/* Minutes west of GMT. */

    short int dstflag;/* Nonzero if Daylight Savings Time used. */

    };

    times函数原型:

    clock_t times(struct tms *buf);

    参数:

    指向tms结构体变量的指针。

    返回值:

    clock_t等同于long类型。用于获得进程运行时的CPU时间。

    tms结构体(sys/times.h中):

    /* Structure describing CPU time used by a process and its children. */

    struct tms

    {

    clock_t tms_utime;/* User CPU time. */

    clock_t tms_stime;/* System CPU time. */

    clock_t tms_cutime;/* User CPU time of dead children. */

    clock_t tms_cstime;/* System CPU time of dead children. */

    };

    3、例子程序:test10.c

    #include

    #include

    #include

    #include

    #include

    #include

    int main(void)

    {

    int i = 0;

    int sum = 0;

    long tck = 0;

    long lBeginTime = 0;

    long lEndTime = 0;

    time_t curr;

    struct tm * tTM;

    struct tms tTMS;

    struct timeb tTimeB;

    tzset();

    //time函数获得秒数

    time(&curr);

    printf("current time is %ld seconds\n", curr);

    //localtime函数转换time_t

    tTM = localtime(&curr);

    printf("%4d-%02d-%02d %02d:%02d:%02d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday,

    tTM->tm_hour, tTM->tm_min, tTM->tm_sec);

    //ftime函数获得时间包括毫秒

    ftime(&tTimeB);

    tTM = localtime(&tTimeB.time);

    printf("%4d-%02d-%02d %02d:%02d:%02d :%3d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday,

    tTM->tm_hour, tTM->tm_min, tTM->tm_sec, tTimeB.millitm);

    //用times函数计算以下循环运行花费的时间

    lBeginTime = times(&tTMS);

    printf("lBeginTime = %ld\n", lBeginTime);

    while (1)

    {

    i = i + 1;

    if (i == 0)

    break;

    }

    lEndTime = times(&tTMS);

    printf("lEndTime = %ld\n", lEndTime);

    printf("循环使用的CPU时间为: %ld\n", lEndTime - lBeginTime);

    tck = sysconf(_SC_CLK_TCK);//获取系统时钟(1秒里有多少个)

    printf("转换为秒: %f\n", ((lEndTime - lBeginTime) / (double)tck));

    return 0;

    }

    执行结果:

    [root@server ~]# ./test10

    current time is 1421644980 seconds

    2015-01-19 00:23:00

    2015-01-19 00:23:00 :781

    lBeginTime = 708268851

    lEndTime = 708270107

    循环使用的CPU时间为: 1256

    转换为秒: 12.560000

    参考资料:

    http://www.cnblogs.com/yaozhongxiao/archive/2013/04/14/3020353.html

    http://blog.csdn.net/jinan1861/article/details/5927677

    展开全文
  • Linux file 结构体和 inode 结构体

    千次阅读 2018-02-27 11:06:11
    在设备驱动程序中,一般需要关心两个结构体:file 和 inode。1. file 结构体file 结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件...

    在设备驱动程序中,一般需要关心两个结构体:file 和 inode。

    1. file 结构体

    file 结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。

    它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。

    注:在内核和驱动源代码中,struct file 的指针通常被命名为 file 或 filp(即 file pointer)。

    struct file {
    	union {
    		struct llist_node	fu_llist;
    		struct rcu_head 	fu_rcuhead;
    	} f_u;
    	struct path		f_path;
    	struct inode		*f_inode;	/* cached value */
    	const struct file_operations	*f_op;		/* 和文件关联的操作 */
    
    	/*
    	 * Protects f_ep_links, f_flags.
    	 * Must not be taken from IRQ context.
    	 */
    	spinlock_t		f_lock;
    	enum rw_hint		f_write_hint;
    	atomic_long_t		f_count;
    	unsigned int 		f_flags;	        /* 文件标志,如O_RDONLY、O_NONBLOCK、O_SYNC */
    	fmode_t			f_mode;			/* 文件读/写模式,FMODE_READ、FMODE_WRITE */
    	struct mutex		f_pos_lock;
    	loff_t			f_pos;			/* 当前读写位置 */
    	struct fown_struct	f_owner;
    	const struct cred	*f_cred;
    	struct file_ra_state	f_ra;
    
    	u64			f_version;
    #ifdef CONFIG_SECURITY
    	void			*f_security;
    #endif
    	/* needed for tty driver, and maybe others */
    	void			*private_data;		/* 文件私有数据 */
    
    #ifdef CONFIG_EPOLL
    	/* Used by fs/eventpoll.c to link all the hooks to this file */
    	struct list_head	f_ep_links;
    	struct list_head	f_tfile_llink;
    #endif /* #ifdef CONFIG_EPOLL */
    	struct address_space	*f_mapping;
    	errseq_t		f_wb_err;
    } __randomize_layout
      __attribute__((aligned(4)));	/* lest something weird decides that 2 is OK */
    
    struct file_handle {
    	__u32 handle_bytes;
    	int handle_type;
    	/* file identifier */
    	unsigned char f_handle[0];
    };

    文件读/写模式 mode、标志 f_flags 都是设备驱动关心的内容,而私有数据指针 private_data 在设备驱动中被广泛应用,大多被指向设备驱动自定义以用于描述设备的结构体。


    2. inode 结构体

    VFS inode 包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改事件等信息。它是 Linux 管理文件系统的基本单位,也是文件系统连接任何子目录、文件的桥梁,inode 结构体的定义如下:

    struct inode {
    	umode_t			i_mode;							/* inode的权限 */
    	unsigned short		i_opflags;					
    	kuid_t			i_uid;							/* inode拥有者的id */
    	kgid_t			i_gid;							/* inode所属的群组id */
    	unsigned int		i_flags;
    
    #ifdef CONFIG_FS_POSIX_ACL
    	struct posix_acl	*i_acl;
    	struct posix_acl	*i_default_acl;
    #endif
    
    	const struct inode_operations	*i_op;
    	struct super_block	*i_sb;
    	struct address_space	*i_mapping;
    
    #ifdef CONFIG_SECURITY
    	void			*i_security;
    #endif
    
    	/* Stat data, not accessed from path walking */
    	unsigned long		i_ino;
    	/*
    	 * Filesystems may only read i_nlink directly.  They shall use the
    	 * following functions for modification:
    	 *
    	 *    (set|clear|inc|drop)_nlink
    	 *    inode_(inc|dec)_link_count
    	 */
    	union {
    		const unsigned int i_nlink;
    		unsigned int __i_nlink;
    	};
    	dev_t			i_rdev;							/* 若是设备文件,此字段将记录设备的设备号 */
    	loff_t			i_size;							/* inode所代表的文件大小 */
    	struct timespec		i_atime;					/* inode最近一次的存取时间 */
    	struct timespec		i_mtime;					/* inode最近一次的修改时间 */
    	struct timespec		i_ctime;					/* inode的产生时间 */
    	spinlock_t		i_lock;	/* i_blocks, i_bytes, maybe i_size */
    	unsigned short          i_bytes;
    	unsigned int		i_blkbits;
    	enum rw_hint		i_write_hint;
    	blkcnt_t		i_blocks;						/* inode所使用的block数,一个block为512字节 */
    
    #ifdef __NEED_I_SIZE_ORDERED
    	seqcount_t		i_size_seqcount;
    #endif
    
    	/* Misc */
    	unsigned long		i_state;
    	struct rw_semaphore	i_rwsem;
    
    	unsigned long		dirtied_when;	/* jiffies of first dirtying */
    	unsigned long		dirtied_time_when;
    
    	struct hlist_node	i_hash;
    	struct list_head	i_io_list;	/* backing dev IO list */
    #ifdef CONFIG_CGROUP_WRITEBACK
    	struct bdi_writeback	*i_wb;		/* the associated cgroup wb */
    
    	/* foreign inode detection, see wbc_detach_inode() */
    	int			i_wb_frn_winner;
    	u16			i_wb_frn_avg_time;
    	u16			i_wb_frn_history;
    #endif
    	struct list_head	i_lru;		/* inode LRU list */
    	struct list_head	i_sb_list;
    	struct list_head	i_wb_list;	/* backing dev writeback list */
    	union {
    		struct hlist_head	i_dentry;
    		struct rcu_head		i_rcu;
    	};
    	u64			i_version;
    	atomic_t		i_count;
    	atomic_t		i_dio_count;
    	atomic_t		i_writecount;
    #ifdef CONFIG_IMA
    	atomic_t		i_readcount; /* struct files open RO */
    #endif
    	const struct file_operations	*i_fop;	/* former ->i_op->default_file_ops */
    	struct file_lock_context	*i_flctx;
    	struct address_space	i_data;
    	struct list_head	i_devices;
    	union {
    		struct pipe_inode_info	*i_pipe;
    		struct block_device	*i_bdev;			/* 若是块设备,为其对应的block_device结构体指针 */
    		struct cdev		*i_cdev;				/* 若是字符设备,为其对应的cdev结构体指针 */
    		char			*i_link;
    		unsigned		i_dir_seq;
    	};
    
    	__u32			i_generation;
    
    #ifdef CONFIG_FSNOTIFY
    	__u32			i_fsnotify_mask; /* all events this inode cares about */
    	struct fsnotify_mark_connector __rcu	*i_fsnotify_marks;
    #endif
    
    #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
    	struct fscrypt_info	*i_crypt_info;
    #endif
    
    	void			*i_private; /* fs or device private pointer */
    } __randomize_layout;

    展开全文
  • Linux时间结构体与函数 clockid_t, struct timespec clock_getres(), clock_gettime(), clock_settime() - clock and time functions /** * 头文件 */ #include <time.h> /** * 函数参数1. clockid_t clk_...
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 
    

    Linux时间结构体与函数

    clockid_t, struct timespec

    clock_getres(), clock_gettime(), clock_settime() - clock and time functions

    /**
     * 头文件
     */
    #include <time.h>
    
    /**
     * 函数参数1. clockid_t clk_id
     * 	int类型变量, 表示是要操作的特定时钟的标识符
     * 	值一般为CLOCK_MONOTONIC, 表示系统开机到现在的时钟
     * 
     *  CLOCK_REALTIME			系统从1970.1.1零时到现在的时间
     *  CLOCK_MONOTONIC			系统从开机到现在的时间(不能被设置)
     * 	CLOCK_PROCESS_CPUTIME_ID	进程运行时间
     *  CLOCK_THREAD_CPUTIME_ID		线程运行时间
     * 	CLOCK_REALTIME_HR		CLOCK_REALTIME的高精度版本
     *  CLOCK_MONOTONIC_HR		CLOCK_MONOTONIC的高精度版本
     */
    clockid_t clk_id
    
    /**
     * 函数参数2. struct timespec
     * 	时间结构体
     */
    struct timespec {
        time_t   tv_sec;        /* seconds */
        long     tv_nsec;       /* nanoseconds */
    };
    
    // 获取特定时钟的时间精度
    int clock_getres(clockid_t clk_id, struct timespec *res);
    // 获取特定时钟的时间精度
    int clock_gettime(clockid_t clk_id, struct timespec *tp);
    // 设置特定时钟的时间精度
    int clock_settime(clockid_t clk_id, const struct timespec *tp);
    
    /**
     * 注意事项
     */
    Link with -lrt (only for glibc versions before 2.17).
    

    举个例子(计时, 精确到纳秒级):

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include<unistd.h>
    
    static int64_t get_clock(void)
    {
        struct timespec ts;
        clock_gettime(CLOCK_MONOTONIC,&ts);
        return ts.tv_sec*1000000000LL+ts.tv_nsec;
    }
    
    int main()
    {
        int64_t timer1,timer2;
    	struct timeval starttime,endtime;
    	double timeuse;
    	
        timer1=get_clock();
        system("sleep 2");
        timer2=get_clock();
        printf("timer1=%ld\ntimer2=%ld\n",timer1,timer2);
    
        return 0;
    }
    

    struct timeval, struct timezone

    gettimeofday, settimeofday - get / set time

    /**
     * 头文件
     */
    #include <sys/time.h>
    
    /**
     * 函数参数1. struct timeval
     */
    struct timeval {
        time_t  tv_sec;     /* seconds */
        suseconds_t tv_usec;    /* microseconds */
    };
    
    /**
     * 函数参数2. struct timezone
     */
    struct timezone {
        int tz_minuteswest;     /* minutes west of Greenwich, 以格林威治时间为基准向西算的分钟数, 相当于和格林威治时间差了多少分钟(个人觉得不会用到) */
        int tz_dsttime;         /* type of DST correction, 夏令时修正类型 */
    };
    
    // 自1970年1月1日零时到现在的时间
    int gettimeofday(struct timeval *tv, struct timezone *tz);
    
    int settimeofday(const struct timeval *tv, const struct timezone *tz);
    

    举个例子(计时, 精确到微秒级):

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/time.h>
    
    int main()
    {
    	struct timeval starttime,endtime;
    	double timeuse;
    
    	gettimeofday(&starttime,NULL);
    	sleep(2);
    	gettimeofday(&endtime,NULL);
    	timeuse=1000000*(endtime.tv_sec-starttime.tv_sec)+endtime.tv_usec-starttime.tv_usec;
    	timeuse/=1000000;
    	printf("timeuse=%f \n",timeuse);
    
        return 0;
    }
    
    展开全文
  • 编程:linux time相关结构体和函数

    千次阅读 2012-11-08 15:38:44
    ...本文旨在为了解Linux各种时间类型与时间函数提供技术文档。...1、Linux下常用时间类型 ...Linux下常用时间类型有四种:time_t、struct tm、struct timeval、struct timespec 1.1 time_t时

    原:http://blog.csdn.net/water_cow/article/details/7521567


    简介
    本文旨在为了解Linux各种时间类型与时间函数提供技术文档。

    1、Linux下常用时间类型
    Linux下常用时间类型有四种:time_tstruct tmstruct timevalstruct timespec

    1.1 time_t时间类型
    time_t类型在time.h中定义:

    #ifndef __TIME_T  

    #define __TIME_T  

    typedef  long  time_t;  

    #endif  

    可见,time_t实际是一个长整型。其值表示为从UTC(coordinated universal time)时间197011000000(也称为Linux系统的Epoch时间)到当前时刻的秒数。由于time_t类型长度的限制,它所表示的时间不能晚于2038119031407秒(UTC)。为了能够表示更久远的时间,可用64或更长的整形数来保存日历时间,这里不作详述。
    使用time()函数获取当前时间的time_t值,使用ctime()函数将time_t转为当地时间字符串。

    备注UTC时间有时也称为GMT时间,其实UTCGMT两者几乎是同一概念。它们都是指格林尼治标准时间,只不过UTC的称呼更为正式一点。两者区别在于前者是天文上的概念,而后者是基于一个原子钟。

    1.2 struct tm时间类型
    tm结构在time.h中定义:

    #ifndef _TM_DEFINED  

    struct tm{  

        int tm_sec; /*秒 - 取值区间为[0, 59]*/  

        int tm_min; /*分 - 取值区间为[0, 59]*/  

        int tm_hour; /*时 - 取值区间为[0, 23]*/  

        int tm_mday; /*日 - 取值区间为[1, 31]*/  

        int tm_mon; /*月份 - 取值区间为[0, 11]*/  

        int tm_year; /*年份 - 其值为1900年至今年数*/  

        int tm_wday; /*星期 - 取值区间[0, 6],0代表星期天,1代表星期1,以此类推*/  

        int tm_yday; /*从每年的1月1日开始的天数-取值区间为[0, 365],0代表1月1日*/  

        int tm_isdst; /*夏令时标识符,使用夏令时,tm_isdst为正,不使用夏令时,tm_isdst为0,不了解情况时,tm_isdst为负*/  

    };  

    #define _TM_DEFINED  

    #endif  

    ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)
    使用gmtime( )localtime( )可将time_t时间类型转换为tm结构体;

    使用mktime( )tm结构体转换为time_t时间类型;
    使用asctime( )struct tm转换为字符串形式。
     
    1.3 struct timeval时间类型
    timeval结构体在time.h中定义:

    Struct tmieval{  

        time_t tv_sec; /*秒s*/  

        suseconds_t tv_usec; /*微秒us*/  

    };  

    设置时间函数settimeofday( )与获取时间函数gettimeofday( )均使用该事件类型作为传参。
     
    1.4 struct timespec时间类型
    timespec结构体在time.h定义:

    struct timespec{  

        time_t tv_sec; /*秒s*/  

        long tv_nsec; /*纳秒ns*/  

    };  

     
    2、Linux下常用时间函数
    Linux下常用时间函数有:time( )ctime( )gmtime( )localtime( )mktime( )asctime( )difftime( )gettimeofday( )settimeofday( )

    2.1 time( )函数
    头文件:#include <time.h>
    函数定义:time_t time(time_t *timer)
    功能描述:该函数返回从197011000000秒至今所经过的秒数。如果time_t *timer非空指针,函数也会将返回值存到timer指针指向的内存。
    返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。
    例:

    time_t seconds;  

    seconds = time((time_t *)NULL);  


    2.2 ctime( )函数
    头文件:#include <time.h>
    函数定义:char *ctime(const time_t *timep);
    功能描述:ctime( )将参数timep指向的time_t时间信息转换成实际所使用的时间日期表示方法,并以字符串形式返回。字符串格式为:"Wed Jun 20 21:00:00 2012\n"
    例:

    time_t timep;  

    tmep = time(NULL);  

    printf("%s\n", ctime(&timep));  


    2.3 gmtime( )函数
    头文件:#include <time.h>
    函数定义:struct tm *gmtime(const time_t *timep)
    功能描述:gmtime( )将参数timep指向的time_t时间信息转换成以tm结构体表示的GMT时间信息,并以struct tm*指针返回。
    GMTGMT是中央时区, 北京 在东8,相差8个小时,所以北京时间=GMT时间+8小时
    例:

    int main(void)  

    {  

        char *wday[] = {"Sun""Mon""Tue""Wed""Thu""Fri""Sat"};  

        time_t timep;  

        struct tm *p_tm;  

        timep = time(NULL);  

        p_tm = gmtime(&timep); /*获取GMT时间*/  

        printf("%d-%d-%d ", (p_tm->tm_year+1900), (p_tm->mon+1), p_tm->tm_mday);  

        printf("%s %d:%d:%d\n", wday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);  

    }  


    2.4 localtime( )函数
    头文件:#include <time.h>
    函数定义:struct tm *localtime(const time_t *timep);
    功能描述:localtime( )将参数timep指向的time_t时间信息转换成以tm结构体表示的本地时区时间(如北京时间= GMT+小时)
    例:

    int main(void)  

    {  

        char *wday[] = {"Sun""Mon""Tue""Wed""Thu""Fri""Sat"};  

        time_t timep;  

        struct tm *p_tm;  

        timep = time(NULL);  

        p_tm = localtime(&timep); /*获取本地时区时间*/  

        printf("%d-%d-%d ", (p_tm->tm_year+1900), (p_tm->mon+1), p_tm->tm_mday);  

        printf("%s %d:%d:%d\n", wday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);  

        return 0;  

    }  



    2.7 difftime( )函数
    头文件:#include <time.h>
    函数定义:double difftime(time_t timep1, time_t timep2);
    功能描述:difftime( )比较参数timep1timep2时间是否相同,并返回之间相差秒数。
    例:

    int main(void)  

    {  

        time_t timep1, timep2;  

        timep1 = time(NULL);  

        sleep(2);  

        timep2 = time(NULL);  

        printf("the difference is %f seconds\n", difftime(timep1, timep2));  

        return 0;  

    }  


    2.8 gettimeofday( )函数
    头文件:#include <sys/time.h>
            #include <unistd.h>
    函数定义:int gettimeofday(struct timeval *tv, struct timezone *tz);
    功能描述:gettimeofday( )把目前的时间信息存入tv指向的结构体,当地时区信息则放到tz指向的结构体。
    struct timezone原型:

    struct timezone{  

        int tz_minuteswest; /*miniutes west of Greenwich*/  

        int tz_dsttime; /*type of DST correction*/  

    };  

    例:

    struct timeval tv;  

    struct timeval tz;  

    gettimeofday(&tv, &tz);  


    附:
    使用time函数族获取时间并输出指定格式字符串例子(strftime( )函数):

    int main(void)  

    {  

        char strtime[20] = {0};  

        time_t timep;  

        struct tm *p_tm;  

        timep = time(NULL);  

        p_tm = localtime(&timep);  

        strftime(strtime, sizeof(strtime), "%Y-%m-%d %H:%M:%S", p_tm);  

        return 0;  

    }  


    字符串转为timestamp

    int64_t DiscoveryRecorder::string_to_timestamp( const char *src )

     {

         if( is_null_date( src ) )

             return 0;

     

         struct tm mytm;

         memset( &mytm, 0, sizeof( struct tm ) );

         strptime( src, "%Y-%m-%d %H:%M:%S", &mytm );

         return mktime( &mytm );

     }

    2.获得当前时间

    在所有的UNIX下,都有个time()的函数

    time_t time(time_t *t);

    这个函数会传回从epoch开始计算起的秒数,如果t是non-null,它将会把时间值填入t中。

    对某些需要较高精准度的需求,Linux提供了gettimeofday()。

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

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

    struct tm格式时间函数

    struct tm * gmtime(const time_t * t);

    转换成格林威治时间。有时称为GMT或UTC。

    struct tm * localtime(const time_t *t);

    转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间。

    time_t mktime(struct tm *tp);

    转换tm成为time_t格式,使用本地时间。

    tme_t timegm(strut tm *tp);

    转换tm成为time_t格式,使用UTC时间。

    double difftime(time_t t2,time_t t1);

    计算秒差。

    3.文字时间格式函数

    char * asctime(struct tm *tp);

    char * ctime(struct tm *tp);

    这两个函数都转换时间格式为标准UNIX时间格式。

    Mon May 3 08:23:35 1999

    ctime一率使用当地时间,asctime则用tm结构内的timezone资讯来表示。

    size_t strftime(char *str,size_t max,char *fmt,struct tm *tp);

    strftime有点像sprintf,其格式由fmt来指定。

    %a : 本第几天名称,缩写。

    %A : 本第几天名称,全称。

    %b : 月份名称,缩写。

    %B : 月份名称,全称。

    %c : 与ctime/asctime格式相同。

    %d : 本月第几日名称,由零算起。

    %H : 当天第几个小时,24小时制,由零算起。

    %I : 当天第几个小时,12小时制,由零算起。

    %j : 当年第几天,由零算起。

    %m : 当年第几月,由零算起。

    %M : 该小时的第几分,由零算起。

    %p : AM或PM。

    %S : 该分钟的第几秒,由零算起。

    %U : 当年第几,由第一个日开始计算。

    %W : 当年第几,由第一个一开始计算。

    %w : 当第几日,由零算起。

    %x : 当地日期。

    %X : 当地时间。

    %y : 两位数的年份。

    %Y : 四位数的年份。

    %Z : 时区名称的缩写。

    %% : %符号。

    char * strptime(char *s,char *fmt,struct tm *tp);

    如同scanf一样,解译字串成为tm格式。

    %h : 与%b及%B同。

    %c : 读取%x及%X格式。

    %C : 读取%C格式。

    %e : 与%d同。

    %D : 读取%m/%d/%y格式。

    %k : 与%H同。

    %l : 与%I同。

    %r : 读取"%I:%M:%S %p"格式。

    %R : 读取"%H:%M"格式。

    %T : 读取"%H:%M:%S"格式。

    %y : 读取两位数年份。

    %Y : 读取四位数年份。

    下面举一个小例子,说明如何获得系统当前时间:

    time_t now;

    struct tm *timenow;

    char strtemp[255];

    time(&now);

    timenow = localtime(&now);

    printf("recent time is : %s \n", asctime(timenow))


    展开全文
  • linux SPI结构体

    千次阅读 2014-11-14 10:05:55
    内核版本:3.9.5 spi_master /*结构体master代表一个SPI接口,或者叫一个SPI主机控制器,一个接口对应一条SPI总线,master->bus_num则记录了这个总线号*/ struct spi_master { struct device
  • linux时间结构体

    2013-01-05 14:35:51
    1. Linux下与时间有关的结构体 struct timeval { int tv_sec; int tv_usec; }; 其中tv_sec是由凌晨开始算起的秒数,tv_usec则是微秒(10E-6 second)。 struct timezone ...
  • linux系统中strcuct timeval结构体,struct timezone结构体以及gettimeofday函数和相关时间概念
  • Linux内核结构体--kfifo 环状缓冲区

    千次阅读 2014-12-17 19:46:37
     最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B...
  • Linux结构体--path

    2019-08-28 19:54:23
    Linux内核结构体 path struct path { struct vfsmount *mnt; struct dentry *dentry; }; vfsmount struct vfsmount { struct list_head mnt_hash; struct vfsmount *mnt_parent; /* fs we are mounted on *...
  • linux 中 timeval结构体

    千次阅读 2018-07-21 14:27:59
    linux 中 timeval结构体 网上很多人写到,tim eval 结构解释错误 ******************************************************************* 问题如下: 在debian linux 的man页中对get time ofday函数的说明中,...
  • Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.  (1) time_t是一个长整型,一般用来表示用1970年以来的秒数.  该类型定义在中.  一般通过 time_...
  • Linux常见文件结构体

    2016-03-30 10:30:12
    http://www.huomo.cn/os/article-19b20.html一、 常见文件...struct file结构体定义在include/linux/fs.h 中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。
  • #include <sys/time.h> #include <sys/resource.h> int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim);
  • linux 中 timeval结构体 - Neddy11 - 博客园 linux 中 timeval结构体 - Neddy11 - 博客园linux 中 timeval结构体网上很多人写到,timeval结构解释错误*************************...
  • time_t 是一个长整型,用来表示秒数。 struct timeval 结构体是用秒和微妙来表示时间。 struct timespec结构体是用秒和纳秒来表示时间。 List itemstruct tm 直接用秒、分、小时、天、月、年等来表示时间。 ...
  • linux查看C结构体定义

    千次阅读 2018-01-06 13:50:44
    今天写程序时,用到了pthread_cond_timedwait 函数,其原型为:int pthread_cond_timedwait(pthread_cond_t *restrict cond , pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);...
  • linux 时间相关结构体和函数详解1. 时间概念1.1 本地时间(locale time)1.2 格林威治时间(Greenwich Mean Time GMT )1.3 时间协调时间 (Universal Time Coordinated UTC )1.3.1 UTC 出现缘由1.3.2 UTC2. linux ...
  • 本文转载于:[url]... 自己将会慢慢加强:包括结构体的使用,头文件包含,使用场景 1. Linux下与时间有关的结构体 struct timeval { int tv_sec; int tv_usec; }; 其中tv_sec是由凌晨

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,373
精华内容 18,149
关键字:

linuxtime结构体

linux 订阅