时间获取,文件属性和权限的获取——C语言——day06

时间:2024-02-25 10:30:15

今天主要内容是时间获取以及文件属性和权限的获取

时间获取

1.time

1.time 
	time_t time(time_t *tloc);
功能:
  	返回1970-1-1到现在的秒数(格林威治时间)
参数:
  	tloc:存放秒数空间首地址
返回值:
  	成功返回秒数
  	失败返回-1

2.localtime

2.localtime
	struct tm *localtime(const time_t *timep);
功能:
	将秒数转换为本地时间
参数:
	timep:存放秒数空间首地址
返回值:
	成功返回结构体时间
	失败返回NULL

struct tm {
    int tm_sec;    /* Seconds (0-60) */
    int tm_min;    /* Minutes (0-59) */
    int tm_hour;   /* Hours (0-23) */
    int tm_mday;   /* Day of the month (1-31) */
    int tm_mon;    /* Month (0-11) */
    int tm_year;   /* Year - 1900 */
    int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
    int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
    int tm_isdst;  /* Daylight saving time */
};

3.mktime

3.mktime
	time_t mktime(struct tm *tm);
功能:
 	将本地时间转换为秒数

接下来给大家举一个例子:

#include"head.h"

int main(void)
{
	time_t t;	//声明了一个time_t类型的变量t,用于存储时间信息。
	struct tm *ptm = NULL;

	time(&t);	//将当前时间的秒数存储到变量 t 中
	ptm = localtime(&t);	//存储的时间解析为本地时间,
		//并将结果保存在指针 ptm 所指向的结构体中。

	printf("%ld\n",t);
	printf("%04d-%02d-%02d %02d:%02d:%02d\n",ptm->tm_year+1900,ptm->tm_mon+1,ptm->tm_mday,
			ptm->tm_hour,ptm->tm_min,ptm->tm_sec);

	t = mktime(ptm);
	printf("%ld\n",t);

	return 0;
}

结果为:
在这里插入图片描述

文件属性和权限的获取

1.stat

1.stat
	int stat(const char *pathname, struct stat *statbuf);
功能:
  	将pathname对应的文件信息放入statbuf中
参数:
  	pathname:文件路径字符串的首地址
  	statbuf:存放文件信息空间的首地址
返回值:
  	成功返回0 
  	失败返回-1 

struct stat {
    dev_t     st_dev;         /* ID of device containing file */
    ino_t     st_ino;         /* Inode number */
    mode_t    st_mode;        /* File type and mode */
    nlink_t   st_nlink;       /* Number of hard links */
    uid_t     st_uid;         /* User ID of owner */
    gid_t     st_gid;         /* Group ID of owner */
    dev_t     st_rdev;        /* Device ID (if special file) */
    off_t     st_size;        /* Total size, in bytes */
    blksize_t st_blksize;     /* Block size for filesystem I/O */
    blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */

    /* Since Linux 2.6, the kernel supports nanosecond
        precision for the following timestamp fields.
        For the details before Linux 2.6, see NOTES. */

    struct timespec st_atim;  /* Time of last access */
    struct timespec st_mtim;  /* Time of last modification */
    struct timespec st_ctim;  /* Time of last status change */

    #define st_atime st_atim.tv_sec      /* Backward compatibility */
    #define st_mtime st_mtim.tv_sec
    #define st_ctime st_ctim.tv_sec
    };

    /etc/passwd   口令文件
    /etc/group    组信息文件

2.getpwuid

2.getpwuid 
	struct passwd *getpwuid(uid_t uid);
功能:
 	通过UID获得对应的用户信息
参数:
 	uid:用户的ID号
返回值:
 	成功返回包含用户信息的结构体
 	失败返回NULL

  struct passwd {
      char   *pw_name;       /* username */
      char   *pw_passwd;     /* user password */
      uid_t   pw_uid;        /* user ID */
      gid_t   pw_gid;        /* group ID */
      char   *pw_gecos;      /* user information */
      char   *pw_dir;        /* home directory */
      char   *pw_shell;      /* shell program */
  };

3.getgrgid

3.getgrgid
	struct group *getgrgid(gid_t gid);
功能:
  	通过组ID获得组信息
参数:
  	gid:组的ID号
返回值:
  	成功返回包含组信息的结构体
 	失败返回NULL
    
 struct group {
     char   *gr_name;        /* group name */
     char   *gr_passwd;      /* group password */
     gid_t   gr_gid;         /* group ID */
     char  **gr_mem;         /* NULL-terminated array of pointers
                                 to names of group members */
 };

4.readlink

4.readlink
      ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
      功能:
        读取连接文件本身的内容
      参数:
        pathname:链接文件的路径
        buf:存放数据空间首地址
        bufsiz:最大存放数据字节数
      返回值:
        成功返回读到字节个数
        失败返回-1

软连接和硬链接

1.软连接(符号链接)
        通过文件名链接,所有能够看到的连接文件均为软连接文件

        ln -s file.txt a.txt 

2.硬链接
        通过文件对应的inode节点链接     

        ln file.txt b.txt 

以上就是今天内容