基本文件I/O

来源:互联网 发布:php权限管理源代码 编辑:程序博客网 时间:2024/06/04 23:29

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

原创粉丝点击