zoukankan      html  css  js  c++  java
  • UNIXLINUX编程实践教程>第二章>实例代码注解>cp1

    /* cp1.c
     * version 1 of cp - uses read and write with tunable buffer size
     * usage:cp1 src dest
     */
    #include<stdio.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<stdlib.h>
    
    #define BUFFERSIZE 4096
    #define COPYMODE 0644
    
    void oops(char *s1,char *s2);
    
    main(int ac,char *av[])
    {
        int in_fd,out_fd,n_chars;
        char buf[BUFFERSIZE];
    
        if(ac != 3)/*命令的参数不完整*/
        {
            fprintf(stderr,"usage:%s source destination\n",*av);
            exit(1);
        }
    
        if((in_fd=open(av[1],O_RDONLY)) == -1)/*以只读方式打开被复制文件*/
        {
            oops("Cannot open",av[1]);
        }
    
        if((out_fd=creat(av[2],COPYMODE)) == -1)/*创建输出文件*/
        {
            oops("Cannot creat",av[2]);
        }
    
        while((n_chars = read(in_fd,buf,BUFFERSIZE))>0)/*每次从被复制文件中读取一段内容*/
        {
            if(write(out_fd,buf,n_chars) != n_chars)/*向输出文件写这段内容*/
            {
                oops("write error to",av[2]);
            }
        }
        
        if(n_chars == -1)/*从被复制文件中读取内容时发生错误*/
        {
            oops("read error from",av[1]);
        }
    
        if(close(in_fd) == -1 || close(out_fd) == -1)/*关闭被复制文件和输出文件*/
        {
            oops("error closing file","");
        }
    
        printf("cp right\n");
    }
    
    void oops(char *s1,char *s2)
    {
        fprintf(stderr,"error:%s",s1);/*重新定向stderr,使perror作用时,其错误原因为s1的内容*/
        perror(s2);
        exit(1);
    }

    1 fprintf

    格式化输出到一个流/文件中
    头文件 #include<stdio.h>
    函数原型  int fprintf(FILE *stream,char *format,[argument])
    参数    stream 目标流(文件)
          format 信息格式
          [argument] 需要输出的信息
    返回值   -1 遇到错误
          int 输出的字符数

    2 open

    打开一个文件

    头文件 #include<fcntl.h>
    函数原型  int fd = open(char *name,int how)
    参数    name 文件名
          how O_RDONLY,O_WRONLY,O_RDWR
    返回值   -1 遇到错误
          int 文件描述符,用来唯一标识这个连接,可通过文件描述符对文件进行操作

    3 create

    创建/重写一个文件
    头文件    #include<fcntl.h>
    函数原型   int fd = creat(char *filename,mode_t mode)
    参数     filename 文件名
           mode 访问模式、许可位
    返回值    -1 遇到错误
           fd 成功创建,文件描述符

    creat告诉内核创建一个名为filename的文件,如果这个文件不存在,就创建它,如果已存在,就把他的内容清空,把文件的长度设为0

    4 read

    将数据读到缓冲区
    头文件    #include<unistd.h>
    函数原型   ssize_t numread = read(int fd,void *buf,size_t qty)
    参数     fd 文件描述符
           buf 存放数据的目的缓存区
           qty 要读取的字节数
    返回值     -1 遇到错误
           numread 成功读取,返回所读取的字节数目

    5 write

    将内存中的数据写入文件
    头文件    #include<unistd.h>
    函数原型   ssize_t result = write(int fd,void *buf,size_t amt)
    参数     fd 文件描述符
           buf 内存数据
           amt 要写的字节数
    返回值    -1 遇到错误
           num written 成功写入

    6 close

    关闭一个文件
    头文件    #include<unistd.h>
    函数原型   int result = close(int fd)
    参数     fd 文件描述符
    返回值    -1 遇到错误
           0 成功关闭

  • 相关阅读:
    NUnit使用笔记2-GetStarted
    NUnit使用笔记1-下载与安装
    2014年的总结
    2015-02-10
    2015-02-03
    一些书
    SQLServer 安装提示需要重启计算机的解决方案
    ArcSDE
    plsql更改用户登录密码
    Oracle创建表空间和用户
  • 原文地址:https://www.cnblogs.com/cation/p/2812440.html
Copyright © 2011-2022 走看看