1、理解Linux中的目录及i节点等基本概念; 2、掌握目录的读写时常用的函数,如opendir, readdir, closedir等; 3、掌握文件属性的读取方法,如stat; 4、掌握掩码技术,可实现对比特位操作。
可识别用户输入路径对应文件的类型,若为目录则读取相应子目录及文件名;若为文件,则读取其i节点号和文件大小属性。
虚拟机软件:VMware 16 Pro Linux操作系统版本:CentOS-7-64位
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<dirent.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
void lsdir(char* dirname);
void lsattr(char* filename,struct stat *info);
int main(int argc,char* argv[])
{
struct stat info;
if(2!=argc)
{
perror("Show format: myls path");
return -1;
}
// 输出作者信息
printf("学号:123456789\n");
printf("姓名:zhc\n");
// 输出系统当前时间
time_t current_time;
time(¤t_time);
printf("当前系统时间:%s", ctime(¤t_time));
stat(argv[1],&info);
if(S_ISDIR(info.st_mode))
lsdir(argv[1]);
else if (S_ISREG(info.st_mode))
lsattr(argv[1],&info);
else
printf("%s is not file or directory\n",argv[1]);
return 0;
}
void lsdir(char* dirname)
{
DIR* pdir;
struct dirent* pdirent;
if((pdir=opendir(dirname))!=NULL)
{
while((pdirent=readdir(pdir))!=NULL)
{
printf("%s\n",pdirent->d_name);
}
}
else
fprintf(stderr,"Error:Can't open %s as a directory!\n",dirname);
}
void lsattr(char* filename,struct stat *info)
{
printf("%s inode: %d \n",filename,info->st_ino);
printf("%s size: %d \n",filename,info->st_size);
}
源代码test3.c内容见上述参考代码。
mkdir test3
cd test3
vim test3.c
这段代码是一个简单的C程序,用于实现类似于ls
命令的功能,能够列出指定路径下的文件和目录信息,并显示文件的inode号和大小。程序的主要功能包括:
lsdir
函数列出目录下的所有文件和目录名。lsattr
函数显示文件的inode号和大小。需要注意的是,该程序仅支持列出单个路径下的文件和目录信息,并且对于目录和文件的属性显示比较简单,仅显示了文件的inode号和大小。
gcc test3.c -o test3 -g
./test3 ./
./
指的是读取当前目录下的文件名。
实验结果如下:读取了当前目录下的文件名。
在Linux文件属性及目录操作实验中,我深入理解了文件权限管理和目录操作的重要性,通过编写一个小程序来读取指定目录下的目录名和文件名,并实时显示当前系统时间。同时也掌握了创建、移动、重命名和删除目录等基本操作。通过实际操作,我加深了对Linux文件系统的理解,实验中遇到的错误和挑战也帮助我更好地理解了Linux系统的工作原理和常见问题的解决方法。