Segmentation fault怎么解决

wenxiaocheng Linux 下 C 编程——文... 最后由 wenxiaocheng 于2016年11月14日回复

  • 2 回答
  • 2.4k 浏览

跟着老师的视频敲代码,到这个地方的时候,这个问题就出来了,弄了半天,在网上搜了些方法没能解决,求解。。。

12qj7hfdkgt8q.png

  • wenxiaocheng 2016年11月14日 回答 #2楼
  • #1楼  @极客学院_吕布 

    io.h

    #ifndef _IO_H_
    #define _IO_H_
     
    void copy(int fd_in,int fd_out);
    
    #endif
    
    

    io.c

    #include <stdio.h>
    #include <fcntl.h>  
    #include <string.h>
    #include <errno.h>
    #define BUFF_LEN 1024  
    
    void copy(int fd_in,int fd_out)
    {
      char buffer[BUFF_LEN]={""};
      size_t n;   
    
      while(n=read(fd_in,buffer,BUFF_LEN)!=0)  
        {   
          if(n<0)  
          {   
            fprintf(stderr,"读取失败",strerror(errno));
          }else    
          {   
            if(write(fd_out,buffer,n)!=n)   
              {   
                fprintf(stderr,"写入错误",strerror(errno));
              }   
          }   
        }   
    
    

    mycp.c

    #include "io.h"
    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[])
    {
      if(argc<3)
      {
        fprintf(stderr,"参数有误:%sn",argv[0]);
        exit(1);
      }
    
    int fd_in=open(argv[1],O_RDONLY);
      if(fd_in<0)  
      {
        fprintf(stderr,"打开文件错误:%sn",strerror(errno));
        exit(1); 
      }else
      {
        printf("成功打开文件%sn",fd_in);
      }
    
      int fd_out=open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,644);
      if(fd_out<0)
      {
        fprintf(stderr,"写入文件错误%sn",strerror(errno));
        exit(1);
      }else
      {
        printf("成功打开文件%sn",fd_out);
      }
    
      copy(fd_in,fd_out);
      close(fd_in);
      close(fd_out);
      return 0;
    }
    
    
  • 0 评论