新しいSCHED_DEADLINE
スケジューリングポリシーを使用してプログラムを作成したいのですが、since Linux 3.14です。libcよりも新しいlinuxヘッダーに対して構築する
私は、sched_setattr
関数を使用しようとする簡単なプログラムから始めます。コンパイルするとき
#include <sched.h>
int main(void)
{
// struct sched_attr attr;
// attr.size = sizeof(struct sched_attr);
// attr.sched_policy = SCHED_DEADLINE;
sched_setattr(0, (void*)0, 0);
return 0;
}
は、しかし、私は次のエラーを取得する:
$gcc dead.c
dead.c: In function ‘main’:
dead.c:8:2: warning: implicit declaration of function ‘sched_setattr’ [-Wimplicit-function-declaration]
sched_setattr(0, (void*)0, 0);
^~~~~~~~~~~~~
/tmp/ccGxWxZE.o: In function `main':
dead.c:(.text+0x19): undefined reference to `sched_setattr'
collect2: error: ld returned 1 exit status
私のシステムでは、カーネル4.8.0-59-総称で、Ubuntuの16.10 Yakketyを実行しています。 sched.h
ファイルは/usr/include/sched.h
にあり、libc6-dev
パッケージで提供されています。このヘッダファイルには、使用しようとしている関数sched_setattr
と友人が含まれていません。
私がインストールしたカーネル(およびカーネルヘッダー)には、必要な定義を含むsched.h
ヘッダーファイルが付属しています。私のシステムでは/usr/src/linux-headers-4.8.0-58/include/linux/sched.h
にあります。
私は、libc6-devが提供するヘッダではなく、新しいlinuxヘッダを使ってビルドすることができます。私のプログラムは、このカーネルまたはそれより新しいカーネルでのみ実行されますが、それは問題ありません。
私がすべき最初の行変更:#include <linux/sched.h>
をして実行します。
gcc -I/usr/src/linux-headers-$(uname -r)/include -I/usr/src/linux-headers-$(unam -r)/arch/x86/include dead.c
は今、私は、エラーや警告のページの後のページを取得しています。これは行く方法ではありません。
libcで提供されているよりも新しいLinuxヘッダーに対してユーザースペースプログラムを構築する正しい方法は何ですか?
その後、私はどのように上記のプログラムをビルドしますか?
これをお寄せいただき、ありがとうございました。しかし、私はまだ一般的な質問の答えが好きです。このようなコードを複製するのではなく、新しいLinuxカーネルヘッダーを使用する方法はありますか? –
これは私にとっては未知の領域ですが、 'chrt'ソースコード(https://github.com/karelzak/util-linux/blob/master/schedutils/chrt.c)を見ると、これはまさにこれを行うようです同じ方法。 –