繁体   English   中英

使用O_APPEND

[英]Use of O_APPEND

运行此代码时出现错误文件描述符错误

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

void main() { 
  int fd;
  char buff[50];
  char wrt[4]="Fine";
  fd = open("temp.txt",O_APPEND);
  if (fd == -1) {
    perror("agia error");
  } else { 
    int cw = write(fd, wrt,4);
    if (cw == -1) {
      perror("Errori");
    }
    close(fd);
  }
}

尽管给出了答案,甚至有人指出缺少必要的标头(不是全部),但不能保留原样。

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

open(2)的标头缺失。

void main() { 

这应该是int main(void)。

  int fd;
  char buff[50];

未使用的变量。

  char wrt[4]="Fine";

不正确。 “ Fine”的长度为4个字符,这意味着对于正确的nul终止,这需要5个字符的缓冲区。 幸运的是,您不需要将大小指定为char wrt [] =“ Fine”; 会为你做那件事。 除了这里,可能不需要这样的缓冲区,而是想要char * wrt =“ Fine”; 代替。

  fd = open("temp.txt",O_APPEND);

已经提到了错误的标志用法。

  if (fd == -1) {
    perror("agia error");

返回错误,不仅打印出发生了什么。

  } else { 
    int cw = write(fd, wrt,4);

数字4易于出错的重复。如果您有缓冲(可能减1)或不满意,则应使用sizeof。

    if (cw == -1) {
      perror("Errori");
    }
    close(fd);
  }
}

您至少需要选择一种写模式O_WRONLYO_RDWR ,然后添加O_APPEND ,例如O_WRONLY|O_APPEND – Jean-BaptisteYunès

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM