运行此代码时,我收到错误的文件描述符错误
#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);
}
}
答案 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_WRONLY
或O_RDWR
,然后添加O_APPEND
,例如O_WRONLY|O_APPEND
。 - Jean-BaptisteYuès