2
4

1 に答える 1

7

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 を変更します。

于 2013-10-15T16:33:02.663 に答える