首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fopen vs ofstream

fopen vs ofstream
EN

Stack Overflow用户
提问于 2011-09-02 20:43:27
回答 1查看 2.1K关注 0票数 1

我有一个奇怪的问题,我想我有一个解决办法,但我正在尝试做一个根本原因分析。

我一直在开发一个在嵌入式版本的Ubuntu10.04LTS上运行的应用程序。当应用程序启动时,它从SD卡读取一个配置文件,初始化一些类,启动一个写入SD卡的记录器,然后继续它的操作。在开发过程中,当我通过SSH终端手动启动它时,它运行得很好。

我最近一直在尝试让应用程序在操作系统启动时自动启动。我在init.d中有一个脚本可以做到这一点。但是,我注意到现在没有生成日志文件。我想这不是SD卡不可用的问题,因为配置文件在启动时被正确读取,但当我尝试使用fopen打开日志文件进行写入时抛出一个错误。

代码语言:javascript
复制
// Open the file
mLogFile = fopen(filename, "wb");
if(mLogFile == NULL)
{
    printf("Error opening Log File [%d].\n", lnRetval);
    return -1; //File couldn't be opened
}

我认为这只是一个权限问题,但我不明白为什么当我自动启动软件时它不工作,而不是在终端中手动运行它。此外,我不能理解为什么配置文件可以正确读取,但这个文件却无法打开。

我能看到的唯一区别是,配置文件读取是使用fstream完成的,而记录器使用的是C文件I/O。因此,我尝试将以下代码直接放在上面的fopen调用之前(/home/root/etc是SD卡的挂载位置)。

代码语言:javascript
复制
std::ofstream out("/home/root/etc/log/testlog.log");
out << "I can write using fstreams.\n";
out.close();

当通过init.d启动时,它可以工作并生成文件。现在我完全被难住了。为什么ofstream可以工作而不能fopen?我是不是从根本上遗漏了什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-02 21:22:48

您的问题没有提供足够的信息来回答,但解决此类问题的一般方法应该是在strace下运行程序(两种形式),并比较所执行的syscall的顺序。这应该会很快揭示出发生了什么不同的事情。我怀疑你会发现filename的内容是无效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7283564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档