c-fopen在main中工作,但在另一个文件中的函数中不工作



我正在尝试使用fopen打开一个.bdf字体文件。当在main((中调用时,这可以很好地工作,但是当我尝试在另一个文件中的函数中加载字体时,我会收到一条Permission Denied消息,错误号为13。

我正在使用makefile编译它,并在树莓派上运行它,使用:

./sudo clock

这是的两个文件

main.cc

#include <stdio.h>
#include <errno.h>
#include "clock.h"
int main(int argc, char *argv[]) {
const char *path = "/home/pi/rpi-rgb-led-matrix/clock/fonts/6x12.bdf";
FILE *f = fopen(path, "r");
if (f == NULL) {
perror(path);
fprintf(stderr, "Failed load %d <-- Mainn", errno);
} else {
fprintf(stderr, "Font load succeeded <-- Mainn");
}

// Set up Clock Face
initialiseClockFace();
return 0;
}

clock.h

#include <stdio.h>
#include <errno.h>
void initialiseClockFace();

时钟.cc

#include "clock.h"
void initialiseClockFace() {
const char *path = "/home/pi/rpi-rgb-led-matrix/clock/fonts/6x12.bdf";
FILE *f = fopen(path, "r");
if (f == NULL) {
perror(path);
fprintf(stderr, "Failed load %d <-- Clockn", errno);
} else {
fprintf(stderr, "Font load succeeded <-- Clockn");
}
}

运行时,它会打印以下内容:

Font load succeeded <-- Main
/home/pi/rpi-rgb-led-matrix/clock/fonts/6x12.bdf: Permission denied
Failed load 13 <-- Clock

正在查看https://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html,除非我弄错了,否则错误号13是:

[EROFS]
The named file resides on a read-only file system and mode requires write access.

我试着在stackoverflow和谷歌上搜索我的问题,但似乎找不到任何答案。非常感谢您的帮助。

可能是因为main中的fopen调用而锁定了文件。一般来说,我建议避免使用C函数。您应该使用std::fstream,因为它会自动释放您的句柄。

在初始化ClockFace之前,请检查它是否能与fclose调用一起工作。

我已经解决了这个问题,我调用了一个类中的另一个函数,该函数没有正确关闭它的fopen。

谢谢你花时间帮忙。

最新更新