目录
- 一、实验目的
- 二、实验内容
- 三、实验环境
- 四、参考代码
- 五、实验步骤
- 步骤1. 编辑源代码test3.c
- 步骤2. 编译源代码test3.c
- 步骤3. 运行可执行文件test3
- 六、实验结果
- 七、实验总结
一、实验目的
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);
}
五、实验步骤
步骤1. 编辑源代码test3.c
源代码test3.c内容见上述参考代码。
mkdir test3
cd test3
vim test3.c
这段代码是一个简单的C程序,用于实现类似于ls
命令的功能,能够列出指定路径下的文件和目录信息,并显示文件的inode号和大小。程序的主要功能包括:
- 接受命令行参数:程序接受一个命令行参数作为路径参数,用于指定要列出文件和目录信息的路径。
- 输出作者信息:程序在开始时输出作者的学号、姓名。
- 输出系统当前时间:程序获取系统的当前时间并将其输出。
- 根据路径类型进行操作:根据指定路径的类型(文件或目录),分别调用不同的函数进行处理。
- 列出目录内容:如果指定路径是一个目录,则调用
lsdir
函数列出目录下的所有文件和目录名。 - 显示文件属性:如果指定路径是一个文件,则调用
lsattr
函数显示文件的inode号和大小。 - 错误处理:对于无法打开目录的情况,程序会输出错误信息。
需要注意的是,该程序仅支持列出单个路径下的文件和目录信息,并且对于目录和文件的属性显示比较简单,仅显示了文件的inode号和大小。
步骤2. 编译源代码test3.c
gcc test3.c -o test3 -g
步骤3. 运行可执行文件test3
./test3 ./
./
指的是读取当前目录下的文件名。
六、实验结果
实验结果如下:读取了当前目录下的文件名。
七、实验总结
在Linux文件属性及目录操作实验中,我深入理解了文件权限管理和目录操作的重要性,通过编写一个小程序来读取指定目录下的目录名和文件名,并实时显示当前系统时间。同时也掌握了创建、移动、重命名和删除目录等基本操作。通过实际操作,我加深了对Linux文件系统的理解,实验中遇到的错误和挑战也帮助我更好地理解了Linux系统的工作原理和常见问题的解决方法。