这是家庭作业的一部分。好吧,我无法让我的作业中的东西正常工作,所以我拿出一个片段并开始玩弄它以找出问题所在。
在 C 语言的 linux 上,我试图打开/创建一个文本文件,向其中写入内容,关闭它,以读/写和附加模式打开它,然后将任何内容附加到它的末尾(在本例中,字符串“,伙计”)。但是,没有附加任何内容,但是 write 方法也没有引发错误。我不确定发生了什么。
这是代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#define BUFFSIZE 4096
int main(){
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
int fd = open("tempfile.txt", O_RDWR | O_CREAT, mode);
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
printf("Error in write\n");
printf("%s", strerror(errno));
return 1;
}
close(fd);
int fd2 = open("tempfile.txt", O_RDWR | O_APPEND);
printf("appending dude:\n");
char buf2[6] = {',', ' ', 'd', 'u', 'd', 'e'};
size_t p = sizeof(buf2);
if(write (fd2, buf2, p) < 0){
printf("Error in write\n");
printf("%s", strerror(errno));
return 1;
}
char buf3[BUFFSIZE];
lseek(fd2, 0, SEEK_SET);
if(read (fd2, buf3, BUFFSIZE) < 0){
printf("Error in read\n");
printf("%s", strerror(errno));
return 2;
}
int i;
for (i = 0; i < strlen(buf3); ++i){
printf("%c", buf3[i]);
}
printf("\n");
close(fd2);
return 0;
}
我试图通过弄乱一些不同的组合,将模式变量更改为 S_IRWXU | 来消除严格意义上的权限问题的可能性。S_IRWXG | S_IRWXO,在我的第二个 open 语句中将模式作为第三个参数传递,仅在第二个 open 语句中以附加模式打开文件,在第二个 open 语句中将附加模式作为第三个参数传递,等等。
我能做的最好的就是在没有 APPEND 模式的情况下在 RDWR 中打开它,然后直接覆盖现有文本......但这不是我想要的。请注意,我知道 lseek 之类的东西,但这里的目的是严格使用附加模式将文本添加到文件末尾。我不想寻求。
看看这个有什么线索吗?我敢肯定有一些明显的东西我就是不明白。
非常感谢。