当前位置:  技术问答>linux和unix

菜鸟求高手指点啊

    来源: 互联网  发布时间:2016-10-08

    本文导语:  编写Linux C 程序,把一个文件的内容复制到另一个文件中,即实现简单的copy 功能。 要求:程序输入的第一个参数是源文件,第二个参数是目标文件。 【源程序】 【运行与测试】 一点头绪都没有 | ...

编写Linux C 程序,把一个文件的内容复制到另一个文件中,即实现简单的copy 功能。
要求:程序输入的第一个参数是源文件,第二个参数是目标文件。
【源程序】
【运行与测试】

一点头绪都没有

|
转自http://hi.baidu.com/ywchen/blog/item/54d23c2d77f14436359bf70d.html
你可以测试一下

/*
   Function:copy file from file1 to file2
   How to execute: ./copyfile file1 file2   (under Linux)
   Data:2007-05-09
*/

#include       /*fprintf(),stderr,BUFSIZ*/
#include      /**/
#include      /*stderror()*/
#include       /*open(),flag*/
#include       /*errno*/
#include      /*ssize_t*/
#include 
#include    /*mode_t*/

#define BUFFER_SIZE 3

int main(int argc,char **argv)
{
   int from_fd,to_fd;
   int bytes_read,bytes_write;
   char buffer[BUFFER_SIZE];
   char *ptr;

   if(argc!=3)
   {
     fprintf(stderr,"Usage:%s fromfile tofilena",argv[0]);
     exit(1);
   }

   /* 打开源文件 */
   if((from_fd=open(argv[1],O_RDONLY))==-1)   /*open file readonly,返回-1表示出错,否则返回文件描述符*/
   {
     fprintf(stderr,"Open %s Error:%sn",argv[1],strerror(errno));
     exit(1);
   }

   /* 创建目的文件 */
   /* 使用了O_CREAT选项-创建文件,open()函数需要第3个参数,
      mode=S_IRUSR|S_IWUSR表示S_IRUSR 用户可以读 S_IWUSR 用户可以写*/
   if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
   {
     fprintf(stderr,"Open %s Error:%sn",argv[2],strerror(errno));
     exit(1);
   }

   /* 以下代码是一个经典的拷贝文件的代码 */
   while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
   {
     /* 一个致命的错误发生了 */
     if((bytes_read==-1)&&(errno!=EINTR))
         break;
     else if(bytes_read>0)
     {
       ptr=buffer;
       while(bytes_write=write(to_fd,ptr,bytes_read))
       {
         /* 一个致命错误发生了 */
         if((bytes_write==-1)&&(errno!=EINTR))
             break;
         /* 写完了所有读的字节 */
         else if(bytes_write==bytes_read)
             break;
         /* 只写了一部分,继续写 */
         else if(bytes_write>0)
         {
           ptr+=bytes_write;
           bytes_read-=bytes_write;
         }
       }
       /* 写的时候发生的致命错误 */
       if(bytes_write==-1)
           break;
     }
   }
   close(from_fd);
   close(to_fd);
   return;
}

    
 
 

您可能感兴趣的文章:

  • 初级菜鸟的简单问题,关于DeviceIoControl,各位高手指点一下吧!
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!! iis7站长之家
  • 菜鸟问软件配置问题,希望各位大虾指点
  • 菜鸟级问题,请指点一下,谢谢了!
  • 一个菜鸟提的问题,请各位大虾指点,急哦!!!
  • 菜鸟求救:在linux下安装jdk失败。初次使用linux,还请各路大虾指点指点,不甚感激!!!
  • 本人菜鸟,请老鸟指点两个问题。
  • 菜鸟问题?请各位指点
  • 菜鸟上路!请大虾指点!请介绍快速上路的方法及各位的经验!谢谢
  • linux菜鸟,求大神指点,linux学的到底是什么?
  • 我——菜鸟一个。有这么一个想法,以前没有做过,请知道的老鸟指点
  • 我即将成为Java菜鸟:现有几个入门级的问题,请已经工作的高手指点
  • 菜鸟刚学jsp,一段代码执行不了,请大侠指点!
  • 【Ubuntu 12.04 LTS】 新人几个菜鸟问题,求指点~ 求
  • 编译socket程序出现的提示,我菜鸟不懂,高手能否指点一下!万分感激!!!
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • jsp入门菜鸟向高手请教
  • #######菜鸟问题,请教高手,一定给分########
  • 菜鸟请教高手!!
  • 菜鸟向sco unix+oracle高手请教
  • 菜鸟头次用linux,请高手帮忙解决几个问题?
  • VMWare下的给虚拟机添加串口的问题?菜鸟请高手解释
  • 求高手解答菜鸟问题!!
  • 高手我想问个超级菜鸟问题LINUX的!!!!!!!!快,啊
  • linux菜鸟,请各位高手指教!!!
  • 一个关于日期的问题!(菜鸟问题,请高手不吝赐教)
  • 菜鸟问题,请高手瞧瞧
  • 菜鸟问题,高手不要怕打字
  • 菜鸟一个 请问高手门监听端口的命令.....
  • 菜鸟问题,请高手帮忙。。。。
  • 一个菜鸟问题,对高手来说很简单,先来先得,快点进来回答吧!!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ----菜菜鸟第三问:-菜鸟菜问:JAVA如何求 根号、开次方? -----
  • 菜鸟问一个关于j2ee的菜鸟问题
  • 怎样从一个菜鸟级的java programer升级到一个菜鸟级的java developer
  • 一个连菜鸟都算不上的菜鸟
  • 菜鸟求问菜鸟问题 ,域名绑定
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!!
  • gcc问题---菜鸟发问之一,老大们帮忙啊!!菜鸟分不多,只好给这点了,对不起!!
  • 菜鸟又来问菜鸟问题了
  • 菜鸟的Linux练习疑问……
  • 菜鸟刚学jsp,还不知道怎么和sql server2000的数据库相连,我已经把odbc配好了,谁能给我一段和数据库相连的并显示所有数据的代码!菜鸟
  • 菜鸟提问,我怎么装redhat7。1
  • 菜鸟写的俄罗斯方块,请多多批评!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 一个菜鸟的请求: 哪位前辈能给晚辈讲讲“匿名类”
  • ※菜鸟送分之一※ Red Hat Linux 的最高版本是多少?
  • 菜鸟问题:在Java中如何接收从键盘输入的字符串?
  • ★菜鸟问:怎么在RED HAT LINUX7.2中用169上网??
  • 菜鸟提问:包是什么概念?
  • 菜鸟问题~~快点进来拿分
  • 菜鸟菜问题1


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3