我有大項目需要futimes
或futimens
功能。不幸的是,在android ndk include文件夾的頭文件中沒有這樣的函數。是否有解決方法(使用現有函數的存根或簡單代碼片段)?對於futimes
功能如何解決android(NDK)中futimes()的缺失?
文檔可以發現here。
我有大項目需要futimes
或futimens
功能。不幸的是,在android ndk include文件夾的頭文件中沒有這樣的函數。是否有解決方法(使用現有函數的存根或簡單代碼片段)?對於futimes
功能如何解決android(NDK)中futimes()的缺失?
文檔可以發現here。
futimes(3)
是非POSIX函數,它接受一個struct timeval
(秒,微秒)。 POSIX版本是futimens(3)
,它需要struct timespec
(秒,納秒)。後者在仿生libc中可用。
更新:恐怕我有一點點提前了。代碼是checked into AOSP但尚未提供。
但是,如果您查看代碼,則futimens(fd, times)
實施爲utimensat(fd, NULL, times, 0)
,其中utimensat()
是看起來在NDK中定義的Linux系統調用。所以你應該能夠根據系統調用提供你自己的futimens()
實現。
更新:這使它成爲仿生但不是NDK。以下是如何推出自己的:
// ----- utimensat.h -----
#include <sys/stat.h>
#ifdef __cplusplus
extern "C" {
#endif
int utimensat(int dirfd, const char *pathname,
const struct timespec times[2], int flags);
int futimens(int fd, const struct timespec times[2]);
#ifdef __cplusplus
}
#endif
// ----- utimensat.c -----
#include <sys/syscall.h>
#include "utimensat.h"
int utimensat(int dirfd, const char *pathname,
const struct timespec times[2], int flags) {
return syscall(__NR_utimensat, dirfd, pathname, times, flags);
}
int futimens(int fd, const struct timespec times[2]) {
return utimensat(fd, NULL, times, 0);
}
那些添加到您的項目,包括utimensat.h頭,你應該是好去。用NDK r9b進行測試。
(這應該有適當的ifdef(例如#ifndef HAVE_UTIMENSAT
)包裹所以當NDK趕上你可以禁用它。)
更新: AOSP變化here。
我無法在獨立工具鏈文件夾(使用'make-standalone-toolchain'腳本)或ndk文件夾中找到任何帶'futimens'定義的頭文件。使用ndk-r9(最新版本) – 4ntoine
哎呦。答案已更新。 – fadden
'utimensat'不適合我。當我在我的android-ndk-r9文件夾中進行grep時,我找不到'utimensat'和'futimens'。 'sys/stat.h'中沒有定義。我需要包括什麼特別的東西? – codingFriend1
通過'futime()'函數你的意思是一個函數,記錄文件的修改時間? – Kerry