首页 > 其他分享 >第25天目录操作

第25天目录操作

时间:2024-11-14 16:47:15浏览次数:3  
标签:25 stat 函数 st printf 操作 include 目录 struct

目录

目录操作

函数名:opendir()

函数名:closedir()

函数名:readdir()

函数名:mkdir()

函数名:rmdir()

函数名:getcwd() ---pwd

函数名:chdir()---cd

文件属性

函数名:stat()

函数名:lstat()

函数名:fstat()

stat\lstat\fstat 的异同


目录操作

函数名:opendir()

头文件:

#include<sys/types.h>

#include<dirent.h>

函数原型:DIR * opendir(const char *name);

函数功能:打开目录

函数参数:打开的目录路径

函数返回值:目录指针

函数使用:

DIR * dirp = opendir("./A");

函数名:closedir()

头文件:

#include<sys/types.h>

#include<dirent.h>

函数原型:int closedir(DIR * dirp);

函数功能:关闭目录

函数参数:目录指针

函数返回值:成功返回0,失败返回-1

函数使用:

closedir(dirp);

函数名:readdir()

头文件:#include <dirent.h>

函数原型:struct dirent *readdir(DIR *dirp);

函数功能:读取dirp的目录信息,以结构体struct dirent保存

 struct dirent {
               ino_t          d_ino;       /* Inode number */
               off_t          d_off;       /* Not an offset; see below */
               unsigned short d_reclen;    /* Length of this record */
               unsigned char  d_type;      /* Type of file; not supported
                                              by all filesystem types */
               char           d_name[256]; /* Null-terminated filename */
           };

其中信息包括:inode编号、目录条目占用空间大小、文件类型、文件名。

函数参数:目录指针

函数返回值:返回结构体指针

函数使用:

DIR * dirp = opendir("./A");
struct dirent *dir = readdir(dirp);
printf("%s",dir->name);

每次读取目录中的一个文件的信息

所有文件都被读取之后,会返回NULL        

函数名:mkdir()

头文件:

#include<sys/types.h>

#include<sys/stat.h>

函数原型:int mkdir(const char *pathname, mode_t mode);

函数功能:创建目录,指定权限

函数参数:

pathname:目录及路径

mode:目录的权限设置 真实权限==~umask&mode (常用值0755)

函数返回值:成功返回 0,失败返回-1

函数使用:

mkdir(“./B”, 0755);

函数名:rmdir()

头文件:#include<unistd.h>

函数原型:int rmdir(const char *pathname);

函数功能:删除目录

函数参数:目录及路径

函数返回值:成功返回 0,失败返回-1

函数使用:

 rmdir(“./B”);

函数名:getcwd() ---pwd

头文件:#include 函数原型:char *getcwd(char *buf, size_t size);

函数功能:获取当前的路径

函数参数:路径保存的地址,缓存大小

函数返回值:路径信息存储的位置

函数使用:

char buf[100] = {0}; 
printf(“%s\n”, getcwd(buf, 100));

函数名:chdir()---cd

头文件:#include<unistd.h>

函数原型:int chdir(const char *path);

函数功能:跳转到指定路径

函数参数:指定的路径

函数返回值:成功返回 0,失败返回-1

函数使用:

 chdir(“../”);

函数名:chmod()

头文件:#include<sys.stat.h>

函数原型:int chmod(const char *pathname, mode_t mode);

函数功能:设置文件权限

函数参数:文件名,【真实权限】 (常用0777)

函数返回值:成功返回 0,失败返回-1

函数使用:

chmod(“./1.txt”,0777);

文件属性

函数名:stat()

头文件:

#include<sys/stat.h> 

#include<sys/types.h>

#include<unistd.h>

函数原型:int stat(const char *pathname, struct stat *statbuf);

函数功能:获取 pathname 文件属性保存到 struct stat 结构体中

struct stat {
               dev_t     st_dev;         /* ID of device containing file */
               ino_t     st_ino;         /* Inode number */
               mode_t    st_mode;        /* File type and mode */
               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;     /* Block size for filesystem I/O */
               blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */
               /* Since Linux 2.6, the kernel supports nanosecond
                  precision for the following timestamp fields.
                  For the details before Linux 2.6, see NOTES. */
               struct timespec st_atim;  /* Time of last access */
               struct timespec st_mtim;  /* Time of last modification */
               struct timespec st_ctim;  /* Time of last status change */
           #define st_atime st_atim.tv_sec      /* Backward compatibility */
           #define st_mtime st_mtim.tv_sec
           #define st_ctime st_ctim.tv_sec
           };

struct stat结构体中包含文件的inode编号、文件的类型和权限模式、硬链接数、uid文件所有者的id、gid文件所有者的组id、特殊文件的设备id(如字符设备文件)、文件总大小、已分配的字节快数量、文件的最后访问时间、最后修改时间。

函数参数:

pathname:文件名

statbuf:属性保存的位置

函数返回值:成功返回 0,失败返回-1 函数使用:

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/sysmacros.h>
int main(int argc, char *argv[]){ 
    struct stat sb;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
        exit(EXIT_FAILURE);
    }
     if (lstat(argv[1], &sb) == -1) {
         perror("lstat");
         exit(EXIT_FAILURE);
     }
    printf("File type: ");
    switch (sb.st_mode & S_IFMT) {
         case S_IFBLK: printf("block device\n"); break;
         case S_IFCHR: printf("character device\n"); break;
         case S_IFDIR: printf("directory\n"); break;
         case S_IFIFO: printf("FIFO/pipe\n"); break;
         case S_IFLNK: printf("symlink\n"); break;
         case S_IFREG: printf("regular file\n"); break;
         case S_IFSOCK: printf("socket\n"); break;
         default: printf("unknown?\n"); break;
     }
 printf("I-node number: %ld\n", (long) sb.st_ino);
 printf("Mode: %lo (octal)\n", (unsigned long) sb.st_mode);
 printf("Link count: %ld\n", (long) sb.st_nlink);
 printf("Ownership: UID=%ld GID=%ld\n", (long) sb.st_uid, (long) sb.st_gid);
 printf("Preferred I/O block size: %ld bytes\n", (long) sb.st_blksize);
 printf("File size: %lld bytes\n", (long long) sb.st_size);
 printf("Blocks allocated: %lld\n", (long long) sb.st_blocks);
 printf("Last status change: %s", ctime(&sb.st_ctime));
 printf("Last file access: %s", ctime(&sb.st_atime));
 printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
 }

该程序获取指定路径的文件状态信息,并打印文件的类型、inode 编号、模式、链接数、所有者信息、I/O 块大小、文件大小、已分配的块数以及最后状态改变、访问和修改的时间。并使用 switch 语句判断文件类型,并通过 printf 函数输出各种文件属性。

函数名:lstat()

函数原型:int lstat(const char *pathname, struct stat *statbuf);

函数名:fstat()

函数原型:int fstat(int fd, struct stat *statbuf);

函数参数:fd:文件描述符

stat\lstat\fstat 的异同

相同:都是获取文件属性,并保存在 struct stat 类型的结构体中

不同:

  • stat 直接传入文件名,获取的是源文件的属性
  • lstat 直接传入文件名,获取的是链接文件的属性
  • fstat 需要先打开文件,传入 fd,才能获取文件属性

标签:25,stat,函数,st,printf,操作,include,目录,struct
From: https://blog.csdn.net/Charary/article/details/143772126

相关文章

  • 第24天文件操作&时间编程
    目录文件操作基于缓冲区的文件操作--高级IO基于非缓冲区的文件操作--低级IO文件描绘符函数:open()函数名:close()函数名write()函数名:read()函数名:lseek()时间编程有关时间的shell命令时间函数(API)函数名:time()函数名:gmtime()函数名:ctime()localtime/gmtime/ctime......
  • 【FMC155A】基于VITA57.1标准的2路500MSPS/1GSPS/1.25GSPS 14位AD采集FMC子卡模块(交流
    ​板卡概述FMC155A是一款基于VITA57.1标准的,实现2路14-bit、500MSPS/1GSPS/1.25GSPS采样率交流耦合ADC同步采集FMC子卡模块。该模块遵循VITA57.1规范,可直接与FPGA载卡配合使用,板卡ADC器件采用ADI的AD9680芯片,该芯片具有两个模拟输入通道和两个JESD204B输出数据通道对,可用于高达2......
  • [Mysql基础] 表的操作
    一、创建表1.1语法CREATETABLEtable_name(field1datatype,field2datatype,field3datatype)characterset字符集collate校验规则engine存储引擎;说明:field表示列名datatype表示列的类型characterset字符集,如果没有指定字符集,则以所在数据库的字......
  • RTSP播放器EasyPlayer.js播放器PC电脑端播放视频时整个显示器会白屏的操作方法
    EasyPlayer.js播放器是TSINGSEE青犀流媒体组件系列中关注度较高的产品,经过多年的发展和迭代,目前已经有多个应用版本,包括RTSP版、RTMP版、Pro版以及js版,其中js版本作为网页播放器,受到了用户的广泛使用。在功能上,EasyPlayer支持直播、点播、录像、快照截图、MP4播放、多屏播放、倍......
  • 力扣-Mysql-3252-英超积分榜排名 II(中等)
    一、题目来源3252.英超积分榜排名II-力扣(LeetCode)二、数据表结构表:TeamStats+------------------+---------+|ColumnName|Type|+------------------+---------+|team_id|int||team_name|varchar||matches_played......
  • [QT][NCNN][YOLOV8-SEG]使用ncnn框架部署yolov8-seg,外加qt进行界面可视化操作,用于图片
    yolov8seg_qt_ncnn使用ncnn框架部署yolov8-seg,外加qt进行界面可视化操作,用于图片和视频实例分割推理。Github地址:https://github.com/zhahoi/yolov8seg_qt_ncnn起一直以来自己做算法部署或者是模型推理,最后总是需要在命令行敲各种命令,然后通常借助opencv进行可视化。老......
  • 校园圈子平台建立后后台如何操作运营呢?【附源码教程】
    系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP;我们为你准备了完善的后台管理,不需要你懂PHP,按照教程10分钟安装完即可使用,堪比深夜的杜蕾斯还方便。校园圈子系统是在......
  • 知乎3.4万赞,大模型入门书籍精选!2025年程序员必备!
    在知乎上,"如何系统的入门大模型?"这一话题引爆了超过50万读者的热烈讨论。作为程序员,我们应当是最先了解大模型的人,也是率先成为了解大模型应用开发的人,到底如何入门大模型的应用开发?前排提示,文末有大模型AGI-CSDN独家资料包哦!我精心整理了一份2024年畅销的大模型书单。......
  • 设计完成一个简单的shell脚本程序!(操作系统)
    设计完成一个简单的shell脚本程序!编写一个shell程序,使用一个菜单界面,方便Linux用户对U盘的加载,卸载操作。程序应该实现一下5个功能:·加载U盘·卸载U盘·查看加载后的U盘的信息·从Linux分区的硬盘中拷贝文件到U盘中·从U盘中拷贝文件到Linux分区的硬盘指定位置上1.......
  • UI自动化测试|元素操作&浏览器操作实践
    前言Selenium自动化测试是一种广泛使用的Web自动化测试工具,它允许测试人员编写自动化测试脚本来模拟用户在Web浏览器中的操作,从而实现对Web应用程序的自动化测试。这里分享元素操作&浏览器操作1.Selenium之元素操作Selenium是一种常用的自动化测试工具,它提供了一组丰富的......