對C++和生態系統來說很新穎。在C++中使用linux內核頭文件ioprio.h中的ioprio_set()
我想使用ioprio_set(2)將進程的IO優先級降低到IOPRIO_CLASS_IDLE
,但在編譯/構建工具鏈方面存在一些問題。我在一個內核爲3.10.0-229.11.1.el7.x86_64的RHEL7工作站上,但這應該適用於任何Linux發行版。
我相信我需要#include <linux/ioprio.h>
其中聯繫到this kernel header。所以我寫了這個蹩腳的Hello World:
#include <iostream>
#include <linux/ioprio.h>
using namespace std;
int main() {
cout << "Hello world!" << endl;
syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, 0, IOPRIO_PRIO_VALUE(IO_PRIO_CLASS_BE,0));
return 0;
}`
,並試圖誦這個咒語的幾個咒語海合會神:
g++ -I/usr/src/kernels/$(uname -r)/include -I/usr/src/kernels/$(uname -r)/arch/x86/include -I/usr/src/kernels/$(uname -r)/include/asm-generic hello_world.cpp
那些在美妙和壯觀的方式各個擊破,以提示我可能不應該將它們包含在用戶空間代碼中。深入挖掘並查看util-linux中的source of the ionice實用程序,它看起來像我正在做的事情,因爲它們或多或少地重新實現了ionice.c
中的所有內容。
什麼是我正確使用的方法?我是否應該繼續試圖包含該頭文件,而不是像所有其他「公共」內核頭文件一樣將頭文件安裝到/ usr/include/linux,或者應該簡單地將代碼移植到我的應用程序副本/麪食類型中?這個SO post有一個微妙的暗示,但如果可能的話,我需要更多的上下文。
謝謝!
這不完全正確。否則,libc如何與內核一起工作?有用於導出和內部使用的標題。 – 0andriy
你是對的。作者顯然是指內部人。因此我的答案 – stdcall