2012-05-28 83 views
-2

android是一種linux,它必須支持posix.But,當它似乎不支持syscall時,open()。 下面是測試代碼,而我通過NDK編譯:android似乎不支持系統調用,打開()

#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的提示:

[email protected]:~$ adb shell /data/pwrite/test1 
open fail. 
/data/pwrite.txt: No such file or directory 
+0

而不是僅僅打印「打開失敗」,而是打印實際的錯誤。你可以通過打印'errno'或'strerror'返回的字符串,或者使用'perror'函數來做到這一點。 –

+0

kaiwii @ ubuntu:〜$ adb shell/data/pwrite/test1 打開失敗。 /data/pwrite.txt:沒有這樣的文件或目錄 –

+0

@Joachim Pileborg我使用perror打印錯誤,上面是它提示。但是,我感到困惑,爲什麼不open()創建文件.thx –

回答

1

我認爲問題出在旗幟上 - 你只能用O_WRONLY。但是如果文件不存在,您還應該使用O_CREAT標誌創建它。所以如果一個文件不存在,你應該打電話:

fd = open(pathname, O_WRONLY | O_CREAT); 
1

我覺得這個問題是不是syscall open()但事實證明你正試圖訪問/data。該文件夾僅適用於有根據的移動設備或模擬器。你有沒有試圖將文件放入/sdcard文件夾?

+0

但是,當我使用fopen()來完成相同的工作時,它可以工作。 –

+0

並且我在模擬器中運行以下代碼 –