UNIXプログラミング質問すれ Part7

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/04/28(金) 06:14:37
>>948
% sysctl kern.cp_time; sleep 5; sysctl kern.cp_time
kern.cp_time: 51464 1204 77516 4733 1238731
kern.cp_time: 51502 1204 77531 4733 1238743
この増分は 38 0 15 0 12 となり、合計 65 のうち CP_IDLE (sys/resource.h)
は 12 だから 1 - (12 / 65) = 0.815... で CPU 利用率は 82% になる。
953デフォルトの名無しさん:2006/04/28(金) 12:55:29
>>951
じゃあ次回からは「質問ある?」で
954デフォルトの名無しさん:2006/04/28(金) 22:46:49
それだと質問あるかないか、YES,NOのレスが続くだけのスレになるだろーが
955デフォルトの名無しさん:2006/04/28(金) 22:58:59
無駄な「だろーが」入りました!
956948:2006/04/29(土) 01:18:09
>>952
返信ありがとうございます。
ヒント、というか、そのものズバリを教えていただけるとは思いませんでした。
うーむ、mysysctlはsysctlを使うのと同じものだったとわ・・
ありがとうございました^!
957デフォルトの名無しさん:2006/05/01(月) 20:37:06
UNIX系の人って、IDE何使ってるの?
958デフォルトの名無しさん:2006/05/01(月) 20:46:18
emacs
959デフォルトの名無しさん:2006/05/01(月) 21:13:18
azumacs
960デフォルトの名無しさん:2006/05/02(火) 21:28:02
カイヤ
961デフォルトの名無しさん:2006/05/02(火) 23:55:25
POSIX共有メモリで構造体そのまんまで扱う時って定数構造体宣言して
mmapでよかったっけ?

あと、ファイルからデータ読み込む時
mmapでアタッチするのとopenのオプションにO_DIRECT付与するの
どっちが速いのでしょうか
962デフォルトの名無しさん:2006/05/03(水) 00:01:10
どっちが速いかなどということは決まっていない
実測しろ
963デフォルトの名無しさん:2006/05/03(水) 07:49:54
POSIX共有メモリって普通IPCのshm*(2)のことだけどな。
旧称System V共有メモリ
964デフォルトの名無しさん:2006/05/03(水) 07:51:44
O_DIRECTって意味分かってないだろ。>>961
ちゃんとマニュアル読めよ。
965デフォルトの名無しさん:2006/05/15(月) 02:46:37
mmapされたシェアードメモリを複数プロセスで
read/writeする必要があるんですが,ロックに関しては
どうするのが安全/高速ですか?
ロックに関してはアドバイザリーロックで問題ありません.

OSはFreeBSDもしくはLinuxです.
966デフォルトの名無しさん:2006/05/15(月) 10:01:15
>>965
一般的にはセマフォ。
967デフォルトの名無しさん:2006/05/15(月) 11:41:26
>>965
mlockでいいんじゃね?
968デフォルトの名無しさん:2006/05/15(月) 19:08:01
mlockは排他制御には使えないとおもうがどうか
969デフォルトの名無しさん:2006/05/15(月) 19:17:32
無理すぎ
970965:2006/05/15(月) 23:22:39
>>966
ありがとうございます.調べてみたところ,

名前付きセマフォ: カーネル内にロック情報を保持
メモリベースセマフォ: プロセス共通のSharedMemory内にロック情報を保持
SysVセマフォ: カーネル内にロック情報を保持
pthread_mutex: プロセス共通のSharedMemory内にロック情報を保持
pthread_rwlock: プロセス共通のSharedMemory内にロック情報を保持

って感じでになってて,プロセスの異常終了時のロックの
解放に関してはそれぞれ特徴があるみたいですね.

ロック期間中に変更したデータの整合性に関しては
プログラマ側に任されているみたいで,安全性に関しては
等価な印象です(間違ってたら指摘お願いします).

追加質問なのですが,FreeBSDもLinuxもセマフォに関しては
扱える上限数がカーネル設定で固定されているようです.
これを考えるとメモリアル限り自由にロックの粒度を
細かくできるmutexの方が使いやすいと思うんですが,
どうなんでしょう?
971965:2006/05/15(月) 23:30:12
>>967
今回の目的は確保したSharedMemoryを破壊しないように
同期のLockを行いたいというものでした.

mlock()は確保したメモリをswapさせないようにする関数なので,
今回の用途とは少し違うかと思います.

すいません.質問の仕方が悪かったみたいです
972デフォルトの名無しさん:2006/05/15(月) 23:40:16
ディレクトリ一覧を再帰的に取得する方法について質問です。
manのftsを見ながら即興で組んでみたのですが、
(変数名適当です・・・)
以下のプログラムだと、/usr/以下の全ディレクトリ以外に
ファイル名も出力してしまいます。
ディレクトリ名のみを出力する方法はないでしょうか・・・

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fts.h>

main(){
FTS *dir;
FTSENT *fts;
char *path[2]={"/usr", NULL};
if((dir=fts_open(path,FTS_PHYSICAL|FTS_NOCHDIR,NULL))==NULL){
perror("opendir error");
exit(-1);
}

for(fts=fts_read(dir);fts!=NULL;fts=fts_read(dir)){
printf("%s\n",fts->fts_path);
}
close(dir);
return 0;

}
973デフォルトの名無しさん:2006/05/15(月) 23:47:07
>>972
fts_statp を見ろ
974デフォルトの名無しさん:2006/05/15(月) 23:50:07
FTS_Fでも抑制したら。
975デフォルトの名無しさん:2006/05/16(火) 11:44:58
>>972
if (fts->fts_info == FTS_D)
  printf("%s\n",fts->fts_path);
976デフォルトの名無しさん:2006/05/17(水) 00:34:59
>>972
>>973
>>974

なるほど、ヘッダファイルでFTS_Dを1としてdefineしていたんですね・・・
今までそれがわからずにcoreを吐かせまくってましたが、
おかげさまで狙い通りの値がとれるようになりました。
ttp://mirror.sg.depaul.edu/pub/OpenBSD/src/include/fts.h
ありがとうございました!

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fts.h>
main(){
FTS *dir;
FTSENT *fts;
char *path[2]={"/usr", NULL};
if((dir=fts_open(path,FTS_PHYSICAL,NULL))==NULL){
perror("opendir error");
exit(-1);
}
for(fts=fts_read(dir);fts!=NULL;fts=fts_read(dir)){
/* FTS_D is defined as 1 in fts.h */
if(fts->fts_info==FTS_D){
printf("%s\n",fts->fts_path);
}
}
fts_close(dir);
return 0;
}
977デフォルトの名無しさん:2006/05/17(水) 14:44:56
>>976
1 だとか 2 だとかコメントに書かないほうが良いよ。
別の OS で FTS_D が 2 だったら、コメントも変えるの?
978デフォルトの名無しさん:2006/05/17(水) 16:02:12
>>970
Linux なら /proc/sys/kernel/sem で拡張できるよ
979970:2006/05/17(水) 17:06:40
>>978
>Linux なら /proc/sys/kernel/sem で拡張できるよ

情報ありがとうございます.FreeBSDならkern.ipc.semm*
あたりで変更できますね.
FreeBSDもLinuxも内部機構を知らないのでなんなのですが,
OS側で数を制限しているからには数を増やすとそれなりに
パフォーマンスが落ちると思うんですね.

mutexの場合はロックの粒度に応じてthread_mutex_tの変数を
プロセス共通のシェアードメモリに必要なだけ確保すればいい
だけなので,セマフォより使いやすいのかなと思ったんです.
980970:2006/05/17(水) 17:31:46
ところで次のスレはこの板に作っちゃっていいんでしょうか?
Unix板でやれという意見もあるようですが.
981デフォルトの名無しさん:2006/05/17(水) 17:48:45
UNIXのプログラムの質問をするスレなんだからプログラム板だろ
982デフォルトの名無しさん:2006/05/17(水) 17:49:08
>>979
pthread_mutexがprocessを越えても有効かどうかは環境依存。
983970:2006/05/17(水) 21:05:15
>>982
>pthread_mutexがprocessを越えても有効かどうかは環境依存

なるほど.情報ありがとうございます.調べてみたところ
確かにその通りでした.
PTHREAD_PROCESS_SHARED
はLinuxではNativeでサポート,FreeBSDは未サポートなので、
portsでlinuxthreadsを入れる必要があるようですね.

http://www.unobvious.com/bsd/freebsd-threads.html
984デフォルトの名無しさん:2006/05/18(木) 00:19:14
>>981
UNIXのプログラムの質問をするスレなんだからUNIX板だろ
985デフォルトの名無しさん:2006/05/18(木) 00:32:59
>>984
どっちでもいいから、次スレは同じ板に立てるのがデフォルトってことで、プログラム板だろ。
986デフォルトの名無しさん:2006/05/18(木) 00:49:02
UNIXを目の仇にしてるごく一部のおかしな人が暴れてただけだからなあ。
この板で全然いいでしょう。
987デフォルトの名無しさん:2006/05/18(木) 00:58:19
>>984
WIN32APIのスレで同じこと言えよ。
988デフォルトの名無しさん:2006/05/18(木) 01:12:18
両方にあってもいいわけだし。
989デフォルトの名無しさん:2006/05/18(木) 07:19:07
両方あるな
>プログラミング質問すれ Part1 http://pc8.2ch.net/test/read.cgi/unix/1127388574/
990970:2006/05/18(木) 19:01:55
次スレ
UNIXプログラミング質問すれ Part8
http://pc8.2ch.net/test/read.cgi/tech/1147946176/
991デフォルトの名無しさん:2006/05/18(木) 22:05:38
>>990
992デフォルトの名無しさん:2006/05/20(土) 22:01:20
a
993デフォルトの名無しさん:2006/05/20(土) 22:02:14
b
994デフォルトの名無しさん:2006/05/20(土) 22:03:35
c
995デフォルトの名無しさん:2006/05/20(土) 22:04:36
d
996デフォルトの名無しさん:2006/05/20(土) 22:07:28
e
997デフォルトの名無しさん:2006/05/20(土) 22:08:21
f
998デフォルトの名無しさん:2006/05/20(土) 22:09:21
g
999デフォルトの名無しさん:2006/05/20(土) 22:10:12
h
1000デフォルトの名無しさん:2006/05/20(土) 22:11:04
i
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。