#include #include #include #include #include #include #include extern int sys_ioprio_set(int); extern int sys_ioprio_get(void); #if defined(__i386__) #define __NR_ioprio_set 289 #define __NR_ioprio_get 290 #elif defined(__ppc__) #define __NR_ioprio_set 272 #define __NR_ioprio_get 273 #elif defined(__x86_64__) #define __NR_ioprio_set 248 #define __NR_ioprio_get 249 #elif defined(__ia64__) #define __NR_ioprio_set 1274 #define __NR_ioprio_get 1275 #else #error "Unsupported arch" #endif _syscall1(int, ioprio_set, int, ioprio); _syscall0(int, ioprio_get); enum { IOPRIO_CLASS_NONE, IOPRIO_CLASS_RT, IOPRIO_CLASS_BE, IOPRIO_CLASS_IDLE, }; const char *to_prio[] = { "none", "realtime", "best-effort", "idle", }; int main(int argc, char *argv[]) { int ioprio = 4, set = 0, ioprio_class = IOPRIO_CLASS_BE; int c; while ((c = getopt(argc, argv, "+n:c:")) != EOF) { switch (c) { case 'n': ioprio = strtol(optarg, NULL, 10); set = 1; break; case 'c': ioprio_class = strtol(optarg, NULL, 10); set = 1; break; } } switch (ioprio_class) { case IOPRIO_CLASS_NONE: ioprio_class = IOPRIO_CLASS_BE; break; case IOPRIO_CLASS_RT: case IOPRIO_CLASS_BE: break; case IOPRIO_CLASS_IDLE: ioprio = 7; break; default: printf("bad prio class %d\n", ioprio_class); return 1; } if (!set) { ioprio = ioprio_get(); if (ioprio == -1) perror("ioprio_get"); else { ioprio_class = ioprio >> 24; ioprio = ioprio & 0xff; printf("%s: prio %d\n", to_prio[ioprio_class], ioprio); } } else if (argv[optind]) { printf("%s: prio %d\n", to_prio[ioprio_class], ioprio); if (ioprio_set(ioprio | ioprio_class << 24) == -1) { perror("ioprio_set"); return 1; } execvp(argv[optind], &argv[optind]); } return 0; }