Linux实验三:文件属性及目录操作


一、实验目的

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(&current_time);
    printf("当前系统时间:%s", ctime(&current_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系统的工作原理和常见问题的解决方法。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francek Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值