Linuxプログラミングで便利そうな話 - TK's HP

TK's HP ホーム » スポンサー広告 » linux » Linuxプログラミングで便利そうな話

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Linuxプログラミングで便利そうな話

先輩から聞いた便利そうな話です。
忘れないようにメモ

timerfd
/dev/shm/
pkg-config


timerfd
ファイルディスクリプタ経由で通知するタイマー。
周期的に実行するような使い方だと、usleepとかtimer使うより高精度。
nanosleepとかclock_nanosleepとかでも良いが、多くのタイマーを使いたいときとか便利かもしれない。


/dev/shm/
RAMディスクがマウントされている。
容量が足りなくなると動的にメモリ領域を広げてくれるらしい。
gnuplotなどにfile経由でデータを渡すときに使用すると、HDDにアクセスしないので、より高速・安全に使うことができると考えられる。
また、共有メモリを使うときに、ここでfile形式で管理することで、Lockなどの排他制御が簡単に行える。
プロセスが死んだりしても、Linux側で勝手に開放してくれるので、普通に共有メモリを使うよりもたぶん安全。

pkg-config
プログラムやライブラリで使用する、補助プログラム
プログラムやライブラリ固有の環境変数を保存するようなものと考えても良いかもしれない。
例えばopenCVでは

$ gcc -o test test.c `pkg-config --libs opencv`

の様に使用する。
新しく作る方法は簡単で、
/usr/lib/pkgconfig/または/usr/local/lib/pkgconfig/の下にtest.pcのように[.pc]を付けて作成すれば、pkgconfigが自動的に認識してくれる。


○その他
pkg-configを使うときに気付いたのだが、ターミナルで``で囲むとその中身を実行して出力結果が展開されるらしい。
シングルクオーテーション「'」ではなくアポストロフィー「`」であることがポイント。

例えばプログラムの引数に1000個の数字を取るようなプログラム[test.c]があるとすると、1000個の乱数を発生させるプログラム[number.c]を書いておけば、

$ ./test `number`

のように実行すれば、毎回乱数をコピペする必要がなくなるので便利。

ちなみに1000個の引数というのは実際にプログラミングの授業でありました。

サンプル

// number.c
// gcc -o number number.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int aArgc, char **aArgv)
{
int max = 100000, n = 1000, offset = 50000;
int i;
for(i=1; i < aArgc; i++)
{
if(i+1 < aArgc)
{
if(strcmp(aArgv[i], "-m") == 0){max = atoi(aArgv[++i]);}
else if(strcmp(aArgv[i], "-n") == 0){n = atoi(aArgv[++i]);}
else if(strcmp(aArgv[i], "-o") == 0){offset = atoi(aArgv[++i]);}
}
}
srand(getpid());
max = max - offset + 1;
for(i=0; i < n; i++)
{
printf("%d ",rand() % max + offset);
}
printf("\n");
return 0;
}
関連記事
コメント
非公開コメント

トラックバック

http://tclip.blog.fc2.com/tb.php/81-ba29e4b4

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。