这是作业的一部分。我在作业中无法运行,于是我抽出一小段代码并开始尝试弄清楚问题所在。
在Linux下使用C语言,我正在尝试打开/创建一个文本文件,向其中写入一些内容,然后关闭它,在读/写和追加模式下重新打开它,最后在文件末尾添加任何内容(在这个示例中,为字符串“,dude”)。但是没有添加任何内容,而且写方法也没有抛出错误。我不确定出了什么问题。
以下是代码:
我试图通过尝试不同的组合来排除严格的权限问题,将模式变量更改为S_IRWXU | S_IRWXG | S_IRWXO,在第二个打开语句中传递模式作为第三个参数,仅在第二个打开语句中以追加模式打开文件,将追加模式作为第三个参数传递给第二个打开语句等等。
我所能做到的最好的方法是以RDWR模式打开它,而没有APPEND模式,然后直接覆盖现有文本...但这不是我想要的。请注意,我知道像lseek这样的东西,但这里的目的只是使用追加模式将文本添加到文件末尾。我不想使用lseek。
从这段话中有什么线索吗?我肯定有一些显而易见的东西我不理解。
非常感谢。
在Linux下使用C语言,我正在尝试打开/创建一个文本文件,向其中写入一些内容,然后关闭它,在读/写和追加模式下重新打开它,最后在文件末尾添加任何内容(在这个示例中,为字符串“,dude”)。但是没有添加任何内容,而且写方法也没有抛出错误。我不确定出了什么问题。
以下是代码:
#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,在第二个打开语句中传递模式作为第三个参数,仅在第二个打开语句中以追加模式打开文件,将追加模式作为第三个参数传递给第二个打开语句等等。
我所能做到的最好的方法是以RDWR模式打开它,而没有APPEND模式,然后直接覆盖现有文本...但这不是我想要的。请注意,我知道像lseek这样的东西,但这里的目的只是使用追加模式将文本添加到文件末尾。我不想使用lseek。
从这段话中有什么线索吗?我肯定有一些显而易见的东西我不理解。
非常感谢。