⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stat-time.h

📁 gnu tar 源码包。 tar 软件是 Unix 系统下的一个打包软件
💻 H
字号:
/* stat-related time functions.   Copyright (C) 2005, 2007 Free Software Foundation, Inc.   This program is free software: you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program.  If not, see <http://www.gnu.org/licenses/>.  *//* Written by Paul Eggert.  */#ifndef STAT_TIME_H#define STAT_TIME_H 1#include <sys/stat.h>#include <time.h>/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type   struct timespec, if available.  If not, then STAT_TIMESPEC_NS (ST,   ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,   if available.  ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim   for access, status change, data modification, or birth (creation)   time respectively.   These macros are private to stat-time.h.  */#if defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC# ifdef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC#  define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)# else#  define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)# endif#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)#endif/* Return the nanosecond component of *ST's access time.  */static inline long intget_stat_atime_ns (struct stat const *st){# if defined STAT_TIMESPEC  return STAT_TIMESPEC (st, st_atim).tv_nsec;# elif defined STAT_TIMESPEC_NS  return STAT_TIMESPEC_NS (st, st_atim);# else  return 0;# endif}/* Return the nanosecond component of *ST's status change time.  */static inline long intget_stat_ctime_ns (struct stat const *st){# if defined STAT_TIMESPEC  return STAT_TIMESPEC (st, st_ctim).tv_nsec;# elif defined STAT_TIMESPEC_NS  return STAT_TIMESPEC_NS (st, st_ctim);# else  return 0;# endif}/* Return the nanosecond component of *ST's data modification time.  */static inline long intget_stat_mtime_ns (struct stat const *st){# if defined STAT_TIMESPEC  return STAT_TIMESPEC (st, st_mtim).tv_nsec;# elif defined STAT_TIMESPEC_NS  return STAT_TIMESPEC_NS (st, st_mtim);# else  return 0;# endif}/* Return the nanosecond component of *ST's birth time.  */static inline long intget_stat_birthtime_ns (struct stat const *st){# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC  return STAT_TIMESPEC (st, st_birthtim).tv_nsec;# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC  return STAT_TIMESPEC_NS (st, st_birthtim);# else  /* Avoid a "parameter unused" warning.  */  (void) st;  return 0;# endif}/* Return *ST's access time.  */static inline struct timespecget_stat_atime (struct stat const *st){#ifdef STAT_TIMESPEC  return STAT_TIMESPEC (st, st_atim);#else  struct timespec t;  t.tv_sec = st->st_atime;  t.tv_nsec = get_stat_atime_ns (st);  return t;#endif}/* Return *ST's status change time.  */static inline struct timespecget_stat_ctime (struct stat const *st){#ifdef STAT_TIMESPEC  return STAT_TIMESPEC (st, st_ctim);#else  struct timespec t;  t.tv_sec = st->st_ctime;  t.tv_nsec = get_stat_ctime_ns (st);  return t;#endif}/* Return *ST's data modification time.  */static inline struct timespecget_stat_mtime (struct stat const *st){#ifdef STAT_TIMESPEC  return STAT_TIMESPEC (st, st_mtim);#else  struct timespec t;  t.tv_sec = st->st_mtime;  t.tv_nsec = get_stat_mtime_ns (st);  return t;#endif}/* Return *ST's birth time, if available; otherwise return a value   with negative tv_nsec.  */static inline struct timespecget_stat_birthtime (struct stat const *st){  struct timespec t;#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)  t = STAT_TIMESPEC (st, st_birthtim);#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC  t.tv_sec = st->st_birthtime;  t.tv_nsec = st->st_birthtimensec;#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__  /* Woe32 native platforms (but not Cygwin) put the "file creation     time" in st_ctime (!).  See     <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>.  */  t.tv_sec = st->st_ctime;  t.tv_nsec = 0;#else  /* Birth time is not supported.  Set tv_sec to avoid undefined behavior.  */  t.tv_sec = -1;  t.tv_nsec = -1;  /* Avoid a "parameter unused" warning.  */  (void) st;#endif#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \     || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)  /* FreeBSD and NetBSD sometimes signal the absence of knowledge by     using zero.  Attempt to work around this problem.  Alas, this can     report failure even for valid time stamps.  Also, NetBSD     sometimes returns junk in the birth time fields; work around this     bug if it it is detected.  There's no need to detect negative     tv_nsec junk as negative tv_nsec already indicates an error.  */  if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec)    t.tv_nsec = -1;#endif  return t;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -