[CRIU] [PATCH v10 05/10] parse: add a helper to obtain an uptime
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Fri Apr 6 10:31:27 MSK 2018
will be used in the next patch
https://jira.sw.ru/browse/PSBM-67502
note: man for /proc/uptime says that uptime is in seconds and for now
the format is "seconds.centiseconds", where ecentiseconds is 2 digits
note: now uptime is in csec but I prefer saving it in usec, that allows
us to be reuse these image field when/if we have more accurate value.
v8: add length specifier to parse only centiseconds
v9: put uptime to u_int64_t directly, define CSEC_PER_SEC
v10: switch to uint64_t from u_int64_t, comment about usec in image
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
criu/include/proc_parse.h | 1 +
criu/proc_parse.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/criu/include/proc_parse.h b/criu/include/proc_parse.h
index 0f5e91056..e26173e68 100644
--- a/criu/include/proc_parse.h
+++ b/criu/include/proc_parse.h
@@ -108,5 +108,6 @@ int parse_children(pid_t pid, pid_t **_c, int *_n);
extern bool is_vma_range_fmt(char *line);
extern void parse_vmflags(char *buf, u32 *flags, u64 *madv, int *io_pf);
+extern int parse_uptime(uint64_t *upt);
#endif /* __CR_PROC_PARSE_H__ */
diff --git a/criu/proc_parse.c b/criu/proc_parse.c
index 4ab11a31a..5a58a23d0 100644
--- a/criu/proc_parse.c
+++ b/criu/proc_parse.c
@@ -2712,3 +2712,28 @@ int parse_children(pid_t pid, pid_t **_c, int *_n)
xfree(ch);
return -1;
}
+
+#define CSEC_PER_SEC 100
+
+__maybe_unused int parse_uptime(uint64_t *upt)
+{
+ unsigned long sec, csec;
+ FILE *f;
+
+ f = fopen("/proc/uptime", "r");
+ if (!f) {
+ pr_perror("Failed to fopen /proc/uptime");
+ return -1;
+ }
+
+ if (fscanf(f, "%lu.%2lu", &sec, &csec) != 2) {
+ pr_perror("Failed to parse /proc/uptime");
+ fclose(f);
+ return -1;
+ }
+
+ *upt = sec * USEC_PER_SEC + csec * (USEC_PER_SEC / CSEC_PER_SEC);
+
+ fclose(f);
+ return 0;
+}
--
2.14.3
More information about the CRIU
mailing list