linux编程的一个小练习,j基本文件I/O的操作;
问题:从src.txt中读出数据 ,清除每末尾的*,整理后写入到dst.txt中
必须用read,write去实现,写成小函数,可以读取一行以\n为标识符
原数据:
123**45*****
78****
整理后的数据:
123**45
78
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
/*prototype*/
int get_a_line(int fd,char *buf);/*get a line*/
void process_star(char *buf);/*process star*/
void write_a_line(int fd,char *buf);/*write a line*/
int main()
{
int fd_read =0;
int fd_write=0;
char buf[1024]={0};
fd_read = open("src.txt",O_RDONLY);
fd_write = open("dst.txt",
O_CREAT|O_WRONLY|O_TRUNC,0777);
while(1)
{
memset(buf,0,sizeof(buf));
int ret = get_a_line(fd_read,buf);
if(ret == 0)
{
break;
}
process_star(buf);
write_a_line(fd_write,buf);
}
}
int get_a_line(int fd,char *buf)
{
int ret = 0;
char *p = buf;
while(1)
{
ret = read(fd,p,1);
if(ret ==0)
{
return 0;
}
if(*p == '\n')
{
break;
}
p++;
}
return 1;
}
void process_star(char *buf)
{
if(strlen(buf)==1)
{
return;
}
if(strlen(buf)==2)
{
if(buf[0]=='*')
{
buf[0]='\n';
buf[1]='\0';
}
}
char *p = buf+strlen(buf)-2;
while(1)
{
if(*p =='*')
{
*p='\0';
p--;
}
else if(*p!='*')
{
p++;
*p='\n';
break;
}
}
}
void write_a_line(int fd,char *buf)
{ int ret = 0;
ret = write(fd,buf,strlen(buf));
}
操作结束都可以用GDB进行调试;
打断点:b 文件.c:行号/函数名字
运行:r + 动态传参
查看代码:l
查看变量:p + 某个变量值
按行号走:n
按执行指令走:s
退出:q