信息安全系统设计与实现——学习笔记4

任务详情:自学教材第7,8章,提交学习笔记(10分)

Part1 知识点归纳&GPT提问

知识点归纳

chap 7

  • 文件操作级别
    • 硬件级别
    • fdisk
    • mkfs
    • fsck
  • 碎片整理
  • 操作系统内核中的文件系统函数
  • 系统调用
  • I/O库函数
  • 用户命令
  • sh脚本
  • 文件I/O操作
  • 低级别文件操作
  • 分区
    • Command (m for help): m ---输出帮助信息
    • Command action
    • a toggle a bootable flag ---设置启动分区
    • b edit bsd disklabel ---编辑分区标签
    • c toggle the dos compatibility flag
    • d delete a partition --删除一个分区
    • l list known partition types --列出分区类型
    • m print this menu --帮助
    • n add a new partition --建立一个新的分区
    • o create a new empty DOS partition table --创建一个新的空白DOS分区表
    • p print the partition table ---打印分区表
    • q quit without saving changes ---退出不保存设置
    • s create a new empty Sun disklabel ---
    • t change a partition's system id ---改变分区的ID
    • u change display/entry units ---改变显示的单位
    • v verify the partition table ---检查验证分区表
    • w write table to disk and exit ---保存分区表
    • x extra functionality (experts only)

chap 8

系统调用
系统调用手册页

man 2 stat
man 2 open
man 2 read

常用的系统调用
open:打开一个文件进行读、写、追加

int open(char *file, int flags, int mode);

close:关闭打开的文件描述符

int close(int fd);

read:读取打开的文件描述符

int read(int fd, char buf[], int count);

write:写入打开的文件描述符

int write(int fd, char buf[], int count);

dup:将文件描述符复制到可用的最小描述符编号中

int dup(int oldfd);

dup2:将oldfd复制到newfd中,如果文件链接数为0,则删除文件

int dup2(int oldfd, int newfd);

link:将新文件硬链接到旧文件

int link(char *oldPath, char *newPath);

unlink:取消某个文件的链接;如果文件链接数为0,则删除文件

int unlink(char *pathname);

symlink:创建一个符号链接

int symlink(char *target, char *newpath);

readlink:读取符号链接文件的内容

int readlink(char *path, char *buf, int bufsize);

umask:设置文件创建掩码;文件权限为(mask & ~umask)

int umask(int umask);

mknod:创建特殊文件

int mknod(char *path,int mode,int device)

链接文件
硬链接文件

ln oldpath newpath

对应系统调用:link(char *oldpath,char *newpath)
减少文件链接数:unlink(char *pathname)

符号链接文件

ln -s oldpath newpath

创建符号链接或软链接

symlink(char *oldpath,char *newpath)
  • stat系统调用

  • stat文件状态

  • stat结构体

  • stat与文件索引节点
    每个索引节点在存储设备上都有唯一的索引节点编号(ino)。每个设备都由一对设备号标识,例如0x0302表示/dev/hda2等

  • 文件类型和权限
    st_mode:第一个字母表示文件类型,后面9个字符基于权限位,如果位是1,每个字符打印为r|w|x;如果位是0,则打印-。x位表示是否允许访问目录。

GPT提问

image
image
image
image

Part2 问题与解决思路

问题:不理解文件读写位置指针

gpt解决

image

Part3 实践过程截图

  • 系统调用手册页
    image

使用系统调用进行文件操作

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

使用系统调用递归复制文件

int copy(char *read_dir_path, char *write_dir_path)  
{  
DIR * p_dir;  
struct dirent * p_dirent;  

  
char read_buf[256];  
char write_buf[256];  

sprintf(read_buf,"%s/", read_dir_path);  
sprintf(write_buf,"%s/",write_dir_path);  

strcat(read_dir_path,"/");  
if( Is_dir(read_buf) )  
{  
    //mkdir   
    if(mkdir(write_buf, 0755) < 0)  
    {  
        printf("mkdir fall:%s\n", strerror(errno));  
        return -1;  
    }  


    //opendir and readdir   

    if((p_dir = opendir(read_buf)) == NULL )  
    {  
        printf("Usage:cp -r <src_dir> <dat_dir> error:%s\n",strerror(errno));  
        return -1;  
    }  

    while((p_dirent=readdir(p_dir)) != NULL)  
    {  
        char read_buffer[256];  
        char write_buffer[256];  
        sprintf(read_buffer,"%s%s", read_buf, p_dirent->d_name);  
        sprintf(write_buffer,"%s%s", write_buf, p_dirent->d_name);  

        printf("%s\n%s\n",read_buffer,write_buffer);  

        //it is a directory   
        if( Is_dir(read_buffer) && 0 != strcmp(p_dirent->d_name, ".") && 0 != strcmp(p_dirent->d_name, "..") )  
        {  
              
            copy_r(read_buffer, write_buffer);  
        }  

        else if(0 != strcmp(p_dirent->d_name, ".") && 0 != strcmp(p_dirent->d_name, ".."))  
        {  
            //copy file   
            if( file_copy_line(read_buffer, write_buffer) < 0 )  
                return 0;  
        }  


    }  

    closedir(p_dir);  

}  

}

Part4 其他

image

posted @ 2023-09-28 22:12  ahuahauhau  阅读(46)  评论(0)    收藏  举报