首页 > 其他分享 >20201318李兴昕第七、八章学习笔记

20201318李兴昕第七、八章学习笔记

时间:2022-09-25 19:36:14浏览次数:51  
标签:文件 八章 int 调用 李兴昕 char 20201318 mode buf

第七章:文件操作

知识点总结:

本章讨论了多种文件系统;解释了操作系统中的各种操作级别,包括为文件存储准备存储设备、内核中的文件系统支持函数、系统调用、文件流上的I/O库函数、用户命令和各种 操作的sh脚本;系统性概述了各种操作,包括从用户空间的文件流读/写到内核空间的系统 调用,直到底层的设备I/O驱动程序级别;描述了低级别的文件操作,包括磁盘分区、显示分区表的示例程序、文件系统的格式化分区以及挂载磁盘分区;介绍了 Linux系统的EXT2 文件系统,包括EXT2文件系统的系统数据结构、显示超级块、组描述符、块和索引节点位 图以及目录内容的示例程序。编程项目将本章中讨论的EXT2/3文件系统和编程技术集中到 一个程序中,将路径名转换为索引节点并打印它们的信息。
详细介绍了文件系统函数和sh-linux命令
文件系统函数:

kmount (),kumount():(mount/umount file systems)
kmkdir (),krmdir ():(make/remove directory)
kchdir(),kgetcwd():(change directory, get CWD pathname)
klink(),kunlink(): (hard link/unlink files)
kchmod (),kchown(), kutime():(change r|w|x permissions,owner,time)
kcreat(),kopen():(create/open file for R,W,RW,APPEND)
kread(),kwrite():(read/write opened files)
klseek();kclose():(Iseek/close file descriptors)
ksyralink(), kreadlink():(create/read symbolic link files)
kstat (), kfstat()/ klstat():(get file status/infoirmation)
kopendir (), kreaddir ():(open/read directories)

sh-linux命令:

  1. open:打开文件 (man 2 open 查看)
int open(const char *pathname, int flags); //pathname文件名(路径);flags打开模式,有O_RDONLY, O_WRONLY, O_RDWR
int open(const char *pathname, int flags, mode_t mode); //该函数一般用于创建新文件,flags添加O_CREAT,比如:O_RDWR|O_CREAT
int creat(const char *pathname, mode_t mode); //创建新文件,mode权限说明,比如0644(八进制,取反后和umask做与运算得到真正结果)
返回值:成功返回文件描述符fd,失败返回-1 。
  1. read文件读取 (man 2 read 查看)
ssize_t read(int fd, void *buf, size_t count);
//ssize_t有符号整数;fd文件描述符;buf传出参数,读取的内容就在buf里;count表示buf的长度
返回值:大于0表示读取的字节数,等于0表示读取完,-1表示读取失败
  1. write文件写入 (man 2 write 查看)
ssize_t write(int fd, const void *buf, size_t count); //buf需要写入的内容,count需要写入的内容的长度;ssize_t有符号整数;size_t无符号整数
返回值:大于表示写入的字节数,0表示没有写入任何数据,-1表示写入失败

实践

磁盘分区

(1)在Linux下,例如Ubuntu,创建一个名为mydisk的虚拟磁盘映像文件。
dd if=/dev/zero of=mydisk bs=1024 count=1440
dd是一个将1440( 1KB)个0字节块写入目标文件mydisk的程序。我们选择count=1440, 因为它是旧软盘的1KB字节块的数量。必要时,读者可指定更大的库编号。
image
(2 )在磁盘映像文件上运行fdisk:
fdisk mydisk
image

第八章:使用系统调用进行文件操作

知识点总结:

本章论述了如何使用系统调用进行文件操作;解释了系统调用的作用和Linux的在线手 册页;展示r如何使用系统週用进行文件操作;列举并解释r文件操作中最常用的系统调用; 阐明了硬链接和符号链接文件;具体解释了 Stat系统调用;基于stat信息,开发了一个类似 于Is的程序来显示目录内容和文件信息;接着,讲解了 open-close-lseek系统调用和文件描 述符;然后,展示了如何使用读写系统调用来读写文件内容;在此基础上,说明了如何使用 系统调用来显示和复制文件;还演示了如何开发选择性文件复制程序,其行为类似于一个 简化的Linux dd实用程序。编程项目使用Linux系统调用来实现C程序,该程序将目录递 归复制到目标中。该项目的目的是让读者练习程序的分层结构设计,并利用stat()、open。、 read。、write。系统调用进行文件操作。

简单的系统调用:

access:检査对某个文件的权限
int access(char •pathname, int mode);
chdir:更改目录
int chdir(const char *path);
chmod:更改某个文件的权限
int chmod(char *path, mode_t mode);
chown:更改文件所有人
int chown(char *name, int uid, int gid);
chroot:将(逻辑)根目录更改为路径名
int chroot (char *patiiname);
getcwd:获取CWD的绝对路径名
char *getcwd(char *buf, int size);
mkdir:创建目录
int mkdir(char *pathname, mode_t mode);
rmdir:移除目录(必须为空)
int rmdir (char *pathname);
link:将新文件名硬链接到旧文件名
int link(char *oldpath, char *newpath);
unlink:减少文件的链接数;如果链接数达到0,则删除文件
int uniink(char *pathname);
symlink:为文件创建一个符号链接
int symliak(char *oldpath, char *newpath);
rename:更改文件名称
int rename(char *oldpath, char *newpath)
utime:更改文件的访问和修改时间
int utime(char *pathname, struct utimebuf *time)

以下系统调用需要超级用户权限:

mount:将文件系统添加到挂载点目录上
int mount(char *specialfile, char *mountDir)/
umount:分离挂载的文件系统
int umount(char *dir);
mknod:创建特殊文件
int mknod(char *path, int mode, int device);

实践

系统调用

代码:

/*****C8.1.C file ************/
#include <stdio.h>
#include <errno.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
int main()
{
    char buf[256], *s;
    int r;
    r = mkdir("newdir", 0766); // mkdir syscall
    if (r < 0)
        printf ("errno=%d : %s\n"  ,errno, strerror (errno));
    r = chdir("newdir");	//cd into newdlr
    s = getcwd(buf, 256);	// get CWD string into buf[]
    printf ("CWD = %s\n", s);
}

截图:
image

标签:文件,八章,int,调用,李兴昕,char,20201318,mode,buf
From: https://www.cnblogs.com/shady545/p/16728531.html

相关文章

  • 第七/八章读书笔记
    第七章文件操作一、文件操作级别(五个阶别,5/6一个级别,由低到高)一、硬件级别文件操作大部分创建和维护系统必不可少的工具如fdisk二、操作系统内核的文件系统......
  • 20201306吴龙灿第七、八章学习笔记
    知识点归纳一、文件操作1.文件操作级别​文件操作分为五个级别,按照从低到高的顺序可以如下表示:硬盘级别​这些操作多是针对系统的实用程序,一般用户不会涉及到它......
  • 《Unix/Linux系统编程》第七、八章学习笔记 20201209戴骏
    一、知识点归纳第七章文件操作1.文件操作级别文件操作分为五个级别,按照从低到高的顺序排列如下.(1)硬件级别:硬件级别的文件操作包括:fdisk:将硬盘、U盘或SDC盘分区。......
  • 20201220蔡笃俊《信息安全系统设计与实现》第七、八章学习笔记
    一、任务内容自学教材第7,8章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)...(知识的结构化,知识的完整性等,提......
  • 第十八章 装饰器
    一、装饰器介绍1.为何要用装饰器软件的设计应该遵循开放封闭原则,即对扩展是开放的,而对修改是封闭的。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应......
  • 第八章读数笔记
    第八章读书笔记8.1系统调用在操作系统中,进程以两种不同的模式运行,即内核模式和用户模式,简称Kmode和Umode。在Umode中,进程的权限非常有限。它不能执行任何需要特殊权限的......
  • CSAPP(第三版)第八章异常控制流学习笔记
    定义:从给处理器加点开始,知道你断电为止,程序计数器假设一个值的序列\(a_0,a_1,...,a_{n-1}\)其中,每个\(a_k\)是某个响应的指令\(I_k\)的地址。每次从\(a_k\)到\(a_{k+1}\)......
  • 第八章 filebeat收集日志与kibana画图
    一、filebeat收集单日志到本地文件1.配置#编辑Filebeat配置文件[root@web01~]#vim/etc/filebeat/filebeat.ymlfilebeat.inputs:-type:logenabled:truepat......
  • 第八章 数组的使用和信号控制
    一、数组介绍1.什么是数组? 数组就是一系列元素的集合,一个数组内可以存放多个元素 2.为何要用数组? 我们可以用数组将多个元素汇总到一起,避免单独定义的麻烦二、数......
  • 第十八章 Ansible-playbook-Role基础介绍
    一、AnsibleRoles概述roles不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,我们肯定需要把不同的工作模块,拆分开来,解......