1 に答える
futimes(3)
struct timeval
(秒、マイクロ秒)を要する非 POSIX 関数です。POSIX バージョンはで、 (秒、ナノ秒)futimens(3)
かかります。struct timespec
後者は bionic libc で利用できます。
更新:残念ながら、私は自分より少し先を行っていました。コードは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 を変更します。