UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
前スレ
Part9 http://hibari.2ch.net/test/read.cgi/tech/1205795434/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1147946176/
Part7 http://pc8.2ch.net/test/read.cgi/tech/1127373405/
Part6 http://pc8.2ch.net/test/read.cgi/tech/1116908090/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1105723117/
Part4 http://pc5.2ch.net/test/read.cgi/tech/1095843584/
Part3 http://pc5.2ch.net/test/read.cgi/tech/1085930894/
Part2 http://pc5.2ch.net/test/read.cgi/tech/1055110889/
Part1 http://pc2.2ch.net/tech/kako/992/992057422.html
Part3のミラー
http://makimo.to/2ch/pc5_tech/1085/1085930894.html
Part2のミラー
http://makimo.to/2ch/pc5_tech/1055/1055110889.html
UNIXプログラミング質問すれ Part10
■ このスレッドは過去ログ倉庫に格納されています
1unco ◆manko/yek.
2011/04/18(月) 17:06:36.77392デフォルトの名無しさん
2012/03/10(土) 21:38:45.84 1 スレッドライブラリが用意されている環境ならば、
#define errno (* __error())
のようにスレッド毎の変数になっているので安全。
2 システムコールやライブラリでエラーが発生したときに
errnoが 更新させる仕様なので、コールする前にerrnoを
クリアする必要はない。しかしerrnoを比較するとこでエ
ラー判定をしてはいけない。システムコールならば戻り値
が負、ライブラリならばその仕様に従いエラー判定を行う。
#define errno (* __error())
のようにスレッド毎の変数になっているので安全。
2 システムコールやライブラリでエラーが発生したときに
errnoが 更新させる仕様なので、コールする前にerrnoを
クリアする必要はない。しかしerrnoを比較するとこでエ
ラー判定をしてはいけない。システムコールならば戻り値
が負、ライブラリならばその仕様に従いエラー判定を行う。
393デフォルトの名無しさん
2012/03/10(土) 21:41:01.34 >>391
> errno is thread-local; setting it in one thread does not affect its value in any other thread.
うちのLinuxのman errnoから引用。どこかで定められているはずだけど、どの規格か知らない
> errno is thread-local; setting it in one thread does not affect its value in any other thread.
うちのLinuxのman errnoから引用。どこかで定められているはずだけど、どの規格か知らない
394デフォルトの名無しさん
2012/03/10(土) 21:52:08.51395デフォルトの名無しさん
2012/03/10(土) 21:56:50.40396デフォルトの名無しさん
2012/03/11(日) 00:47:10.17 どもです(´・ω・`)
397デフォルトの名無しさん
2012/03/11(日) 03:03:42.12398デフォルトの名無しさん
2012/03/11(日) 07:12:41.24 >>397
日本語でおk
日本語でおk
399デフォルトの名無しさん
2012/03/11(日) 07:59:41.37400デフォルトの名無しさん
2012/03/11(日) 21:40:09.08 おねがいします。
親子関係にないプロセス(PID既知)の生存を確認するための通常の手法はなんですか?
親子関係にないプロセス(PID既知)の生存を確認するための通常の手法はなんですか?
401デフォルトの名無しさん
2012/03/11(日) 21:48:39.59 kill(pid, 0);
402デフォルトの名無しさん
2012/03/11(日) 22:47:06.43 ありがとうございます!
・・・というか、一度はmanに目を通しているから、間違いなく読んでいるはずなのだが・・・
恥をかかないと覚えないということか・・・
・・・というか、一度はmanに目を通しているから、間違いなく読んでいるはずなのだが・・・
恥をかかないと覚えないということか・・・
403デフォルトの名無しさん
2012/03/12(月) 00:05:33.16 >>402
全部暗記できちゃうほうが異常者ですよ。
全部暗記できちゃうほうが異常者ですよ。
404デフォルトの名無しさん
2012/03/12(月) 00:08:19.11 /procという手もある。(OSによっては)
405デフォルトの名無しさん
2012/03/14(水) 02:39:31.61406デフォルトの名無しさん
2012/03/14(水) 10:37:43.36407デフォルトの名無しさん
2012/03/14(水) 12:12:14.56 >>405
中身はいいけど、目次の暗記は必須だろ
中身はいいけど、目次の暗記は必須だろ
408デフォルトの名無しさん
2012/03/14(水) 12:13:49.31 >>405
「どっかで見たなー」 っていう記憶がもっとも大事なんだよ。
「どっかで見たなー」 っていう記憶がもっとも大事なんだよ。
409デフォルトの名無しさん
2012/03/15(木) 16:20:19.04 「もっとも大事」はどうなんだろう?
410デフォルトの名無しさん
2012/03/16(金) 01:18:56.16 教えてください
ftp://ftp.irisa.fr/pub/OpenBSD/src/sbin/init/init.c
のプログラムなんですが、
どうやって/etc/rcを実行するのかがいまいちわかりません。
runcom関数内の
execv(_PATH_BSHELL, argv);
で実行しているのではないかなと思うんですが、
main関数内の、
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
case 's':
requested_transition = single_user;
break;
....
}
でrequested_transitionにsingle_userが代入される。
transition関数を経由して、single_user関数に入る。
までは、何となくわかるんですが、
single_user関数内でforkして、子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
シェルを起動する。
そこからどうやって、runcom関数に入るのかわかりませんでした。
教えて頂けないでしょうか?
ftp://ftp.irisa.fr/pub/OpenBSD/src/sbin/init/init.c
のプログラムなんですが、
どうやって/etc/rcを実行するのかがいまいちわかりません。
runcom関数内の
execv(_PATH_BSHELL, argv);
で実行しているのではないかなと思うんですが、
main関数内の、
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
case 's':
requested_transition = single_user;
break;
....
}
でrequested_transitionにsingle_userが代入される。
transition関数を経由して、single_user関数に入る。
までは、何となくわかるんですが、
single_user関数内でforkして、子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
シェルを起動する。
そこからどうやって、runcom関数に入るのかわかりませんでした。
教えて頂けないでしょうか?
411デフォルトの名無しさん
2012/03/16(金) 01:36:39.64 状態名の関数は全部最後に関数を返してるじゃん?
それがカーネルが次に移る状態なのよ。
その状態で、実行すべき処理を記述してある関数を、
状態そのものの代わりにしている。
void
transition(state_t s)
{
for (;;)
s = (state_t) (*s)();
}
だからこれが状態遷移マシンになるわけ。
requested_transitionは引数とか、シグナルとか、
上の関数を使った状態遷移からは逸脱するものを扱うためにある。
それがカーネルが次に移る状態なのよ。
その状態で、実行すべき処理を記述してある関数を、
状態そのものの代わりにしている。
void
transition(state_t s)
{
for (;;)
s = (state_t) (*s)();
}
だからこれが状態遷移マシンになるわけ。
requested_transitionは引数とか、シグナルとか、
上の関数を使った状態遷移からは逸脱するものを扱うためにある。
412410
2012/03/17(土) 06:18:23.32 すいません、もう少し質問させてください。
single_user関数内でforkして子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
特に引数なしでシェルを起動していますよね。
んで、親プロセスの
requested_transition = 0;
do {
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
collect_child(wpid);
if (wpid == -1) {
if (errno == EINTR)
continue;
warning("wait for single-user shell failed: %m; restarting");
return (state_func_t) single_user;
}
if (wpid == pid && WIFSTOPPED(status)) {
warning("init: shell stopped, restarting¥n");
kill(pid, SIGCONT);
wpid = -1;
}
} while (wpid != pid && !requested_transition);
で、子プロセスの面倒を見る処理を行っていると思うんですが、この処理抜けないとruncom関数に入れないですよね?
ただ起動させただけの子プロセスのシェルが、
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
collect_child(wpid);
どうやってこの処理を抜けるんでしょうか?子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
それとも、起動させた子プロセスのシェルが/etc/rcを実行するんでしょうか?
その場合、/etc/rcの場所が分からないと思うんですけれど...
single_user関数内でforkして子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
特に引数なしでシェルを起動していますよね。
んで、親プロセスの
requested_transition = 0;
do {
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
collect_child(wpid);
if (wpid == -1) {
if (errno == EINTR)
continue;
warning("wait for single-user shell failed: %m; restarting");
return (state_func_t) single_user;
}
if (wpid == pid && WIFSTOPPED(status)) {
warning("init: shell stopped, restarting¥n");
kill(pid, SIGCONT);
wpid = -1;
}
} while (wpid != pid && !requested_transition);
で、子プロセスの面倒を見る処理を行っていると思うんですが、この処理抜けないとruncom関数に入れないですよね?
ただ起動させただけの子プロセスのシェルが、
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
collect_child(wpid);
どうやってこの処理を抜けるんでしょうか?子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
それとも、起動させた子プロセスのシェルが/etc/rcを実行するんでしょうか?
その場合、/etc/rcの場所が分からないと思うんですけれど...
413デフォルトの名無しさん
2012/03/17(土) 11:03:10.55 シングルユーザーシェルのプロセスIDがpidで、
do {
} while (wpid != pid && !requested_transition);
で、親プロセス(init)はシングルユーザーシェルの終了を待っている。
(シングルユーザーシェルはインタラクティブシェル)
> 子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
親がシェルならsuspendして親シェルに戻るけど、親がシェルじゃないから、
シングルユーザーシェルからkill -STOP $$とかやったら固まるでしょ。
それを避けるためにリスタートする。
do {
} while (wpid != pid && !requested_transition);
で、親プロセス(init)はシングルユーザーシェルの終了を待っている。
(シングルユーザーシェルはインタラクティブシェル)
> 子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
親がシェルならsuspendして親シェルに戻るけど、親がシェルじゃないから、
シングルユーザーシェルからkill -STOP $$とかやったら固まるでしょ。
それを避けるためにリスタートする。
414デフォルトの名無しさん
2012/03/17(土) 16:04:37.77 >>412
シングルユーザモードがなにか理解できてる?
シングルユーザモードがなにか理解できてる?
415デフォルトの名無しさん
2012/03/17(土) 16:08:03.24 >>413
シングルユーザモードの典型的なセッションは、
1. シングルユーザモード指定して起動
2. シングルユーザモードのシェルが動く。動いているサービスはほぼ皆無。
3. fsckしたり、パスワード変更したり、criticalなファイル直したり。
4. Ctrl-Dでシングルユーザモードのシェル終了。(exitコマンドでも)
5. マルチユーザーモードへ。(最近のUNIXは起動シーケンスが複雑で、再起動したいケースもままある)
シングルユーザモードの典型的なセッションは、
1. シングルユーザモード指定して起動
2. シングルユーザモードのシェルが動く。動いているサービスはほぼ皆無。
3. fsckしたり、パスワード変更したり、criticalなファイル直したり。
4. Ctrl-Dでシングルユーザモードのシェル終了。(exitコマンドでも)
5. マルチユーザーモードへ。(最近のUNIXは起動シーケンスが複雑で、再起動したいケースもままある)
416410
2012/03/18(日) 04:28:21.50 貴重なお時間頂いて、申し訳ないです。
/etc/rcって、マルチユーザーモードで起動するときに読まれますよね。
init.c内では、runcom関数でその処理を行っていますよね。
で、main関数内の
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
を見て、
「initの引数は、sとfでf(FASTBOOT)は機能的に実装されていないようだし、
single_user関数内で、runcom関数に飛ぶのかなぁ」と思ったんですよね。
main->single_user->runcomの流れが勝手に(自動的に)行われるんじゃないかなと推測したんです。
でも、single_user関数を見ても子プロセスでシェルを起動させて、親プロセスは待つだけで、
人間が操作をしないと、次の処理に進むようには思えない。
do {
} while (wpid != pid && !requested_transition);
の処理ですね。
main->single_user(オペレーション終了待ち)->runcomになっているんですよね。
で、runcom関数はどうやって呼ばれるのかなと思ったんです。
質問が悪かったんです。すいません。質問すべきだったのは、
カーネル(bootローダー)からinitが呼ばれるときって、シングルユーザーモードでないときの
オプションは'f'なんですか?
です。
/etc/rcって、マルチユーザーモードで起動するときに読まれますよね。
init.c内では、runcom関数でその処理を行っていますよね。
で、main関数内の
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
を見て、
「initの引数は、sとfでf(FASTBOOT)は機能的に実装されていないようだし、
single_user関数内で、runcom関数に飛ぶのかなぁ」と思ったんですよね。
main->single_user->runcomの流れが勝手に(自動的に)行われるんじゃないかなと推測したんです。
でも、single_user関数を見ても子プロセスでシェルを起動させて、親プロセスは待つだけで、
人間が操作をしないと、次の処理に進むようには思えない。
do {
} while (wpid != pid && !requested_transition);
の処理ですね。
main->single_user(オペレーション終了待ち)->runcomになっているんですよね。
で、runcom関数はどうやって呼ばれるのかなと思ったんです。
質問が悪かったんです。すいません。質問すべきだったのは、
カーネル(bootローダー)からinitが呼ばれるときって、シングルユーザーモードでないときの
オプションは'f'なんですか?
です。
417410
2012/03/18(日) 05:35:51.09 すいません。
init_main.cを読んでちょっと理解できました。
flagsp = flags;
*flagsp++ = '-';
options = 0;
if (boothowto & RB_SINGLE) {
*flagsp++ = 's';
options = 1;
}
#ifdef notyet
if (boothowto & RB_FASTBOOT) {
*flagsp++ = 'f';
options = 1;
}
#endif
/*
* Move out the flags (arg 1), if necessary.
*/
if (options != 0) {
*flagsp++ = '¥0';
i = flagsp - flags;
#ifdef DEBUG
printf("init: copying out flags `%s' %d¥n", flags, i);
#endif
(void)copyout((caddr_t)flags, (caddr_t)(ucp -= i), i);
arg1 = ucp;
}
つまり、何も指定しない場合は'-'が答えなんですね。
init_main.cを読んでちょっと理解できました。
flagsp = flags;
*flagsp++ = '-';
options = 0;
if (boothowto & RB_SINGLE) {
*flagsp++ = 's';
options = 1;
}
#ifdef notyet
if (boothowto & RB_FASTBOOT) {
*flagsp++ = 'f';
options = 1;
}
#endif
/*
* Move out the flags (arg 1), if necessary.
*/
if (options != 0) {
*flagsp++ = '¥0';
i = flagsp - flags;
#ifdef DEBUG
printf("init: copying out flags `%s' %d¥n", flags, i);
#endif
(void)copyout((caddr_t)flags, (caddr_t)(ucp -= i), i);
arg1 = ucp;
}
つまり、何も指定しない場合は'-'が答えなんですね。
418410
2012/03/18(日) 05:47:21.65 >つまり、何も指定しない場合は'-'が答えなんですね。
すいません。何も指定しない場合は何もないが正解でした。
suwordなんて関数、初めて見ました。
すいません。何も指定しない場合は何もないが正解でした。
suwordなんて関数、初めて見ました。
419デフォルトの名無しさん
2012/03/18(日) 22:40:11.06 たしかに「どっかで見たなー」は大事だけど
そのうち「こんなのがあるはずだ」になって
無いものを探して時間を無駄にすることになる
そのうち「こんなのがあるはずだ」になって
無いものを探して時間を無駄にすることになる
420デフォルトの名無しさん
2012/03/18(日) 22:49:00.71 man 9 store
man 9 fetch
man 9 copy
man 9 fetch
man 9 copy
421デフォルトの名無しさん
2012/03/19(月) 08:17:04.29 m9(^Д^)プギャー
422デフォルトの名無しさん
2012/03/19(月) 09:55:12.39 >>419
30分探して見つからなかったら、「無い」よ
30分探して見つからなかったら、「無い」よ
423デフォルトの名無しさん
2012/03/19(月) 09:59:41.84 あったはずのものが見つからないと気持ち悪くて他の事が出来ない。
多分精神疾患なんだろう。
多分精神疾患なんだろう。
424デフォルトの名無しさん
2012/03/19(月) 10:13:03.18 あったはずのものが見つからない・・・・
夢・・・とか
夢・・・とか
425デフォルトの名無しさん
2012/03/19(月) 10:15:31.01 >>424
呪いが解けてよかったな
呪いが解けてよかったな
426デフォルトの名無しさん
2012/03/19(月) 10:36:22.33 >>424
あるはずの現実を見ようとしていない状態より遥かにマシだ
あるはずの現実を見ようとしていない状態より遥かにマシだ
427オカルトの世界にようこそ
2012/03/19(月) 10:46:03.46 存在しないものをプログラミングするとか、
ゴーストを実装するようなもの。
ゴーストを実装するようなもの。
428デフォルトの名無しさん
2012/03/19(月) 11:31:33.10 まさにWizard
429デフォルトの名無しさん
2012/03/19(月) 11:49:08.41 どどど同邸ちゃうわ・・・!
430デフォルトの名無しさん
2012/03/19(月) 12:07:52.39 切迫していなければ
別に回り道したっていいと思うけど
最終的に正しい答えを導き出しているんだし
そのぶん、ソースも読んだだろうし
別に回り道したっていいと思うけど
最終的に正しい答えを導き出しているんだし
そのぶん、ソースも読んだだろうし
431デフォルトの名無しさん
2012/03/19(月) 13:03:50.05432デフォルトの名無しさん
2012/03/19(月) 14:19:30.88 ゴーストもいればゾンビもいる
UNIX界はほんまホラーやで
UNIX界はほんまホラーやで
433デフォルトの名無しさん
2012/03/19(月) 14:30:39.17434デフォルトの名無しさん
2012/03/19(月) 14:52:04.58 仮想コンソールの窓越しにしか見えないスタンドのような存在か
435デフォルトの名無しさん
2012/03/19(月) 16:05:39.14 みなし児もいる悲しい街なのですよ。
436デフォルトの名無しさん
2012/03/19(月) 18:17:26.17 お前ら、非技術的な話題だと食いつき良いな。
437デフォルトの名無しさん
2012/03/19(月) 18:18:17.58 技術的な話題も好物ですよ
2012/03/31(土) 00:06:18.32
物欲を満足しつつ、ちょっとしたUNIXプログラミングの実験&iPad用アプリの開発を
こなせるマシンを購入検討したいのですが、現行機種で何かオススメはありますか?
こなせるマシンを購入検討したいのですが、現行機種で何かオススメはありますか?
2012/04/01(日) 19:49:49.18
Mac板で相談しなよ。
2012/04/01(日) 19:56:56.10
いや、UNIXプログラミングができるからこそのMac選択で、
似たようなことを考えた先達がいると思うからこそここでのQです
ぶっちゃけ、Mac板でまともな回答が帰ってくるとは思えないし
似たようなことを考えた先達がいると思うからこそここでのQです
ぶっちゃけ、Mac板でまともな回答が帰ってくるとは思えないし
441営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 02:54:08.78 >>440
MacBook Airの一番安いのでスタバでドヤ顔しなさい
MacBook Airの一番安いのでスタバでドヤ顔しなさい
2012/04/02(月) 07:13:56.20
昨年、台湾の雑誌『遠見』が20歳以上の1000人にアンケートしたところ
「一番尊敬する国」「一番移住したい国」などの筆頭に日本が挙げられた
そうだ。
そういえば以前、台湾に旅行をした際に、現地で知り合った人に好意的に受け
入れられ、台湾は「親日」なんだと実感したことがある。
でも、どうして台湾は親日なのだろう。
産能短期大学講師で『日本に恋した台湾人』などの著書で知られる謝 雅梅さん
にお話を伺った。
「やはり歴史背景は大きいですね。日本統治時代(1895〜1945年)、
その目的はどうであれ、日本が台湾のインフラを整備したことは今でも高く
評価されてます。72歳になる私の父は、小学校4年生まで日本の教育を受け
ましたが、不思議と日本人に立ち居振る舞いも似てくるんですね。いわゆる
日本の頑固親父と一緒(笑)」
では、65年生まれの謝さんや若い世代にも親日派が多いのはなぜ?
「私の世代の場合、反日教育も受けましたが、父の世代からいい印象も聞いて
います。日本のテレビ番組や雑誌なども昔からあって、よく見てました。今、
20代くらいの若者には、日本の音楽やファッション、マンガやゲームなどの
サブカルチャーが人気です。彼らの世代になると、もう日本との歴史をよく
知らないんですよ。台湾も、日本のようにアメリカの影響は大きいんですが、
やはり同じアジアの日本文化の方が肌に合う。これは一過性の流行ではなく、
親日感情は昔から繋がっているんです」(同)
http://headlines.yahoo.co.jp/hl?a=20070802-00000002-rec_r-int
「一番尊敬する国」「一番移住したい国」などの筆頭に日本が挙げられた
そうだ。
そういえば以前、台湾に旅行をした際に、現地で知り合った人に好意的に受け
入れられ、台湾は「親日」なんだと実感したことがある。
でも、どうして台湾は親日なのだろう。
産能短期大学講師で『日本に恋した台湾人』などの著書で知られる謝 雅梅さん
にお話を伺った。
「やはり歴史背景は大きいですね。日本統治時代(1895〜1945年)、
その目的はどうであれ、日本が台湾のインフラを整備したことは今でも高く
評価されてます。72歳になる私の父は、小学校4年生まで日本の教育を受け
ましたが、不思議と日本人に立ち居振る舞いも似てくるんですね。いわゆる
日本の頑固親父と一緒(笑)」
では、65年生まれの謝さんや若い世代にも親日派が多いのはなぜ?
「私の世代の場合、反日教育も受けましたが、父の世代からいい印象も聞いて
います。日本のテレビ番組や雑誌なども昔からあって、よく見てました。今、
20代くらいの若者には、日本の音楽やファッション、マンガやゲームなどの
サブカルチャーが人気です。彼らの世代になると、もう日本との歴史をよく
知らないんですよ。台湾も、日本のようにアメリカの影響は大きいんですが、
やはり同じアジアの日本文化の方が肌に合う。これは一過性の流行ではなく、
親日感情は昔から繋がっているんです」(同)
http://headlines.yahoo.co.jp/hl?a=20070802-00000002-rec_r-int
2012/04/05(木) 16:47:06.60
ライブラリーを利用せずにカーネルを直接呼び出すアプリを作りたいんですが
参考にするにはどんな検索ワードで探せばいいでしょうか?
参考にするにはどんな検索ワードで探せばいいでしょうか?
2012/04/05(木) 16:59:55.74
linux システムコール アセンブラ
2012/04/05(木) 17:26:19.45
>>443
glibcだとこの辺。
sysdeps/mach/i386/syscall.S
http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/mach/i386;h=8a5e953b538c139ffa7fcd4d848dd0eb356e631b;hb=c0da14cdda1fa552262ce3624156194eef43e973
後はsyscallをキーワードにsysdepsの下を彷徨えば、
返り値やsignal絡みのカーネルインターフェースがどうなってるかとかも分かる。
glibcだとこの辺。
sysdeps/mach/i386/syscall.S
http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/mach/i386;h=8a5e953b538c139ffa7fcd4d848dd0eb356e631b;hb=c0da14cdda1fa552262ce3624156194eef43e973
後はsyscallをキーワードにsysdepsの下を彷徨えば、
返り値やsignal絡みのカーネルインターフェースがどうなってるかとかも分かる。
2012/04/05(木) 17:28:21.87
この頃から基本的に変わってないので読んでみるのも楽しいかも。
http://www.amazon.co.jp/Lions%E2%80%99-Commentary-UNIX-Ascii-books/dp/4756118445/
http://www.amazon.co.jp/Lions%E2%80%99-Commentary-UNIX-Ascii-books/dp/4756118445/
2012/04/06(金) 18:23:12.15
2012/04/06(金) 18:27:09.49
strftimeのフォーマットに則ってるかどうかを
格好よく調べる方法ない?
格好よく調べる方法ない?
2012/04/06(金) 22:19:53.98
450デフォルトの名無しさん
2012/04/12(木) 09:27:46.65 XLIBに出てくるATOMって何ですか?
451デフォルトの名無しさん
2012/04/25(水) 19:42:17.01 COMのアウトプロセスサーバーみたいに
プロセス間で一つのオブジェクトを共有し、
一方のプロセスからもう一方のプロセスを制御する方法はありますか?
単に値を共有するだけならpipeやmmapを
使えばいいんでしょうが面倒です。
プロセス間で一つのオブジェクトを共有し、
一方のプロセスからもう一方のプロセスを制御する方法はありますか?
単に値を共有するだけならpipeやmmapを
使えばいいんでしょうが面倒です。
452デフォルトの名無しさん
2012/04/26(木) 10:47:00.87 socketとかsignalで通信するのは駄目なの?
453デフォルトの名無しさん
2012/04/26(木) 12:40:04.59 mmapすら面倒ならマルチスレッドで作るとか
454デフォルトの名無しさん
2012/04/26(木) 23:12:18.99 CPU、GPUを利用(プログラム)するには?
http://togetter.com/li/293863
http://togetter.com/li/293863
455デフォルトの名無しさん
2012/04/26(木) 23:33:13.30 >>451
dbus使えば?
dbus使えば?
456デフォルトの名無しさん
2012/04/28(土) 20:54:43.28 sigactionについての質問です。
古いソースではsigvecを使っていて、ちゃんとそれが動いているんだけど
私が使っているsignal.hヘッダの中にはsigvecが定義されていません。
どうして動くんでしょうか
古いソースではsigvecを使っていて、ちゃんとそれが動いているんだけど
私が使っているsignal.hヘッダの中にはsigvecが定義されていません。
どうして動くんでしょうか
457デフォルトの名無しさん
2012/04/29(日) 03:02:46.33 obsoleteだから、特に指定しないとcompileは出来ないけど、linkは出来るようになっているんでしょう。
458デフォルトの名無しさん
2012/05/01(火) 15:44:20.25459デフォルトの名無しさん
2012/05/01(火) 15:54:40.31 シェアードメモリ?
460デフォルトの名無しさん
2012/05/01(火) 16:02:34.37 分散オブジェクト?
461デフォルトの名無しさん
2012/05/01(火) 16:07:08.30 単にExcelの制御みたいな感じで、プロセスとか接続気にせず操作したいだけです
462デフォルトの名無しさん
2012/05/01(火) 16:30:28.03 こういうのかなぁ
ttp://ja.wikipedia.org/wiki/Open_Network_Computing_Remote_Procedure_Call
ttp://ja.wikipedia.org/wiki/Open_Network_Computing_Remote_Procedure_Call
463デフォルトの名無しさん
2012/05/01(火) 16:44:26.49464デフォルトの名無しさん
2012/05/01(火) 23:29:29.48 こんばんは。
DJBのqmailとかdaemontoolsのソースを見てて疑問に思いました。
DJBの str_*** のような文字列に対する関数って
for(;;)の中で1文字ごとの処理を連続4回書いてあるのですが、
これって何かメリットがあるのでしょうか?
この人の書くことだから、何か意味はありそうに思えるのだけども。
/* 例えばDJBのstr_len.c */
unsigned int str_len(const char *s) {
const char *t;
t = s;
for (;;) {
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
}
}
↓↓↓これでいいように思える↓↓↓
unsigned int str_len(const char *s) {
const char *t;
t = s;
for (;;) {
if (!*t) return t - s; ++t;
}
}
DJBのqmailとかdaemontoolsのソースを見てて疑問に思いました。
DJBの str_*** のような文字列に対する関数って
for(;;)の中で1文字ごとの処理を連続4回書いてあるのですが、
これって何かメリットがあるのでしょうか?
この人の書くことだから、何か意味はありそうに思えるのだけども。
/* 例えばDJBのstr_len.c */
unsigned int str_len(const char *s) {
const char *t;
t = s;
for (;;) {
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
if (!*t) return t - s; ++t;
}
}
↓↓↓これでいいように思える↓↓↓
unsigned int str_len(const char *s) {
const char *t;
t = s;
for (;;) {
if (!*t) return t - s; ++t;
}
}
465デフォルトの名無しさん
2012/05/02(水) 04:35:53.91 つ loop unrolling
466464
2012/05/02(水) 12:10:30.82 >>465
loop unrollingっての知らなかったです。
ひとつ賢くなりました!
Wikipedia: “毎回の繰り返しごとに発生する「ループの終了」条件のテストを
減少させる(もしくはなくす)事によって、実行速度を向上させる”
・・ですね。
でも、「ループの終了」条件のテストをforにいれず、
結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
あと一応、測定してみましたが、4行に分けるより、
1行にまとめたほうがわずかばかり速そうです。
※VMware上 Linux x86_64 gcc4.4.6 -O3 で、100000000回ループを30回測定
(なんでそういう結果が出たかは調べていません)
それとも、やっぱり状況によっては 4行書いたほうが最適化とかかかって
速くなったりするものなのでしょうか。
loop unrollingっての知らなかったです。
ひとつ賢くなりました!
Wikipedia: “毎回の繰り返しごとに発生する「ループの終了」条件のテストを
減少させる(もしくはなくす)事によって、実行速度を向上させる”
・・ですね。
でも、「ループの終了」条件のテストをforにいれず、
結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
あと一応、測定してみましたが、4行に分けるより、
1行にまとめたほうがわずかばかり速そうです。
※VMware上 Linux x86_64 gcc4.4.6 -O3 で、100000000回ループを30回測定
(なんでそういう結果が出たかは調べていません)
それとも、やっぱり状況によっては 4行書いたほうが最適化とかかかって
速くなったりするものなのでしょうか。
467デフォルトの名無しさん
2012/05/02(水) 15:45:45.03 ていうか、djbのスタイルを参考にするのはやめれ。
根性で標準ライブラリを使わん、とか、癖があり過ぎる。
根性で標準ライブラリを使わん、とか、癖があり過ぎる。
468デフォルトの名無しさん
2012/05/02(水) 15:55:45.32 >>466
速度に関する最適化は、普通にコーディングした後に、どうしても速度的な要件を満たせてないときに
限って、ボトルネックがどこか「実際に測定して場所を特定」してから行うもの。
数nsレベルの調整なんかしなくていい。
速度に関する最適化は、普通にコーディングした後に、どうしても速度的な要件を満たせてないときに
限って、ボトルネックがどこか「実際に測定して場所を特定」してから行うもの。
数nsレベルの調整なんかしなくていい。
469464
2012/05/02(水) 16:43:21.92 もちろんスタイルをまねする気も、速度を気にしてるわけではないですよ。
普通の人から見たら、ただの縛りプレイにしかみえないですし。
ただ、偏執狂なんていわれるほどの人だから、
この意味無いように見えるコードも何かあるのかな、と。
daemontoolsはよく使いますので、
コードも見てみようと思ったのが発端です。
普通の人から見たら、ただの縛りプレイにしかみえないですし。
ただ、偏執狂なんていわれるほどの人だから、
この意味無いように見えるコードも何かあるのかな、と。
daemontoolsはよく使いますので、
コードも見てみようと思ったのが発端です。
470デフォルトの名無しさん
2012/05/02(水) 18:07:50.56 本当に意味わかんないなこれ。
4bytes コピーして最適化したつもりが気が変わって無理矢理戻したとか、いや違うな。
素直に strlen() 使った方が最適化してくれていいのになあ。
4bytes コピーして最適化したつもりが気が変わって無理矢理戻したとか、いや違うな。
素直に strlen() 使った方が最適化してくれていいのになあ。
471デフォルトの名無しさん
2012/05/02(水) 18:49:53.19 どうせ最適化がかかるだろうし無駄な書き方ならライセンスで面倒なことが起きないとか?
472デフォルトの名無しさん
2012/05/02(水) 19:01:32.57 >>466
>でも、「ループの終了」条件のテストをforにいれず、
>結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
そう思う。さらにループ内でtの値が変化するから並列化も期待できないし。
ちなみに>>445の人を真似して(syscallでとんでもないものを紹介してたのはアレだが)
glibcのstrlenを見ると、
http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=string/strlen.c;hb=c0da14cdda1fa552262ce3624156194eef43e973
まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
もしあったら詳細に調べるみたいな感じのことをしてる。
インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178
>でも、「ループの終了」条件のテストをforにいれず、
>結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
そう思う。さらにループ内でtの値が変化するから並列化も期待できないし。
ちなみに>>445の人を真似して(syscallでとんでもないものを紹介してたのはアレだが)
glibcのstrlenを見ると、
http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=string/strlen.c;hb=c0da14cdda1fa552262ce3624156194eef43e973
まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
もしあったら詳細に調べるみたいな感じのことをしてる。
インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178
473デフォルトの名無しさん
2012/05/02(水) 19:07:11.52 いずれにしろ、その部分が、全体の90%の時間を食ってる、10%のコードだ、
ということがわかってからでいいことだな。
ということがわかってからでいいことだな。
474464
2012/05/02(水) 21:40:41.21 結局なにがしたいんだか分からないなー。
>>472
>まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
>もしあったら詳細に調べるみたいな感じのことをしてる。
>インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178
glibcのstrlen、すごいことしてるんですね。
特にビット演算のマジックナンバーが全然意味分かりませんでしたが、
説明をググったら解説があって、なんとなく分かったような気にはなりました。
なんすか、よく思いつくなと。
もう一個のアセンブラのほうは、
ニーモニックが全然分かってないので辛くて読んでませんが、
とにかく、案外、工夫のしがいがあるものなんですね。
>>472
>まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
>もしあったら詳細に調べるみたいな感じのことをしてる。
>インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178
glibcのstrlen、すごいことしてるんですね。
特にビット演算のマジックナンバーが全然意味分かりませんでしたが、
説明をググったら解説があって、なんとなく分かったような気にはなりました。
なんすか、よく思いつくなと。
もう一個のアセンブラのほうは、
ニーモニックが全然分かってないので辛くて読んでませんが、
とにかく、案外、工夫のしがいがあるものなんですね。
475デフォルトの名無しさん
2012/05/05(土) 16:38:05.82 非分岐時のみ投機実行のあるRISC系のCPUなら4行展開して意味ありそう。
けどCPUのアーキテクチャにベタベタに依存するコードだし、
遅延スロット埋める投機実行はもっと高度になってるから活躍の場は殆ど無いだろうね。
けどCPUのアーキテクチャにベタベタに依存するコードだし、
遅延スロット埋める投機実行はもっと高度になってるから活躍の場は殆ど無いだろうね。
476デフォルトの名無しさん
2012/06/01(金) 01:43:26.38 シェルスクリプトの質問なんですが、
いちいち別のサーバにログインしたりするのがめんどいので、
一つのシェルスクリプトで、
ローカルマシンとリモートマシンの実行結果を
マージしたりする仕組みって無いんですかね?
#!/bin/sh
num1=$HOME
num2=@$HOME<-例えば@の後ろに何か処理を書くとその処理は設定されたリモートで実行される
echo $num1<-ローカルの$HOME
echo $num2<-リモートの$HOME
いちいち別のサーバにログインしたりするのがめんどいので、
一つのシェルスクリプトで、
ローカルマシンとリモートマシンの実行結果を
マージしたりする仕組みって無いんですかね?
#!/bin/sh
num1=$HOME
num2=@$HOME<-例えば@の後ろに何か処理を書くとその処理は設定されたリモートで実行される
echo $num1<-ローカルの$HOME
echo $num2<-リモートの$HOME
477デフォルトの名無しさん
2012/06/01(金) 11:26:58.67 man rsh
man ssh
man ssh
478デフォルトの名無しさん
2012/06/27(水) 18:49:44.31 Linuxで、ライブラリとかにデバッグ用のシンボルが付いてるかどうかって
どうやったら調べられましたっけ。
どうやったら調べられましたっけ。
479デフォルトの名無しさん
2012/06/27(水) 19:36:48.08 fileコマンドでstrippedと出るか出ないか、かな?
480デフォルトの名無しさん
2012/06/27(水) 19:48:46.08 nm -a
481デフォルトの名無しさん
2012/06/30(土) 07:43:47.53 ncursesのC++実装について分かる方教えてください
482481
2012/06/30(土) 08:23:23.34 自己解決しました
483デフォルトの名無しさん
2012/07/01(日) 22:18:43.78 マルチバイト文字を出力する方法がわかったのですが、
複雑なので他の方の参考になるように
ここに書いておきます
/* cc -o test test.c -lcursesw */
#define _XOPEN_SOURCE_EXTENDED
#include <curses.h>
#include <wchar.h>
#include <locale.h>
int main() {
cchar_t ch;
wchar_t wc[2] = L"あ";
setlocale(LC_ALL, "");
initscr();
setcchar(&ch, wc, 0, 0, NULL);
add_wch(&ch);
getch();
endwin();
return 0;
}
複雑なので他の方の参考になるように
ここに書いておきます
/* cc -o test test.c -lcursesw */
#define _XOPEN_SOURCE_EXTENDED
#include <curses.h>
#include <wchar.h>
#include <locale.h>
int main() {
cchar_t ch;
wchar_t wc[2] = L"あ";
setlocale(LC_ALL, "");
initscr();
setcchar(&ch, wc, 0, 0, NULL);
add_wch(&ch);
getch();
endwin();
return 0;
}
484デフォルトの名無しさん
2012/07/10(火) 04:13:32.60 >>466
アセンブラに直せばわかるのに
アセンブラに直せばわかるのに
485デフォルトの名無しさん
2012/07/10(火) 18:27:57.31 >>483
これじゃ駄目なの?
$ cat test.c
#include <stdio.h>
int main() {
puts("あ");
return 0;
}
$ gcc -o test test.c
$ ./test
あ
これじゃ駄目なの?
$ cat test.c
#include <stdio.h>
int main() {
puts("あ");
return 0;
}
$ gcc -o test test.c
$ ./test
あ
486デフォルトの名無しさん
2012/07/10(火) 18:44:35.03 >>485
cursesでマルチバイト文字をどう扱うかって話だよ
cursesでマルチバイト文字をどう扱うかって話だよ
487デフォルトの名無しさん
2012/07/12(木) 01:18:29.66 素直にncurcesw使えばいいんでないかと思う
488デフォルトの名無しさん
2012/07/25(水) 21:25:11.82 >>484
UNIX界隈にもアセンブリをアセンブラ呼ばわりする人が居るんだな
UNIX界隈にもアセンブリをアセンブラ呼ばわりする人が居るんだな
489デフォルトの名無しさん
2012/07/25(水) 21:35:35.20 アセンブリ言語
490デフォルトの名無しさん
2012/07/28(土) 08:38:10.33 教えてください
静的ライブラリと、LD_PRELOADで指定された共有ライブラリでは、
静的ライブラリのほうが必ず先にロードされる、で正しいでしょうか?
静的ライブラリと、LD_PRELOADで指定された共有ライブラリでは、
静的ライブラリのほうが必ず先にロードされる、で正しいでしょうか?
491デフォルトの名無しさん
2012/07/28(土) 09:26:29.66 静的ライブラリは、実行形式ファイルの生成時にロードされ、リンクされる。
共有ライブラリは、実行形式ファイルの実行時にロードされ、リンクされる。
ということで、タイミングとしては静的ライブラリの方が時間的に早いので
その意味では正しいと思われます。
共有ライブラリは、実行形式ファイルの実行時にロードされ、リンクされる。
ということで、タイミングとしては静的ライブラリの方が時間的に早いので
その意味では正しいと思われます。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 現役猟師・東出昌大、クマ被害続出も過熱する報道に「クマはそんな危ないもんじゃない」理由語る [muffin★]
- イギリス「日本でニュースに関するインフルエンサーを順位付けした」 1位ひろゆき 4位ガレソ 5位池上彰 ガチで終わってると話題に [279254606]
- ハゲがレジやってるコンビニって
- 4時だから窓から4回ちんこ出した
- クマどもが冬眠拒否
- 抜いたことある歴史上の人物
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
