day 21 (重点程序 )

先整理程序

文件拷贝

1.fgetc/fputc

  1 #include
  2 int main(void)
  3 {
  4     FILE *fsrc = NULL;
  5     FILE *fdst = NULL;
  6     char ch = 0;
  7     fsrc = fopen("src.txt","r");
  8     if(NULL == fsrc)
  9     {
 10         perror("fail to fopen");
 11         return -1;
 12     }
 13     fdst = fopen("dst.txt","w");
 14     if(NULL == fdst)
 15     {
 16         perror("fail to fopen");
 17         return -1;
 18     }
 19     while(1)
 20     {
 21         ch = fgetc(fsrc);         //一个一个拷贝过去 fgetc / fputc                               
 22         if(EOF == ch)
 23         {
 24             break;
 25         }
 26         fputc(ch,fdst);
 27     }
 28     fclose(fsrc);
 29     fclose(fdst);
 30 
 31     return 0;
 32 }   

2.fgets/fputs

  1 #include
  2 
  3 int main(void)
  4 {
  5     FILE *a = NULL;
  6     FILE *b = NULL;
  7     char c[4096]={0};
  8     char *d=NULL;
  9     a = fopen("src.txt","r");
 10     if(NULL == a)
 11     {
 12         perror("fail to fopen");
 13         return -1;
 14     }
 15     b = fopen("dst.txt","w");
 16     if(NULL == b)
 17     {
 18         perror("fail to fopen");
 19         return -1;
 20     }
 21     while(1)
 22     {
 23         d = fgets(c,sizeof(c),a); //一行一行的拷贝 fgets /fputs                                  
 24         if(NULL == d)
 25         {
 26             break;
 27         }
 28         fputs(c,b);
 29     }
 30 
 31     fclose(a);fclose(b);
 32 
 33 
 34     return 0;
 35 }
~               

3.fread / fwrite

  1 #include
  2 
  3 int main(void)
  4 {
  5     size_t d =0;
  6     FILE *a=NULL;
  7     FILE *b=NULL;
  8     char c[1500000] = {0};
  9     a = fopen("src.jpg","r");
 10     if(NULL == a)
 11     {
 12         perror("fail to fopen");
 13         return -1;
 14     }
 15     b = fopen("dst.jpg","w");
 16     if(NULL == b)
 17     {
 18         perror("fail to fopen");
 19         return -1;
 20     }
 21     //两种写法 
 22 /*  fread(c,sizeof(c),1,a);   //返回值不同 第一种 
 23                                 //  要么返回 0  要么返回1  即成功或者失败
 24 */
 25     while(1)
 26     {
 27         d = fread(c,1,sizeof(c),a); //有多大返回多大
 28         if(0 == d)
 29         {
 30             break;
 31         }
 32         fwrite(c,1,d,b);
 33     }
 34     fclose(a);fclose(b);
 35 
 36     return 0;
 37 }       

4. read /write

 1 #include "head.h"                                                                                
  2 /*
  3 int main(void)
  4 {   
  5     ssize_t nret = 0;
  6     int b =0;
  7     int a =0;
  8     char c[200000]={0};
  9     a = open("a.jpg",O_RDONLY);
 10     if(-1==a)
 11     {
 12         perror("fail to open");
 13         return -1;  
 14     }
 15     b=open("b.jpg",O_WRONLY | O_CREAT | O_TRUNC,0664);
 16     if(-1==b)
 17     {
 18         perror("fail to open");
 19         return -1;  
 20     }
 21     while(1)
 22     {
 23         nret = read(a,c,sizeof(c));
 24         if(0 == nret)
 25         {
 26              break;
 27         }
 28     }
 29     write(b,c,sizeof(c));
 30     close(a);close(b);
 31     return 0;
 32 }
 33 */
 34 int main(int argc,const char *argv[])
 35 {
 36     ssize_t nret = 0;   
 37     int b =0;
 38     int a =0;
 39     char c[4096]={0};
 40     if(argc !=3)
 41     {   
 42         fprintf(stderr,"Usage:./a.out afilename bname\n");
 43         return -1;
 44     }
 45     a = open(argv[1],O_RDONLY);
 46     if(-1==a)
 47     {
 48         perror("fail to open");
 49         return -1;
 50     }
 51     b=open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664);
 52     if(-1==b)
 53     {
 54         perror("fail to open");
 55         return -1;
 56     }
 57     while(1)
 58     {
 59         nret = read(a,c,sizeof(c));
 60         if(nret<=0)
 61         {
 62              break;
 63         }
 64         write(b,c,nret);
 65     }
 66     close(a);
 67     close(b);
 68     return 0;
 69 }

目录遍历 

1.递归遍历

  1 #include "head.h"                                                                                
  2 //递归遍历:
  3 int ListDir(const char*pdirname)
  4 {
  5     DIR *dp =NULL;
  6     struct dirent *pp =NULL;
  7     char c[4096]={0};
  8     dp = opendir(pdirname);
  9     if(NULL==dp)
 10     {
 11         perror("fail to open");
 12         return -1;
 13     }
 14     while(1)
 15     {
 16         pp=readdir(dp);
 17         if(NULL==pp)
 18         {
 19             break;
 20         }
 21         if('.'==pp->d_name[0]) //隐藏文件 以点开头的文件叫做隐藏文件
 22         {
 23             continue;   //跳过循环
 24         }
 25         sprintf(c,"%s/%s",pdirname,pp->d_name);  //拼接 
 26         printf("%s\n",c);
 27         if(pp->d_type == DT_DIR)
 28         {
 29             ListDir(c);
 30         }
 31     }
 32     closedir(dp);
 33     return 0;
 34 }
 35 int main(int argc,const char *argv[])
 36 {
 37     if(argc!=2)
 38     {
 39         fprintf(stderr,"Usage:./a.out dirname\n");
 40         return -1;
 41     }
 42     ListDir(argv[1]);
 43     return 0;
 44 }             

2.单层目录遍历

  1 #include "head.h"
  2 
  3 int main(void)
  4 {
  5     DIR *dp = NULL;
  6     struct dirent *pp = NULL;
  7 
  8     dp = opendir("dir1");                                                                        
  9     if (NULL == dp)
 10     {
 11         perror("fail to opendir");
 12         return -1;
 13     }
 14 
 15     while (1)
 16     {
 17         pp = readdir(dp);
 18         if (NULL == pp)
 19         {
 20             break;
 21         }
 22 
 23         if ('.' == *pp->d_name)
 24         {
 25             continue;
 26         }
 27 
 28         printf("%s/%s\n", "dir", pp->d_name);
 29     }
 30 
 31     closedir(dp);
 32 
 33     return 0;
 34 }
 35 

    主函数 传参
    文件IO:
    1. lseek
       off_t lseek(int fd, off_t offset, int whence);
       功能:
            重新设定文件描述符的偏移量
       参数:
            fd:文件描述符
            offset:偏移量
            whence:
                SEEK_SET    文件开头
                SEEK_CUR    文件当前位置
                SEEK_END    文件末尾
       返回值:
            成功返回当前偏移量
            失败返回-1 

目录IO:
    1.mkdir 
      int mkdir(const char *pathname, mode_t mode);
      功能:
        创建目录文件
      参数:
        pathname:文件路径
        mode:文件的权限
      返回值:
        成功返回0 
        失败返回-1 

        rwx rwx rwx
        111 111 111
        0777

        r: 目录中是否能够查看文件
        w: 目录中是否能够新建文件
        x: 目录是否能够进入
    
    2.rmdir
      int rmdir(const char *pathname);
      功能:
        删除空目录文件
      返回值:
        成功返回0 
        失败返回-1 

    3.opendir
      DIR *opendir(const char *name);
      功能:
        打开目录获得目录流指针
      参数:
        name:目录文件路径
      返回值:
        成功返回目录流指针
        失败返回NULL
      
    4.closedir
      int closedir(DIR *dirp);
      功能:
        关闭目录流指针

    5.readdir
      struct dirent *readdir(DIR *dirp);
      功能:
        从目录流中读取下一个目录项的结构体信息
      参数:
        dirp:目录流指针
      返回值:
        成功返回包含目录项信息的空间首地址
        失败返回NULL
        读到文件末尾返回NULL

        struct dirent {
            ino_t          d_ino;       /* Inode number */
            off_t          d_off;       /* Not an offset; see below */
            unsigned short d_reclen;    /* Length of this record */
            unsigned char  d_type;      /* Type of file; not supported
                                            by all filesystem types */
            char           d_name[256]; /* Null-terminated filename */
        };

    6.chdir 
      int chdir(const char *path);
      功能:
        切换当前代码的工作路径

    7.getcwd
      char *getcwd(char *buf, size_t size);
      功能:
        获得当前目录的绝对路径
        8.access 
      int access(const char *pathname, int mode);
      功能:
        检测调用函数的程序对文件是否拥有指定权限
      参数:
        pathname:文件路径
        mode:
            R_OK    检测是否拥有读权限
            W_OK    检测是否拥有写权限
            X_OK    检测是否拥有执行权限
            F_OK    检测文件是否存在
      返回值:
        有该权限返回0
        出错返回-1 
        
    sprintf 
    功能:把格式化的数据写入某个字符串  
    
    int sprintf( char *buffer, const char *format, [ argument] … );

    
    buffer:char型指针,指向欲写入的字符串地址。
  format:char型指针,指向的内存里面存放了格式字符串。
  [argument]…:可选参数,可以是任何类型的数据。
  返回值:字符串长度(strlen)
 

你可能感兴趣的:(linux,服务器,算法)