20191325选做作业MyOD

选做作业MyOD

 

复习c文件处理内容

"r"为读而打开文本文件(不存在则出错)

"w"为写而打开文本文件(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)

"a"为在文件后面添加数据而打开文本文件(若不存在,则新建;反之,在原文件后追加)

"r+"为读和写而打开文本文件(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)

"wb"为写而打开二进制文件

"rb"为读而打开二进制文件

"ab"为在文件后添加数据而打开一个二进制文件

"rb+"为读和写而打开二进制文件,只是再随后的读写中,可以由位置函数设置读和写的起始位置

"w+"首先建立一个新文件,进行写操作,随后可以从头开始读(若文件存在,原内容将全部消失)

"a+"功能与”a”相同;只是在文件尾部添加新的数据后,可以从头开始读

"wb+"功能与"w+”同.只是在随后的读写时,可以由位置函数设置读和写的起始位置

"ab+"功能与”a+”相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置

 

常见的一些文件操作

1、读取文件

img

 

 

 

char * fgets(char *s, int n, FILE *stream);

s:字符型指针,指向存储读入数据的缓冲区的地址

n:从流中读入n-1字符

stream:指向读取的流

 

2、行读取

img

3、写入

img

int fputs(const char *str, FILE *stream);

str:这是一个数组,包含了要写入的以空字符终止的字符序列

stream:指向FILE对象的指针,该FILE对象标识了要被写入字符串的流

 

来源:https://www.cnblogs.com/ljxt/p/11579584.html

 

编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

代码:

#include <stdio.h>

#include <stdlib.h>

#include "head.h"

#define N 1000

#define M 17

void tx(char args[],int j)

{

int i;

char output[N];

printf("%07o",16*j);

j++;

for(i=0;args[i]!='';i++)

{

  if(args[i]==' ')

      output[i]=' ';

  else

      output[i]=args[i];

}

for(i=0;args[i]!='';i=i+4)

{

  printf("       %x%x%x%x",output[i+3],output[i+2],output[i+1],output[i]);

}

printf(" ");

}

void tc(char args[])

{

int i;  

printf("       ");

for(i=0;args[i]!='';i++)

{

  if(args[i]==' ')

              printf("\n");

  else

            printf("%4c",args[i]);

}

printf(" ");

}

int main(char argv[])

{

FILE *fp;

char args[N],name[N],ch;

int i=0;

printf("please input file name:");

scanf("%s",name);

//name=argv;

if((fp=fopen(name,"r"))==NULL)

{

  printf("ERROR!");

  exit(0);

}

while(fgets(args,17,fp))

{

  tx(args,i++);

  tc(args);

}

fclose(fp);

}

静态库和动态库

静态库

动态库

编写Makefile

 

 

运行结果

 

 

在编写makefile时刚开始只有每行行头空格处使用了tab,但在使用makefile时报错为makefile错误2,经过查阅资料,报错2为使用空格报错,将每个需要空格处均改为tab解决了问题。

原文地址:https://www.cnblogs.com/2902480848sy/p/15339657.html