2012-02-20 33 views
3

私は、実行中の論理プロセッサを知る必要があるプログラムを書いています。LinuxのCで現在のプロセスのプロセッサIDを取得するにはどうすればよいですか?

This questionはアセンブリでこれを行う方法を教えてくれますが、this questionはこのコードをAT & T構文に翻訳せずにアセンブリで使用する方法を教えてくれます。

既存のLinuxシステムコールやライブラリ関数を使用してこれを行う簡単な方法はありますか?それとも、ホイールを再開発する必要がありますか?

+2

を見ることができることを確認していないが、私はその情報をとして良いでしょうどのくらいわからないんだけど、これを試してみてくださいそのプロセスをいつでも再スケジュールして別のコアで実行することができます。 –

+0

あなたが参照する質問は、あなたが望むことをしません。いくつのCPUが存在しているのか、どのCPUが動作しているのかはわかりません。 – ugoren

+0

@ugoren:そうです...間違っています –

答えて

7

Linux固有のgetcpu callがあります。

+3

これは、コール時のCPUを提供することに注意してください。次の命令では、あなたのスレッドは別のCPU上にあるかもしれません。 – ugoren

+2

もちろん@ugoren! :)一つgetcpu'がVDSO介してユーザ空間(よりむしろシステムコールなど)で実装されてもよいこと '' sched_setaffinity' http://linux.die.net/man/2/sched_setaffinity – abyx

+0

注意、使用ので、おそらくはより安価でない限りあなたは期待するでしょう。 –

-1

私は何をしたいことは、この

#include<stdio.h> 
#include<sys/utsname.h> 

int main() 
{ 

char hostname[1024]; 
struct utsname userinfo; 
if(uname(&userinfo)>=0) 
{ 
    printf("\n***** System Details ******\n"); 
    printf("System Name : %s\n",userinfo.sysname); 
    printf("System Node : %s\n",userinfo.nodename); 
    printf("System Release : %s\n",userinfo.release); 
    printf("System Version : %s\n",userinfo.version); 
    printf("System Machine : %s\n",userinfo.machine); 
} 
else 
printf("\nSystem details fetch failed..\n"); 



if(gethostname(&hostname,1024)==0) 
{ 
    printf("Hostname : %s\n",hostname); 
} 
else 
printf("\nHostname details fetch failed..\n"); 

return 0; 
} 
+1

それは私にマシンのIPを与えるでしょう。私は私のプロセスが実行されているCPUのコアのIDを探しています。 –

+0

CPU IDまたは他の種類のハードウェアアドレスを取得する方法はありますか?特にiPhone用ですか? – karim

関連する問題