• 04文件与IO


    文件系统调用:

    open、close、create、read、write

    open:

    int open(const char* path, int flags)

    path:要打开的文件的路径

    flags:打开的模式

    执行结果:成功返回文件描述符,失败返回-1。

    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    
    //普通的宏定义写法,多条语句用逗号表达式。
    //#define ERR_EXIT(m) (perror(m), exit(EXIT_FAILURE))
    
    //这种宏定义的写法更为专业,工作中都是用这种
    #define ERR_EXIT(m) 
        do 
        { 
            perror(m); 
            exit(EXIT_FAILURE); 
        } while(0)
    
    int main(void)
    {
        int fd;
        fd = open("test.txt", O_RDONLY);
    /*
        if (fd == -1)
        {
            fprintf(stderr, "open error with errno=%d %s
    ", errno, strerror(errno));
            exit(EXIT_FAILURE);
        }
    */
    /*
        if (fd == -1)
        {
            perror("open error");
            exit(EXIT_FAILURE);
        }
    */
        if (fd == -1)
            ERR_EXIT("open error");
    
        printf("open succ
    ");
        return 0;
    }

     int open(const char *path, int flags,mode_t mode);

    path :文件的名称,可以包含(绝对和相对)路径
    flags:文件打开模式
    mode:  用来规定对该文件的所有者,文件的用户组及系           统中其他用户的访问权限

      打开成功,返回文件描述符;

      打开失败,返回-1

    打开方式

    描述

    O_RDONLY

    打开一个供读取的文件

    O_WRONLY

    打开一个供写入的文件

    O_RDWR

    打开一个可供读写的文件

    O_APPEND

    写入的所有数据将被追加到文件的末尾

    O_CREAT

    打开文件,如果文件不存在则建立文件

    O_EXCL

    如果已经置O_CREAT且文件存在,则强制open()失败

    O_TRUNC

    在open()时,将文件的内容清空

    其中注意打开的文件的权限不是mode而是mode&^umask。

    自己可以用umask命令查看当前的umask值,在程序中也可以用umask()来指定umask的值,例如:umask(0)。

    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    
    
    #define ERR_EXIT(m) 
    	do 
    	{ 
    		perror(m); 
    		exit(EXIT_FAILURE); 
    	} while(0)
    
    int main(void)
    {
    	umask(0);
    	int fd;
    	fd = open("test.txt", O_WRONLY | O_CREAT | O_EXCL, 0666);
    	if (fd == -1)
    		ERR_EXIT("open error");
    
    	printf("open succ
    ");
    	return 0;
    }
    

      权限可以用数字的形式也可以用下面这种,不过数字更直观一点。

    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    
    #define ERR_EXIT(m) 
    	do 
    	{ 
    		perror(m); 
    		exit(EXIT_FAILURE); 
    	} while(0)
    
    int main(void)
    {
    	umask(0);   //在程序中自己指定umask值
    	int fd;
    	fd = open("test2.txt", O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
    	if (fd == -1)
    		ERR_EXIT("open error");
    
    	printf("open succ
    ");
    	close(fd);    //养成好习惯不用了就关闭掉
    	return 0;
    }
    

      

    可以利用按位逻辑加(bitwise-OR)(|)对打开方式的标志值进行组合。

      如打开一个新文件:

      #define NEWFILE (O_WRONLY|O_CREAT|O_TRUNC)

    对访问权限位进行访问所用到的标识符,均可以通过

      #include <sys/stat.h> 访问到,同样可以通过|运算来对访问权限进行组合

      #define MODE755      (S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)

  • 相关阅读:
    Eric 的随机文件名 生成方法
    .NET模板引擎 EFPlatform.CodeGenerator (代码生成器 静态页生成 生成HTML 模板)
    Eric的行政区(省市)下列表控件和标签控件
    下载网页中远程图片的方法
    一起来玩Twister(扭扭乐)
    ASP.NET 安全认证(四)——巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On) .
    DataList的编辑、更新、删除、全选、分页以及 <EditItemTemplate>模版中的DropDownList的数据绑定
    ASP.NET 安全认证(三)—— 用Form 表单认证实现单点登录(Single Sign On) .
    C# 中的委托和事件
    ASP.Net获取当前运行文件的文件名称
  • 原文地址:https://www.cnblogs.com/DamonBlog/p/4358551.html
Copyright © 2020-2023  润新知