前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux实验三:文件属性及目录操作

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

作者头像
Francek Chen
发布2025-01-22 21:19:20
发布2025-01-22 21:19:20
20400
代码可运行
举报
运行总次数:0
代码可运行

一、实验目的

1、理解Linux中的目录及i节点等基本概念; 2、掌握目录的读写时常用的函数,如opendir, readdir, closedir等; 3、掌握文件属性的读取方法,如stat; 4、掌握掩码技术,可实现对比特位操作。

二、实验内容

可识别用户输入路径对应文件的类型,若为目录则读取相应子目录及文件名;若为文件,则读取其i节点号和文件大小属性。

三、实验环境

虚拟机软件:VMware 16 Pro Linux操作系统版本:CentOS-7-64位

四、参考代码

代码语言:javascript
代码运行次数:0
运行
复制
#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内容见上述参考代码。

代码语言:javascript
代码运行次数:0
运行
复制
mkdir test3
cd test3
vim test3.c

这段代码是一个简单的C程序,用于实现类似于ls命令的功能,能够列出指定路径下的文件和目录信息,并显示文件的inode号和大小。程序的主要功能包括:

  • 接受命令行参数:程序接受一个命令行参数作为路径参数,用于指定要列出文件和目录信息的路径。
  • 输出作者信息:程序在开始时输出作者的学号、姓名。
  • 输出系统当前时间:程序获取系统的当前时间并将其输出。
  • 根据路径类型进行操作:根据指定路径的类型(文件或目录),分别调用不同的函数进行处理。
  • 列出目录内容:如果指定路径是一个目录,则调用lsdir函数列出目录下的所有文件和目录名。
  • 显示文件属性:如果指定路径是一个文件,则调用lsattr函数显示文件的inode号和大小。
  • 错误处理:对于无法打开目录的情况,程序会输出错误信息。

需要注意的是,该程序仅支持列出单个路径下的文件和目录信息,并且对于目录和文件的属性显示比较简单,仅显示了文件的inode号和大小。

步骤2. 编译源代码test3.c
代码语言:javascript
代码运行次数:0
运行
复制
gcc test3.c -o test3 -g
步骤3. 运行可执行文件test3
代码语言:javascript
代码运行次数:0
运行
复制
./test3 ./

./指的是读取当前目录下的文件名。

六、实验结果

实验结果如下:读取了当前目录下的文件名。

七、实验总结

  在Linux文件属性及目录操作实验中,我深入理解了文件权限管理和目录操作的重要性,通过编写一个小程序来读取指定目录下的目录名和文件名,并实时显示当前系统时间。同时也掌握了创建、移动、重命名和删除目录等基本操作。通过实际操作,我加深了对Linux文件系统的理解,实验中遇到的错误和挑战也帮助我更好地理解了Linux系统的工作原理和常见问题的解决方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实验目的
  • 二、实验内容
  • 三、实验环境
  • 四、参考代码
  • 五、实验步骤
    • 步骤1. 编辑源代码test3.c
    • 步骤2. 编译源代码test3.c
    • 步骤3. 运行可执行文件test3
  • 六、实验结果
  • 七、实验总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档