【问题标题】:Raspberry PI 2 - How to get file-access for c-program to write on discRaspberry PI 2 - 如何获取 c 程序的文件访问权限以在磁盘上写入
【发布时间】:2015-07-08 12:04:32
【问题描述】:

我在 RPI2 上使用 Raspbian,我尝试从 C 程序创建/更改 SQLite 数据库。

这里有一点代码:

static sqlite3 *db;
static char *zErrMsg    = 0;
//....
sqlite3_open(PATH_DATABASE, &db);
char *sql_statement = "CREATE TABLE IF NOT EXISTS myTable (datetime BIGINT, myVal BIGINT)";
sqlite3_exec(db,sql_statement, NULL, NULL, &zErrMsg);

sqlite3_close(db);

作为 IDE,我使用 Eclipse CDT。

在 Eclipse 调试模式下并通过双击执行程序(在“sudo startx”模式下),raspbian 为我创建了一个数据库文件。

如果我通过终端启动程序 (sudo /home/pi/test/myProgram) 无法创建数据库文件。

文件夹“test”和可执行文件“myProgram”都具有 chmod 755 访问权限。 我搜索了很多,没有找到任何对我有帮助的东西。

【问题讨论】:

  • 为什么要以 root 身份执行程序(使用 sudo)?
  • sqlite3_open 返回错误代码。检查它是什么。
  • 您可以尝试在strace 下运行二进制文件并向我们展示输出吗?
  • 我为我的具体问题找到了解决方案。如果我使用“cd /home/pi/test”并在“./myProgram”之后它工作(没有sudo)。如果我尝试从“sudo /home/pi/test/myProgram”开始,它仍然无法正常工作。现在我想知道为什么。我认为有一些许可/访问原因。也许你们中的一个人比我聪明,可以解释一下。
  • 如果您使用“sudo”,程序可能在不同的目录中运行。或者可能是某些东西阻止了 sqlite3 在以 root 身份运行时打开文件。如上所述,您可能可以通过strace 了解更多信息。

标签: c eclipse sqlite file


【解决方案1】:

每个sqlite3 函数都会返回一个错误代码。 每次调用后,检查错误代码是否为SQLITE_OK。如果不是,则函数失败,您需要处理错误。

您可以调用sqlite3_errstr将错误代码转换为字符串。

有关 sqlite3 中的错误处理的更多信息,请参阅https://www.sqlite.org/c3ref/errcode.html

【讨论】:

  • ErrStr:" 无法打开数据库" ...嗯...我有一个适合我的解决方案。如果我使用“cd /home/pi/test”并在“./myProgram”之后它工作(没有sudo)。如果我尝试从“sudo /home/pi/test/myProgram”开始,它仍然无法正常工作。现在我想知道为什么。我认为有一些许可/访问原因。也许你们中的一个人比我聪明,可以解释一下。
猜你喜欢
  • 2014-05-30
  • 2023-03-20
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2013-07-15
  • 2020-06-01
  • 2012-06-27
相关资源
最近更新 更多