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

时间:2022-09-08 09:59:39

以前一直都是用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权限删除掉生成的文件,重新执行正确的程序。