2017-2018-1 20155318 《信息安全系统设计基础》第四周学习总结

2017-2018-1 20155318 《信息安全系统设计基础》第四周学习总结

教材学习内容总结

课上实践

  1. 参考教材第十章内容
  2. 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
  3. 不要把代码都写入main函数中
  4. 要分模块,不要把代码都写入一个.c中

实现

  • man od

  • 上周代码

  • 如何实现系统调用

  • open:UNIX系统的系统调用函数,区别于C语言库函数fopen。包含在头文件#include <fcntl.h>中,两个函数

int open(constchar*pathname, int flags);    
int open(constchar*pathname, int flags, mode_t mode);

成功则返回文件描述符,否则返回-1

  • read
    通过 man 2 read 来了解相关知识

返回值-1表示一个错误,而返回值0表示EOF。否则,返回值表示的是实际传送的字节数量。

  • 对上个版本的myod进行修改:
  1. 通过调用open函数来打开文件:fd=open(argv[1], O_RDONLY,0);
  2. 通过read函数来读取文件:read(fd,&ch,1)!=0

运行结果

I/O重定向

  • Unix外壳提供I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来
  • I/O重定向工作:一种方式是使用dup2函数
  • dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd以前的内容。如果newfd已经打开,dup2会在拷贝oldfd之前关闭newfd

Linux中open, read, write, seek, close

参考调用这些库函数时需要用的头文件,下面是对应的系统调用

文件的打开
     FILE *fopen( "路径+文件名","读写模式");
     FILE *fopen(const char *filename, const char *mode);
     读写模式:(1)r -- 用于读 (2)w -- 用于写 (3)a -- 用于写,且文件必须存在
文件的写入
     fwrite("写入的内容",每项字节数,长度,写入的文件的FILE指针);
     size_t fwrite(const void *buffer,size_t size,size_t count,FILE *stream);
     另外,strlen()函数可以获得字符串长度。
文件的关闭
     fclose(FILE类指针);
     fclose(FILE *pFile)
     文件关闭后,写在文件缓冲区的内容才正式写入到文件中。
文件指针定位
    fseek(FILE类指针,偏移量,起始位置)
    int fseek( FILE *stream, long offset, int origin );
    起始位置:
    SEEK_CUR: 当前位置
    SEEK_END: 结尾处
    SEEK_SET: 开头处
文件的读取
    fread("存放读取信息的字符串",每项字节数,长度,读入的文件的FILE指针);
    size_t fread(void *buffer,size_t size,size_t count,FILE *stream);
    其中,第一个参数可以是字符数组的名称。比如:
    char ch[100];
    fread(ch,1,100,pFile);

head、tail

  • 通过运行“head xxx.c”和“tail xxx.c”可以发现,head、tail的作用分别是显示一个文件的前十行和后十行

  • 使用命令“man -k head | grep 1”、“man -k tail | grep 1”查看帮助文档

  • head,tail使用

  • 编写main.c和headtest.c
  • 运行是产生如下问题:(暂未解决)
代码链接
posted @ 2017-10-15 23:39  lxy1997  阅读(130)  评论(1编辑  收藏  举报