【问题标题】:android seems not support syscall,open()android 似乎不支持 syscall,open()
【发布时间】:2012-06-02 14:49:39
【问题描述】:

android是一种linux,它必须支持posix。但是,当它似乎不支持syscall时,open()。 这是测试代码,我通过NDK编译:

#include <unistd.h>
#include <stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

void main(){
    int fd;
    char pathname[128] = "/data/pwrite.txt";
    fd = open(pathname, O_WRONLY);
    if(fd==-1){
        printf("open fail.\n");

    }
    perror("/data/pwrite.txt");
}

以下是来自android的提示:

kaiwii@ubuntu:~$ adb shell /data/pwrite/test1
open fail.
/data/pwrite.txt: No such file or directory

【问题讨论】:

  • 不只是打印"open fail",而是打印实际错误。您可以通过打印出errnostrerror 返回的字符串或使用perror 函数来做到这一点。
  • kaiwii@ubuntu:~$ adb shell /data/pwrite/test1 打开失败。 /data/pwrite.txt: 没有这样的文件或目录
  • @Joachim Pileborg 我使用 perror 来打印错误,上面是它提示的内容。但是,我感到很困惑,为什么 open() 还没有创建文件。thx
  • 您访问过this 吗? @kaiwiiho
  • 实际上,我的问题似乎与它有点不同。

标签: android linux android-ndk linux-kernel


【解决方案1】:

我认为问题出在标志上——你只使用O_WRONLY。但如果文件不存在,您也应该使用O_CREAT 标志创建它。因此,如果文件不存在,您应该调用:

fd = open(pathname, O_WRONLY | O_CREAT);

【讨论】:

    【解决方案2】:

    我认为问题不在于syscall open(),而是您尝试访问/data 的事实。此文件夹仅适用于有根手机或模拟器。您是否尝试将文件放入/sdcard 文件夹?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 2018-03-10
      • 2020-07-17
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多