日期:2014-05-16  浏览次数:20765 次

LINUX C 关于写文件的问题,文件为何写不进去,郁闷!
C/C++ code

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int openfile(const char * filename)
{
    int fd;
    fd=open(filename,O_RDONLY);
    if(fd==-1) printf("open err:源文件%s不存在:%m\n",filename), exit(-1);
    return fd;
}

int openfile2(const char * filename)
{
    int fd;
    fd=open(filename,O_RDWR|O_CREAT|O_EXCL,0666);
    if(fd==-1) printf("file exist!\n");
    return fd;
}

void save(int fd,int fd2)
{
    char buf[20];
    int n;
    bzero(buf,sizeof(buf));
    while((n=read(fd,buf,20))>0)
    {
        write(fd2,buf,n);
    }
}

int main(int args,char**argv)
{
    int fd;
    int fd2;
    
    fd=openfile(argv[1]);
    fd=openfile2(argv[2]);
    
    save(fd,fd2);
    
    close(fd);
    close(fd2);
    return 0;
}





【程序目标】:写一个程序负责文件拷贝
  main 存在的文件 新的文件名

./main source.dat des.dat //source.dat 我事先写好了
【问题】我写出来的程序,为什么拷贝出来的新文件大小为0,就是新文件里面没数据。
分析:会不会是save函数中里面写错什么了。

望高手指点,感谢!


------解决方案--------------------
int fd;
int fd2;

fd=openfile(argv[1]);
fd=openfile2(argv[2]);


仔细一点, fd用了两次。。