标签:fp grep zip int cat char return buf readlen
文章目录
代码都比较简短,都是大致原理的实现,不再写注释。
linux cat实现
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
char *buf = malloc(sizeof(char)*1025);
size_t nread;
ssize_t readlen;
FILE *fp = stdin;
int i = 1;
if(argc==1)
{
while((readlen=getline(&buf,&nread,fp))>0)
{
buf[readlen] = 0;
printf("%s",buf);
}
return 0;
}
for(;i<argc;i++)
{
fp = fopen(argv[i],"rb");
if(fp == NULL)
{
printf("wcat: cannot open file\n");
return 1;
}
while((readlen=getline(&buf,&nread,fp))>0)
{
buf[readlen] = 0;
printf("%s",buf);
}
fclose(fp);
}
return 0;
}
linux grep实现
这个也是比较简单,没有正则,只是简单地匹配,每行查找一个子串而已。
// 同理,输入有两种形式,stdin和文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
char *buf = malloc(sizeof(char)*1025*64);
size_t nread;
ssize_t readlen;
FILE *fp = stdin;
int i = 2;
if(argc==1)
{
printf("wgrep: searchterm [file ...]\n");
return 1;
}
if(argc==2)
{
while((readlen=getline(&buf,&nread,fp))>0)
{
buf[readlen] = 0;
if(strstr(buf,argv[1]))
printf("%s",buf);
}
return 0;
}
for(;i<argc;i++)
{
fp = fopen(argv[i],"rb");
if(fp == NULL)
{
printf("wgrep: cannot open file\n");
return 1;
}
while((readlen=getline(&buf,&nread,fp))>0)
{
buf[readlen] = 0;
if(strstr(buf,argv[1]))
printf("%s",buf);
}
fclose(fp);
}
return 0;
}
linux zip实现
有点像刷题,几个例子,盲打,几个组合拳下来才能全部通过。
//这个的规则就是aaaabcc -> 4ab2c
#include <stdio.h>
#include <stdlib.h>
void diwrite(int n,char c)
{
fwrite(&n,4,1,stdout);
fwrite(&c,1,1,stdout);
}
int main(int argc,char *argv[])
{
char lastc = 0;
char curc;
int nread;
int count = 0;
FILE *fp = stdin;
int i = 1;
if(argc==1)
{
printf("wzip: file1 [file2 ...]\n");
return 1;
}
for(;i<argc;i++)
{
fp = fopen(argv[i],"rb");
if(fp == NULL)
{
printf("wzip: cannot open file\n");
return 1;
}
while((nread = fread(&curc,1,1,fp))==1)
{
if(curc==lastc)
{
count++;
continue;
}
if(count!=0)
diwrite(count,lastc);
count = 1;
lastc = curc;
}
fclose(fp);
}
diwrite(count,lastc);
return 0;
}
本文同步发布于orzlinux.cn
标签:fp,grep,zip,int,cat,char,return,buf,readlen 来源: https://blog.csdn.net/qq_36704378/article/details/120571253
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。