C语言 无法打开我刚创建的文件?

hiz5n14c  于 2023-11-16  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在创建一个用C语言处理I/O操作的模块。
MyIo.c

int MyOpen (char* f) {
    int fd = open(f, O_RDWR | O_CREAT, 777);
    return fd;
}

void MyClose (int fd) {
    close(fd);
}

char* MyRead (int fd, char* buf, int len) {
    read(fd, buf, size);
    return buf;
}

void MyWrite (int fd, char* buf, int len) {
    write(fd, buf, size);
}

字符串
MyTest.c

void ReadTest() {
   int fd = MyOpen("./a.txt");
   printf("%d\n", access("./a.txt", F_OK));
   if (fd < 0) printf("Error");
   // More Stuff
}

void WriteTest() {
   int fd = MyOpen("./a.txt");
   // Some Write Suff
   MyClose(fd);
   ReadTest();
}


请注意,在运行代码时,a.txt不存在。
写测试工作正常;它创建了一个. txt文件,并用我在那里写的东西填充它。尽管access说文件存在,但读测试失败。输出是

0
Error


我做错了什么?

rqmkfv5c

rqmkfv5c1#

问题是MyOpen()中的权限。
十进制777对应于八进制1411。权限部分相当于r----x--x--文件对所有者是只读的,对组和其他人是只执行的。
当您尝试在O_RDWR模式下再次打开它时,这会失败,因为您没有该文件的写入权限。
使用0777以八进制指定权限。
您可能需要考虑在库中为打开阅读和打开写入设置单独的函数。

m4pnthwp

m4pnthwp2#

用0777代替777,因为777是十进制的,而前者是八进制的。希望对你有帮助!

相关问题