CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

关键字:UNIX C FILE 标准IO

楼主Smallest(常住了)2003-09-02 16:45:23 在 Linux/Unix社区 / 程序开发区 提问

环境:  
  UNIX   C  
  问题:  
  如下CODE能从A.LOG读出第一行并写入B.txt,现在我想逐行读出写入应该怎么办?  
  #include   <string.h>  
  #include   <stdio.h>  
   
  int  
  main(int   argc,char   **argv)  
  {  
  FILE   *p_f1,*p_f2;  
  char   buf[100];  
  p_f1=fopen("./A.LOG","r");  
  p_f2=fopen("./B.txt","w");  
  fgets(buf,100,p_f1);  
  fputs(buf,p_f2);  
  fclose(p_f2);  
  fclose(p_f1);  
  }  
   
  问题点数:50、回复次数:10Top

1 楼wwwunix(木易)回复于 2003-09-02 16:51:29 得分 0

改成:  
  #include   <string.h>  
  #include   <stdio.h>  
   
  int  
  main(int   argc,char   **argv)  
  {  
  FILE   *p_f1,*p_f2;  
  char   buf[100];  
  p_f1=fopen("./A.LOG","r");  
  p_f2=fopen("./B.txt","w");  
  while   (fgets(buf,100,p_f1)!=NULL)  
                  fputs(buf,p_f2);  
  fclose(p_f2);  
  fclose(p_f1);  
  }  
  Top

2 楼mzlau(阿飞)回复于 2003-09-02 16:57:42 得分 0

可以用fseek()和   ftell()来实现.  
  FILE   *p_f1,*p_f2;  
  static   long   pos;  
  char   buf[100];  
   
  p_f1=fopen("./A.LOG","r");  
  p_f2=fopen("./B.txt","w");  
  fseek   (p_f1,   pos,   SEEK_SET);  
  while   (fgets(buf,100,p_f1))  
  {  
  fputs(buf,p_f2);  
  pos   =   ftell   (p_f1);  
  }  
  fclose(p_f2);  
  fclose(p_f1);  
  Top

3 楼mzlau(阿飞)回复于 2003-09-02 16:58:56 得分 5

Sorry,   a   mistake.  
  可以用fseek()和   ftell()来实现.  
  FILE   *p_f1,*p_f2;  
  static   long   pos;  
  char   buf[100];  
   
  p_f1=fopen("./A.LOG","r");  
  p_f2=fopen("./B.txt","w");  
  fseek   (p_f1,   pos,   SEEK_SET);  
  while   (fgets(buf,100,p_f1))  
  {  
  fputs(buf,p_f2);  
  pos   =   ftell   (p_f1);  
                    fseek   (p_f1,   pos,   SEEK_SET);  
  }  
  fclose(p_f2);  
  fclose(p_f1);  
  Top

4 楼Smallest(常住了)回复于 2003-09-02 17:05:02 得分 0

THANKS!  
  能帮我解释一下中间的那两句代码吗?  
  我不大理解  
  while   (fgets(buf,100,p_f1)!=NULL)  
                  fputs(buf,p_f2);  
  Top

5 楼Smallest(常住了)回复于 2003-09-02 17:07:02 得分 0

还有fseek()和   ftell()我用的不大熟,阿飞解释一下先Top

6 楼Smallest(常住了)回复于 2003-09-02 17:09:46 得分 0

空格是不是NULL?  
  EOF是不是NULL?Top

7 楼wwwunix(木易)回复于 2003-09-02 17:43:20 得分 20

fgets():若成功则返回buf,若已处于文件尾端或出错则为NULL。  
  这两句就是没到p_f1的文件末尾就将读出的内容写入p_f2。Top

8 楼Smallest(常住了)回复于 2003-09-02 19:45:17 得分 0

好的,虽然没有解决我上面的两个问题,还是很感谢  
  明天结贴Top

9 楼snelgar(晓枫)回复于 2003-09-03 02:05:56 得分 25

int   fseek(FILE   *stream,long   offset,int   whence);    
  在流上重新定位文件结构的位置。fseek设置与流stream相联系的文件指针到新的位置,新位置与whence给定的文件位置的距离为offset字节。  
  whence的取值必须是0,1或2中的一个,分别代表在stdio.h中定义的三个符号常量:  
  0是SEEK_SET,是文件开始位置;  
  1是SEEK_CUR,是当前的指针位置;  
  2时SEEK_END,是文件末尾。  
  调用了fseek之后,在更新的文件位置上,下一个操作可以是输入;也可以是输出。成功地移动了指针时,fseek返回0;出错或失败时返回非0值。  
   
  long   int   ftell(FILE   *stream);  
  返回流stream中当前文件指针位置。偏移量是文件开始算起的字节数。出错时返回-1L,是长整数的-1值。    
   
  #include   <string.h>  
  #include   <stdio.h>  
   
  int   main(int   argc,char   **argv){  
        FILE   *p_f1,*p_f2;  
        static   long   pos;  
        int   rc=0;  
        char   buf[100];  
   
        p_f1=fopen("./A.LOG","r");  
        if(p_f1==NULL)  
        {  
              printf("can't   open   f1");  
              return   -1;  
        }  
        p_f2=fopen("./B.txt","w");  
        if(p_f2==NULL)  
        {   printf("can't   open   f2");  
            return   -3;  
        }  
   
      if(fseek(p_f1,   pos,   SEEK_SET)!=0){//置文件指针于文件首  
          printf("fseek   error!");  
            return   -2;  
      }  
        while   (fgets(buf,100,p_f1)!=NULL)  
        {  
  fputs(buf,p_f2);  
  pos   =   ftell(p_f1);           //获得当前指针距文件首的偏移量    
                    fseek(p_f1,   pos,   SEEK_SET);//置当前指针  
          }  
   
          fclose(p_f2);  
          fclose(p_f1);  
          return   0;  
  }Top

10 楼Smallest(常住了)回复于 2003-09-03 10:12:37 得分 0

THANKS!Top

相关问题

  • C#的关键字
  • C/C++中static关键字的使用
  • c++ builder5关键字扩展的意义
  • 解释一下?关键字 oracle,java ,C#
  • system是标准C++的关键字吗?
  • C#中new关键字得用法
  • 请教:关键字const的含义,用法(c中)
  • C++关于多态和访问限定关键字的问题。
  • 请教C++中关于operator关键字的问题!
  • 使用c++中的“asm”关键字?有个疑问

关键词

  • 文件
  • 指针
  • null
  • fseek
  • ftell
  • fclose
  • fopen
  • buf
  • fgets
  • fputs

得分解答快速导航

  • 帖主:Smallest
  • mzlau
  • wwwunix
  • snelgar

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo