stat函数和文件类型

文件和目录
stat  ,fstat , lstat
#include <sys/stat.h>


stat 函数
int stat (const char * restirct pathname ,struct stat * restrict buf)


int fstat(int filedes , struct stat * buf)


int lstat(const char *restrict pathname, struct stat * restrict buf)
			此三个函数的返回值,如果成功返回0 ,失败返回 -1
	star函数fan'hui返回给定文件的相关信息.fstat 函数获取已经在描述符filedes 上面打开的文件的相关信息,lstat与stat类似,但是当文件名是一个符号链接是,lstat 返回该符号链接的有关信息,而不是有该链接符号引用文件的信息.
	第二个参数buf指向一个结构,这些stat函数填写由buf指向的结构.该结构的实际实现可能有所不同,但基本形式是:
struct stat{
	mode_t	st_mode ;
	ino_t st	ino;
	dev_t 	st_dev;
	dev_t	st_rdev;
	nlink_t	st_nlink;
	uid_t		st_uid;
	gid_t		st_gid;
	off_t		st_size;
	time_t	st_atime;
	time_t	st_mtime;
	time_t 	st_ctime;
	bllsize_t	st_blksize;
	blkcnt_t	st_blocks;		
};	
stat 结构提供的文件信息可以通过 ls -l 查看


文件的类型:
(1)普通文件(regular file):最常见的文件类型,包含了某种形式的数据
(2)目录文件(directory file):这种文件包含了其他文件的名字和指向与这些文件相关的信息.
(3)特殊块文件(block special file) :这种文件类型提供对设备(如磁盘)带缓冲的访问,每次访问以固定的长度为单位.
(4)字符特殊文件(character special file): 这种文件提供对设备不带缓冲的访问,每次访问的长度可变,系统中所有的设备要么是特殊字符文件,要么是块特殊文件.
(5)FIFO: 这中类型文件用于进程间通信,有时称其为命名管道(named pipe)
(6)套接字(pocket) :用于进程间的网络通信,也可用于在一台宿主机上的进程之间的非网络通信.
(7)符号链接(symboliek link): 这中文件类型指向另一个文件
文件类型的信息包含在stat结构的st_mode成员中.
<sys/stat.h>中的文件类型宏
S_ISREG()	===>普通文件
S_ISDIR()		===>目录文件
S_ISCHR()	===>字符特殊文件
S_ISBLK()	===>块特殊文件
S_ISFIFO()	===>管道或FIFO
S_ISLINK() 	===>符号链接
S_ISSOCK()	===>套接字
	
一个打印文件类型的程序:
#include "apue.h"


int main(int argc , char * argv[])
{
	int  i;
	struct stat buf;
	char *ptr;


	for ( i = 1 ; i <argc ; i++ ){
	
		printf("%s:",argv[i]);
		if(lstat(argv[i],&buf) < 0)
		{
			printf("lstat error");
			continue ;
		}
		if (S_ISREG(buf.st_mode))
			ptr = "regular file";
		else if(S_ISDIR(buf.st_mode))
			ptr = "direecroty file";


		else if(S_ISBLK(buf.st_mode))
			ptr = "block file";
		else if(S_ISFIFO(buf.st_mode))
			ptr = "FIFO file";
		else if(S_ISLNK(buf.st_mode))
			ptr = "symbolic file";
		else if(S_ISSOCK(buf.st_mode))
			ptr = "socket file";
		else if(S_ISCHR(buf.st_mode))
			ptr = "character file";
		else
			ptr = "unknown mode";
		printf ("%s\n",ptr);
	}


	return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值