【问题标题】:Android native system call hang [C]Android原生系统调用挂起[C]
【发布时间】:2015-09-18 11:43:34
【问题描述】:

我正在为 Android Gingerbread 编写一个中间件应用程序。

在我的代码中,有一行,

printf("--Executing command\n");
if (system ("rm -f /tmp/dump.txt")){}
printf("file deletion successful\n");

我得到打印直到行,--Executing command,然后它挂起。

当我执行ps 时,我可以看到sh -c rm -f /tmp/dump.txt。过程还在。为什么我的代码没有通过system 调用或为什么系统调用挂起,如ps 所示?

如果有权限问题,我会得到一个错误。

编辑

调用if (system ("rm -f /tmp/dump.txt")){} 实际上是在删除文件,正如我通过ls /tmp/ 验证的那样,文件已被删除,但随后它没有出现。挂了。

编辑

在搜索更多内容时,我找到了this。会不会有类似的问题?我正在使用 Android Gingerbread,它太旧了。

【问题讨论】:

  • 所以您的问题是“为什么我没有向您展示的代码不起作用,而我拥有向您展示的代码却可以?”。这不是特别容易回答。您发布的代码与显示意外行为的代码之间有什么不同
  • @EOF :是的,这让事情变得更加混乱。让我编辑问题。
  • 您是否尝试unlink() 文件?或者有什么特定的理由为此调用 shell?
  • @EOF, rm 也不会删除文件,就您正在使用的“删除”而言。事实上,它所做的是unlink() 它。直接使用unlink() 确实是更好的选择,但这只是减少了一些不必要的中介;它不会从根本上改变执行的操作。
  • @InsaneCoder: system("killall myapp") 无论如何可能是一个可怕的想法。如果您的程序需要它,它是被设计破坏的

标签: android c embedded-linux


【解决方案1】:

使用unlink函数代替system:

http://man7.org/linux/man-pages/man2/unlink.2.html

For example (in that case): 

printf("--Executing command\n");
int result = unlink("/tmp/dump.txt");
if(result == 0)
{
    // unlink returns 0 on success
    printf("file deletion successful\n");
} else {
    perror("unlink"); // prints error to console (to stderr, you can skip this if you don't want to read detailed error");
    printf("file deletion failure");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多