Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523770
  • 博文数量: 118
  • 博客积分: 10028
  • 博客等级: 上将
  • 技术积分: 1820
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 18:46
文章分类

全部博文(118)

文章存档

2009年(12)

2008年(106)

我的朋友

分类: C/C++

2008-04-02 15:46:12



基本的判断功能实现了, CP到文件,CP到目录等...... 还有问题的话还没想到~~~呵呵...
先就这么了...


/*
 *    By name fcp.c
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <libgen.h>

#define MAXSIZE 1024

int main(int argc,char **argv)
{
    int fnew,fold;
    char buf[MAXSIZE],*tmp;
    int readnum,writenum;
    int s;
    struct stat fstat,newstat;
    if(argc!=3)
    {
        printf("Usage:./fcp oldfile newfile \n");
        exit(-1);
    }

    if(stat(argv[1],&fstat)==-1)
    { /* 获取文件信息 */
        perror("Stat error");
        exit(-1);
    }

    stat(argv[2],&newstat);
    if(S_ISDIR(newstat.st_mode))
    { /* 如果目的文件是一个目录,则在目录后添加文件名 */
        strcat(argv[2],basename(argv[1]));
    }
    
    else if((s=access(argv[2],F_OK))==0)
    { /* 目的文件是否已存在 */
        printf("File %s existed . \n",argv[2]);
        exit(-1);
    }

    else if(!S_ISREG(fstat.st_mode))
    { /* 源文件是否是普通文件 */
        printf("%s is not a common file! \n",argv[1]);
        exit(-1);
    }

    if((fold=open(argv[1],O_RDONLY))==-1)
    { /* 打开源文件 */
        perror("Open 1 error");
        exit(-1);
    }

    if((fnew=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
    { /* 创建目的文件 */
        perror("Open 2 error");
        exit(-1);
    }

    while(readnum=read(fold,buf,MAXSIZE))
    {
        /* 开始COPY */
        if((readnum==-1)&&(errno!=EINTR)) break;
        else if(readnum>0)
        {
            tmp=buf;
            while(writenum=write(fnew,tmp,readnum))
            {
                
                if((writenum==-1)&&(errno!=EINTR))break;
                /* 写完了所有读的字节 */
                else if(writenum==readnum) break;
                /* 只写了一部分,继续写 */
                else if(writenum>0)
                {
                    tmp+=writenum;
                    readnum-=writenum;
                }
            }
            
            if(writenum==-1)break;
        }
    }

    close(fnew);

    close(fold);

}

阅读(910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~