Linux和Windows下文件和目录的相关属性及操作

我们知道C/C++都提供了标准的文件I/O库以便我们对文件进行读写。但我们无法通过标准的I/O库对文件系统进行更进一步的操作。因为这设计到具体操作系统中文件系统的设计。在Linux和Windows程序库下面都有一个sys目录,里面包含系统相关的头文件,如下:

Windows下:

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sys>dir
 驱动器 C 中的卷是 wins
 卷的序列号是 6C27-6F61
 C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sys 的目录

2013-08-26  22:50    <DIR>          .
2013-08-26  22:50    <DIR>          ..
2002-05-29  04:48               997 locking.h
2007-01-06  08:59             6,722 stat.h
2004-01-09  22:27             1,856 stat.inl
2007-01-06  08:59             3,139 timeb.h
2004-03-30  06:34             1,414 timeb.inl
2006-11-09  01:45             2,033 types.h
2007-01-06  08:59             3,805 utime.h
2004-11-13  22:45             2,881 utime.inl
2006-11-09  01:45             1,917 wstat.inl
               9 个文件         24,764 字节
               2 个目录 11,852,636,160 可用字节

Linux下面:

[anonymalias@localhost ~]$ ls /usr/include/sys
acct.h       io.h           ptrace.h     stat.h         ucontext.h
acl.h        ipc.h          queue.h      statvfs.h      uio.h
asoundlib.h  kdaemon.h      quota.h      swap.h         ultrasound.h
bitypes.h    kd.h           raw.h        syscall.h      un.h
cdefs.h      klog.h         reboot.h     sysctl.h       unistd.h
debugreg.h   mman.h         reg.h        sysinfo.h      user.h
dir.h        mount.h        resource.h   syslog.h       ustat.h
epoll.h      msg.h          select.h     sysmacros.h    utsname.h
errno.h      mtio.h         sem.h        termios.h      vfs.h
eventfd.h    param.h        sendfile.h   timeb.h        vlimit.h
fcntl.h      pci.h          shm.h        time.h         vt.h
file.h       perm.h         signalfd.h   timerfd.h      vtimes.h
fsuid.h      personality.h  signal.h     times.h        wait.h
gmon.h       poll.h         socket.h     timex.h        xattr.h
gmon_out.h   prctl.h        socketvar.h  ttychars.h
inotify.h    procfs.h       soundcard.h  ttydefaults.h
ioctl.h      profil.h       statfs.h     types.h

我们可以看到在Windows和Linux下面的sys目录中都存在一个stat.h头文件,也是仅有的一个相同的文件。

Linux和Windows include目录下的sys/stat.h头文件都主要描述了对文件和目录的属性信息进行读取的操作。主要是通过struct stat结构体和stat()函数来实现的。在Windows的sys/stat.h头文件中的开头有下面一段说明:

/***
*sys/stat.h - defines structure used by stat() and fstat()
*       Copyright (c) Microsoft Corporation. All rights reserved.
*Purpose:
*       This file defines the structure used by the _stat() and _fstat()
*       routines.
*       [System V]
*       [Public]
****/

可以看出该头文件遵循System V标准,所以Windows下的stat结构和Linux下面的基本属性都一致,所以下面主要以Linux下符合POSIX标准的stat进行介绍。

1 stat结构

stat结构如下(从linux的<bits/stat.h>中截取,成员类型名有所修改,主要是删除了有些下划线):

struct stat
{
	dev_t st_dev;				/* 设备编号(文件系统)*/
	ino_t st_ino;				/* 文件索引节点的编号 */
	mode_t st_mode;				/* 文件的类型和访问权限 */
	nlink_t st_nlink;			/* 硬链接计数*/
	uid_t st_uid;				/* 文件所有者的用户ID */
	gid_t st_gid;				/* 文件所有者的组ID*/
	dev_t st_rdev;				/* 设备编号(特殊文件) */
	off_t st_size;				/* 文件大小(B) */
	blksize_t st_blksize;			/* 块大小(文件系统的I/O 缓冲区大小,最佳I/O块大小)  */
	blkcnt_t st_blocks;			/* 文件的块数*/
	time_t st_atime;			/* 最后访问时间*/
	time_t st_mtime;			/* 文件内容最后修改时间*/
	time_t st_ctime				/* 文件状态最后修改时间*/
};

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值