• 2017-2018 20155309南皓芯 信息安全系统基础设计第四周博客


    复习c文件处理内容

    编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
    main与其他分开,制作静态库和动态库
    编写Makefile
    提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息

    首先说一下简要的思路
    按照娄老师所说的,我们要将整个代码分为三个部分去书写,第一部分是写头文件,第二部分是用来写实现myod读取以及关闭文件的功能,而第三部分是能够使其输出od的字符。
    首先第一部分的头文件十分好写

    head.h文件

    #ifndef HEAD_H
    
    #define HEAD_H
    
    void od(char str[],int);
    
    #endif
    

    第二部分是对main函数的书写
    也就是对读取与关闭文件函数的书写
    所以一定要用到file函数

           #include<stdio.h>
            int main()
            {
            FILE *fp;
            fp=fopen("test.txt","rx");
            if(fp==NULL){
            printf("Fail to open file
    ");
            return 0;
            }
            char ch, str[100];
            int a,n;
            a=0;
            if((ch=fgetc(fp))!=EOF){
            str[a]=ch;
            a++;
            
            }
            str[a]='';
            
            fclose(fp);
            od(str,a);
            }
    

    接下来是第三部分代码的书写
    第三部分代码相对而言是最难的。我们可以看出每行最多只能够输出16个字符,也就是每16一换行。
    在编写第三部分代码的时候,我们要注意每行代码数量的上限。

    #include"head.h"
    #include<stdio.h>
    void od(char str[100],int a)
    {
    int b=1,f=0,e=0;
    int line=0;
    printf("%06d  ",line);
    putchar(str[0]);
    for(b=1;b<=a;b++){
    if(b%16!=0&&str[b]!=''){
    if(str[b]!='
    ')
    {
    printf("  %2c",str[b]);
    }
    else{
    printf("  \n");
    }
    }
    else{
    printf("
          ");
    for(f=e;f<b;f++){
    printf("  %02x",str[f]);
    }
    printf("
    %06d",b+2);
    
    e=b;
    }
    }
    printf("
    ");
    }
    

    实验中遇到的问题和解决方法

    1.没有头文件造成的问题

    第一次在编写代码时只有od.c与myod.c,并且在代码的开头都没有加head.h,di第一次修改的时候只是在od.c前加入了头文件,然后发现编译还是有问题,最后我在myod.c文件头前加入head.h就好了。

    第二部分od的应用:

    1 参考教材第十章内容

    2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名

    1. 不要把代码都写入main函数中

    2. 要分模块,不要把代码都写入一个.c中

    5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    6 课上上传代码到码云

    首先我们需要调用函数
    open函数的原型为:
    int open(const char *path, int oflags);
    int open(const char *path, int oflags, mode_t mode);

    read函数的原型为:

    size_t read(int fildes, void *buf, size_t nbytes);

    接下来是编译代码

    教材第十章内容总结

    非常重要的一章,虚拟存储机制是计算机实现多任务的一项重要技术。计算机正是通过时间片技术使得每个进程在执行时仿佛独占CPU,进而又通过虚拟存储机制使得每一个进程在执行时,仿佛独占内存。

    在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行。
    打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息。
    改变当前的文件位置。

    读写文件

    关闭文件

    应用完成了对文件的访问之后,就通知内核关闭这个文件,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。进程终止,内核也会关闭所有打开的文件并释放他们的存储器资源。

  • 相关阅读:
    SQL 2008R2问题:用户、组或角色'XXX'在当前数据库中已存在?
    修改sqlserver 2008 R2 实例名称
    keepalived vip做网关
    Django(HttpResponse、render,、redirect)的用法
    Linux脚本中$#、$0、$1、$@、$*、$$、$?
    linux定时删除历史日志文件实现方式--shell脚本
    Long转换为date
    java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
    2016年新年伊始
    linux下环境搭建
  • 原文地址:https://www.cnblogs.com/nhx19970709/p/7674297.html
Copyright © 2020-2023  润新知