使用O_APPEND

时间:2016-02-23 17:22:36

标签: c linux

运行此代码时,我收到错误的文件描述符错误

#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);
  }
}

2 个答案:

答案 0 :(得分:0)

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

#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";

不正确的。 “精细”是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)或strlen,它应该使用sizeof。

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

答案 1 :(得分:0)

您至少需要选择书写模式O_WRONLYO_RDWR,然后添加O_APPEND,例如O_WRONLY|O_APPEND。 - Jean-BaptisteYuès