From 789169d70d24ff2c1c9804f0149d0508de6dfcfa Mon Sep 17 00:00:00 2001 From: Enrique Date: Mon, 6 Jan 2025 00:50:11 +0100 Subject: First upload --- tme/tme.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 tme/tme.c (limited to 'tme') diff --git a/tme/tme.c b/tme/tme.c new file mode 100755 index 0000000..e86acbe --- /dev/null +++ b/tme/tme.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include +#include + + +int main(int argc, char *argv[]){ + + if(argc < 2){ + printf("Usage: tme [program]\n"); + return 1; + } + + struct timespec t_start, t_end; + pid_t cpid = fork(); + clock_gettime(CLOCK_MONOTONIC, &t_start); + if(cpid == 0){ + int r = execvp(argv[1], argv+1); + //r = execv(argv[1], argv+1); + if(r == -1){ + perror("tme"); + } + return 2; + } + + int wstatus; + waitpid(cpid, &wstatus, 2); // use 2 instead of 1 because WNOHANG is 1 + clock_gettime(CLOCK_MONOTONIC, &t_end); + uint64_t diff = (t_end.tv_sec*1000000000 + t_end.tv_nsec) - (t_start.tv_sec*1000000000 + t_start.tv_nsec); + double timing = diff/1000000000.0; + + printf("time: %lfs\n", timing); + if(WIFEXITED(wstatus)){ + printf("'%s' exited with status %d\n", argv[1], WEXITSTATUS(wstatus)); + } + + return 0; +} -- cgit v1.2.3