| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <errno.h> |
| |
| #include <cutils/iosched_policy.h> |
| |
| static char *classes[] = {"none", "rt", "be", "idle", NULL}; |
| |
| int ionice_main(int argc, char *argv[]) |
| { |
| IoSchedClass clazz = IoSchedClass_NONE; |
| int ioprio = 0; |
| int pid; |
| |
| if(argc != 2 && argc != 4) { |
| fprintf(stderr, "usage: ionice <pid> [none|rt|be|idle] [prio]\n"); |
| return 1; |
| } |
| |
| if (!(pid = atoi(argv[1]))) { |
| fprintf(stderr, "Invalid pid specified\n"); |
| return 1; |
| } |
| |
| if (argc == 2) { |
| if (android_get_ioprio(pid, &clazz, &ioprio)) { |
| fprintf(stderr, "Failed to read priority (%s)\n", strerror(errno)); |
| return 1; |
| } |
| fprintf(stdout, "Pid %d, class %s (%d), prio %d\n", pid, classes[clazz], clazz, ioprio); |
| return 0; |
| } |
| |
| if (!strcmp(argv[2], "none")) { |
| clazz = IoSchedClass_NONE; |
| } else if (!strcmp(argv[2], "rt")) { |
| clazz = IoSchedClass_RT; |
| } else if (!strcmp(argv[2], "be")) { |
| clazz = IoSchedClass_BE; |
| } else if (!strcmp(argv[2], "idle")) { |
| clazz = IoSchedClass_IDLE; |
| } else { |
| fprintf(stderr, "Unsupported class '%s'\n", argv[2]); |
| return 1; |
| } |
| |
| ioprio = atoi(argv[3]); |
| |
| printf("Setting pid %d i/o class to %d, prio %d\n", pid, clazz, ioprio); |
| if (android_set_ioprio(pid, clazz, ioprio)) { |
| fprintf(stderr, "Failed to set priority (%s)\n", strerror(errno)); |
| return 1; |
| } |
| |
| return 0; |
| } |