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 成功关闭

  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/cation/p/2812440.html
Copyright © 2011-2022 走看看