C语言文件操作函数open、write用法速记

来源:互联网 发布:unity3d室内灯光开关 编辑:程序博客网 时间:2024/05/20 20:05

以前一直都是用fopen、fwrite等高级函数写文件,这次尝试用open、write、close操作文件。代码如下:


      int ret = OB_SUCCESS;      int fd = open(config_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU  | S_IRWXG | S_IRWXO);      static const int64_t buf_len = 512;      int64_t pos = 0;      char buf[buf_len];      ssize_t size = 0;      const char * config_file = "my.conf";      if (0 >= fd)      {        TBSYS_LOG(WARN, "fail to create temp config file %s. msg=%s", config_file, strerror(errno));        ret = OB_ERROR;      }      else      {        TBSYS_LOG(WARN, "fd=%d", fd);        if (OB_SUCCESS == ret)        {          pos = 0;          databuff_printf(buf, buf_len, pos, "[%s]\n", OBMS_RS_SECTION);          OB_ASSERT(pos < buf_len);          size = write(fd, buf, pos);          if (size <= 0)          {            TBSYS_LOG(WARN, "fail %s", strerror(errno));            ret = OB_ERROR;          }        }close(fd);      }

重点:

 open(config_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU  | S_IRWXG | S_IRWXO);

表示创建文件,用于写入。如果文件已经存在,则先将文件原有内容清空再写。重点是后面S_IRWXU | S_IRWXG | S_IRWXO这个参数,这里它表示所有人都拥有对生成文件的读写执行权限。这个一般来说不会有什么问题。可能遇到的问题是:

第一次学习写open,参数可能不能一次搞对,比如,没有带第三个参数,那么生成的文件权限也会不对,于是后继再执行这个程序,就会有Permission Deny,无法覆盖掉先前生成的文件。解决方法是手动用sudo权限删除掉生成的文件,重新执行正确的程序。




原创粉丝点击