shell命令 ls -l
文件中操作
函数有stat fstat stat,头文件及原型为:
#include
#include
#include
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
区别:stat获取参数file_name指定的文件名的状态信息,结果保存在struct stat *buf中。
fstat通过文件描述符指定文件,,,,,
lstat返回的是符号链接文件本身的状态信息,而stat返回的是符号链接指向的文件状态信息。
stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是
该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号
链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能
对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
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; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
程序中获取文件属性实例:#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
if(argc!=2)
{
printf("usage:my_stat \n");
exit(0);
}
//获取文件属性
if(stat(argv[1],&buf)==-1)
{
perror("stat:");
exit(1);
}
//打印参数
pirntf("device is :%d\n",buf.st_dev);
printf("inode is :%d\n",buf.st_ino);
............
}