选做作业MyOD
复习c文件处理内容
"r"为读而打开文本文件(不存在则出错)
"w"为写而打开文本文件(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)
"a"为在文件后面添加数据而打开文本文件(若不存在,则新建;反之,在原文件后追加)
"r+"为读和写而打开文本文件(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)
"wb"为写而打开二进制文件
"rb"为读而打开二进制文件
"ab"为在文件后添加数据而打开一个二进制文件
"rb+"为读和写而打开二进制文件,只是再随后的读写中,可以由位置函数设置读和写的起始位置
"w+"首先建立一个新文件,进行写操作,随后可以从头开始读(若文件存在,原内容将全部消失)
"a+"功能与”a”相同;只是在文件尾部添加新的数据后,可以从头开始读
"wb+"功能与"w+”同.只是在随后的读写时,可以由位置函数设置读和写的起始位置
"ab+"功能与”a+”相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置
常见的一些文件操作
1、读取文件
char * fgets(char *s, int n, FILE *stream);
s:字符型指针,指向存储读入数据的缓冲区的地址
n:从流中读入n-1字符
stream:指向读取的流
2、行读取
3、写入
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解决了问题。