Skip to content

Instantly share code, notes, and snippets.

@mmdts
Created September 2, 2021 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmdts/4cb35a9d871fc0855b451e44b12fe982 to your computer and use it in GitHub Desktop.
Save mmdts/4cb35a9d871fc0855b451e44b12fe982 to your computer and use it in GitHub Desktop.
Forced utime correction
delta_stat_nsec: 539651628212000
delta_stat_nsec: 90000
delta_stat_nsec: 19000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 18000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 18000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 19000
delta_stat_nsec: 17000
delta_stat_nsec: 16000
delta_stat_nsec: 17000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 18000
delta_stat_nsec: 16000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 17000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 18000
delta_stat_nsec: 19000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 18000
delta_stat_nsec: 15000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 18000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 14000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 23000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 14000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 23000
delta_stat_nsec: 16000
delta_stat_nsec: 17000
delta_stat_nsec: 15000
delta_stat_nsec: 16000
delta_stat_nsec: 16000
delta_stat_nsec: 14000
delta_stat_nsec: 16000
delta_stat_nsec: 15000
delta_stat_nsec: 14000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_stat_nsec: 15000
delta_t_prog (ns): 1702859
#include <cstdio>
#include <ctime>
#include <sys/time.h>
#include <cstdlib>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <utime.h>
#include <sys/resource.h>
#include <pthread.h>
int main () {
struct sched_param p {1};
pthread_setschedparam(pthread_self(), SCHED_FIFO, &p); // このprocessはpreemptしない!
int i = 100; // 百回試す!
struct stat st {}, st_old {}; // 比べたいから
struct timespec tstart {}, tend {}; // いつ始めたは、いつ終わったか
struct timespec ts {};
ts.tv_sec = 0;
ts.tv_nsec = 10; // 5000000;
system("mkdir -p ./hoge"); // tmpじゃなくて、ここで置いていこう!
clock_gettime(CLOCK_MONOTONIC, &tstart); // はじまりの時
while (i--) {
unlink("./hoge/foo");
symlink("aaa", "./hoge/foo");
struct timeval times[2];
struct timespec temp {};
clock_gettime(CLOCK_MONOTONIC, &temp);
times[0] = {temp.tv_sec, temp.tv_nsec / 1000};
times[1] = {temp.tv_sec, temp.tv_nsec / 1000};
utimes("./hoge", times); // mtimeとatimeが矯正できる!
st_old = st; // コピーする
stat("./hoge", &st);
printf("delta_stat_nsec: %lld\n", (st.st_mtim.tv_sec - st_old.st_mtim.tv_sec) * 1000000000llu +
(st.st_mtim.tv_nsec - st_old.st_mtim.tv_nsec));
}
clock_gettime(CLOCK_MONOTONIC, &tend); // 終わりの時
printf("delta_t_prog (ns): %lld\n", (tend.tv_sec - tstart.tv_sec) * 1000000000llu + tend.tv_nsec - tstart.tv_nsec);
system("rm -rf ./hoge"); // お掃除をしよう!
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment