实验三 Linux文件目录操作 一、目的 二、要求 了解并掌握Linux文件目录结构。 了解Linux文件系统与目录操作:

Slides:



Advertisements
Similar presentations
Project2: 文件夹同步工具. 任 务 背景 有 2 个文件夹 A 和 B ,经过 之前的同步操作 , 文 件夹 B 中的内容与文件夹 A 中内容完全一致 , 现 在用 户对 A 文件夹中部分文件 进 行了 编辑、 移 动、删 除或者新增的操作 ,请 你的程序根 据文件夹 A 中的内容 变 化.
Advertisements

C语言程序设计 主讲教师 :张群燕 电话:
电子成绩单项目实现.
“八皇后”问题 崔萌萌 吕金华.
第一章 C语言概述 计算机公共教学部.
香港普通話研習社科技創意小學 周順強老師.
補充: Input from a text file
檔案及目錄.
第 5 章 文件I/O操作.
Chapter 5 Tree & Binary Tree
C语言程序设计 第十二章 位运算.
高级语言程序设计 主讲人:陈玉华.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
chapter 1-Introduction
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
第3章 C 語言的基本知識.
第7章 Linux环境编程.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
多进程编程.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
第五章 指针 5.1 指针的概念和定义 5.2 指针运算 5.3 指针和数组 5.4 字符串指针 5.5 指针数组 5.6 指向指针的指针
THE C PROGRAMMING LANGUAGE
任务九 基于BasicRF的无线传感网络应用
字符串和字符数组 字符串的输入和输出 字符串的基本操作
Linux 文件操作——系统调用和标准 IO 库
实验四 Linux文件目录 一、实验目的 1、了解Linux文件系统与目录操作; 2、了解Linux文件系统目录结构;
第三节 整数类型.
計數式重複敘述 for 迴圈 P
第三章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第九章 预处理命令.
Struct結構 迴圈
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是
Chap5 PHP程式設計進階 授課講師:.
实验三、共享内存与进程同步 一、实验目的与要求 二、实验内容
本节内容 字节对齐.
函式庫補充資料.
指標
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 李祥 QQ:
习题课 编译原理与技术 计算机科学与技术学院 李诚.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
#include <iostream.h>
本节内容 指针类型.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
实验二:添加Linux系统调用及熟悉常见系统调用
結構、檔案處理(Structure, File)
第十二章 位运算.
作業一: 安裝Linux於btrfs上 中正大學 作業系統實驗室 指導教授:羅習五
目录 12.1 位运算符 12.2 位域(位段) 1.
第18讲 从C到C++ 计算机与通信工程学院.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
函式庫補充資料 1.
《操作系统设计与实现》 第5章 文件系统.
《操作系统设计与实现》 Linux系统编程.
隨機函數.
Presentation transcript:

实验三 Linux文件目录操作 一、目的 二、要求 了解并掌握Linux文件目录结构。 了解Linux文件系统与目录操作: (3)目录相关函数接口;

三、内容 1、熟悉Linux文件系统的使用; 2、了解Linux文件系统目录结构; 3、编程实现目录查询命令; 功能类似ls -lR; 查询指定目录下的文件及子目录信息; 显示文件的类型、大小、时间等信息; 递归显示子目录中的文件信息;

四、预备知识 1、Linux文件属性接口 #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> int fstat(int fildes,struct stat *buf); 返回文件描述符相关的文件的状态信息 int stat(const char *path, struct stat *buf); 通过文件名获取文件信息,并保存在buf所指的结构体stat中 int lstat(const char *path, struct stat *buf); 如读取到了符号连接,lstat读取符号连接本身的状态信息,而stat读取的是符号连接指向文件的信息。

stat结构体几乎保存了所有的文件状态信息 struct stat { unsigned long st_dev; // 文件所属的设备 unsigned long st_ino; // 文件相关的inode unsigned short st_mode; // 文件的权限信息和类型信息: S_IFDIR, S_IFBLK, S_IFIFO, S_IFLINK unsigned short st_nlink; //硬连接的数目 unsigned short st_uid; // 文件所有者的ID unsigned short st_gid; //文件所有者的组ID unsigned long st_rdev; //设备类型 unsigned long st_size; //文件大小 unsigned long st_blksize; //块大小 unsigned long st_blocks; //块数 unsigned long st_atime; // 文件最后访问时间 unsigned long st_atime_nsec; unsigned long st_mtime; // 最后修改内容的时间 unsigned long st_mtime_nsec; unsigned long st_ctime; // 文件最后修改属性的时间 unsigned long st_ctime_nsec; unsigned long __unused4; unsigned long __unused5; }; stat结构体几乎保存了所有的文件状态信息

2、Linux目录结构接口 #include <sys/types.h> #include <dirent.h> #include <unistd.h> opendir() DIR *opendir(const char *name); 通过路径打开一个目录,返回一个DIR结构体指针(目录流),失败返回NULL; readdir() struct dirent *readdir(DIR *) 读取目录中的下一个目录项,没有目录项可以读取时,返回为NULL;

目录项结构: 注:需跳过两个目录项“.”和“..” 定义见/usr/include/dirent.h struct dirent {           #ifndef __USE_FILE_OFFSET64 __ino_t d_ino; //索引节点号   __off_t d_off; //在目录文件中的偏移 #else __ino64_t d_ino; __off64_t d_off; #endif     unsigned   short   int   d_reclent;     //文件名的长度     unsigned   char   d_type;     //d_name所指的文件类型           char   d_name[256];     //文件名     }; 注:需跳过两个目录项“.”和“..” 定义见/usr/include/dirent.h

chdir() int chdir(const char *path); 改变目录,与用户通过cd命令改变目录一样,程序也可以通过chdir来改变目录,这样使得 fopen(),opendir(),这里需要路径的系统调用,可以使用相对于当前目录的相对路径打开文件(目录)。 closedir() int closedir(DIR*) 关闭目录流

输入ls -l 可以看到如下信息: drwxr-xr-x 3 killercat killercat 4096 2007-01-11 16:27 Desktop drwx------ 8 killercat killercat 4096 2007-01-09 14:33 Documents drwxr-xr-x 2 killercat killercat 4096 2006-11-30 19:27 Downloads drwx------ 4 killercat killercat 4096 2006-12-16 20:20 References drwx------ 9 killercat killercat 4096 2007-01-11 13:34 Software drwxr-xr-x 3 killercat killercat 4096 2006-12-11 16:39 vmware drwx------ 6 killercat killercat 4096 2007-01-11 13:34 Workspace

#include <unistd.h> #include <sys/stat.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <dirent.h> void printdir(char *dir, int depth){ DIR *dp; struct dirent *entry; struct stat statbuf; if ((dp = 打开dir目录) 不成功){ // opendir 打印出错信息; 返回; } 将dir设置为当前目录; //chdir

while(读到一个目录项){ //readdir 以该目录项的名字为参数,调用lstat得到该目录项的相关信息; if(是目录){ if(目录项的名字是”..”或”.”) 跳过该目录项; 打印目录项的深度、目录名等信息 递归调用printdir,打印子目录的信息,其中的depth+4; } else 打印文件的深度、文件名等信息 返回父目录; //chdir 关闭目录项; //closedir int main(….){ ………