我正在创建一个用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
型
我做错了什么?
2条答案
按热度按时间rqmkfv5c1#
问题是
MyOpen()
中的权限。十进制
777
对应于八进制1411
。权限部分相当于r----x--x
--文件对所有者是只读的,对组和其他人是只执行的。当您尝试在
O_RDWR
模式下再次打开它时,这会失败,因为您没有该文件的写入权限。使用
0777
以八进制指定权限。您可能需要考虑在库中为打开阅读和打开写入设置单独的函数。
m4pnthwp2#
用0777代替777,因为777是十进制的,而前者是八进制的。希望对你有帮助!