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

■ このスレッドは過去ログ倉庫に格納されています
2011/04/18(月) 17:06:36.77
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 ;
2012/03/10(土) 21:38:45.84
1 スレッドライブラリが用意されている環境ならば、
 #define errno (* __error())
 のようにスレッド毎の変数になっているので安全。
2 システムコールやライブラリでエラーが発生したときに
 errnoが 更新させる仕様なので、コールする前にerrnoを
 クリアする必要はない。しかしerrnoを比較するとこでエ
 ラー判定をしてはいけない。システムコールならば戻り値
 が負、ライブラリならばその仕様に従いエラー判定を行う。
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から引用。どこかで定められているはずだけど、どの規格か知らない
2012/03/10(土) 21:52:08.51
>>391
posix threadならTLSになってる
gccなら -pthreadとか
2012/03/10(土) 21:56:50.40
>>392
>>393
>>394
どうもです

特に、>>392の2は、ああそういうことかとストンと腑に落ちました
2012/03/11(日) 00:47:10.17
どもです(´・ω・`)
2012/03/11(日) 03:03:42.12
>>392
>  スレッド毎の変数

スレッドローカルストレージという言い方が正確だと思います。
2012/03/11(日) 07:12:41.24
>>397
日本語でおk
2012/03/11(日) 07:59:41.37
>>397
例示したマクロだといわゆるTLSなのか、全く別な方法なのか
わからないので、あのような表記にした。
2012/03/11(日) 21:40:09.08
おねがいします。
親子関係にないプロセス(PID既知)の生存を確認するための通常の手法はなんですか?
2012/03/11(日) 21:48:39.59
kill(pid, 0);
2012/03/11(日) 22:47:06.43
ありがとうございます!


・・・というか、一度はmanに目を通しているから、間違いなく読んでいるはずなのだが・・・

恥をかかないと覚えないということか・・・
2012/03/12(月) 00:05:33.16
>>402
全部暗記できちゃうほうが異常者ですよ。
2012/03/12(月) 00:08:19.11
/procという手もある。(OSによっては)
2012/03/14(水) 02:39:31.61
>>403
全部暗記できるなら、その労力を他に向けるべきだな。
そして簡単に全部暗記する能力があるならば、manなど不要てことで。(ry
2012/03/14(水) 10:37:43.36
>>405
頭が弱いのか?
そのぐらい覚えられなくてどうする。余裕だろwwww
2012/03/14(水) 12:12:14.56
>>405
中身はいいけど、目次の暗記は必須だろ
2012/03/14(水) 12:13:49.31
>>405
「どっかで見たなー」 っていう記憶がもっとも大事なんだよ。
2012/03/15(木) 16:20:19.04
「もっとも大事」はどうなんだろう?
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関数に入るのかわかりませんでした。
教えて頂けないでしょうか?


2012/03/16(金) 01:36:39.64
状態名の関数は全部最後に関数を返してるじゃん?
それがカーネルが次に移る状態なのよ。
その状態で、実行すべき処理を記述してある関数を、
状態そのものの代わりにしている。

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の場所が分からないと思うんですけれど...
2012/03/17(土) 11:03:10.55
シングルユーザーシェルのプロセスIDがpidで、
do {
} while (wpid != pid && !requested_transition);
で、親プロセス(init)はシングルユーザーシェルの終了を待っている。
(シングルユーザーシェルはインタラクティブシェル)

> 子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
親がシェルならsuspendして親シェルに戻るけど、親がシェルじゃないから、
シングルユーザーシェルからkill -STOP $$とかやったら固まるでしょ。
それを避けるためにリスタートする。
2012/03/17(土) 16:04:37.77
>>412
シングルユーザモードがなにか理解できてる?
2012/03/17(土) 16:08:03.24
>>413
シングルユーザモードの典型的なセッションは、
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'なんですか?
です。
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;
}
つまり、何も指定しない場合は'-'が答えなんですね。
418410
垢版 |
2012/03/18(日) 05:47:21.65
>つまり、何も指定しない場合は'-'が答えなんですね。
すいません。何も指定しない場合は何もないが正解でした。
suwordなんて関数、初めて見ました。
2012/03/18(日) 22:40:11.06
たしかに「どっかで見たなー」は大事だけど
そのうち「こんなのがあるはずだ」になって
無いものを探して時間を無駄にすることになる
2012/03/18(日) 22:49:00.71
man 9 store
man 9 fetch
man 9 copy
2012/03/19(月) 08:17:04.29
m9(^Д^)プギャー
2012/03/19(月) 09:55:12.39
>>419
30分探して見つからなかったら、「無い」よ
2012/03/19(月) 09:59:41.84
あったはずのものが見つからないと気持ち悪くて他の事が出来ない。
多分精神疾患なんだろう。
2012/03/19(月) 10:13:03.18
あったはずのものが見つからない・・・・

    夢・・・とか
2012/03/19(月) 10:15:31.01
>>424
呪いが解けてよかったな
2012/03/19(月) 10:36:22.33
>>424
あるはずの現実を見ようとしていない状態より遥かにマシだ
2012/03/19(月) 10:46:03.46
存在しないものをプログラミングするとか、
ゴーストを実装するようなもの。
2012/03/19(月) 11:31:33.10
まさにWizard
2012/03/19(月) 11:49:08.41
どどど同邸ちゃうわ・・・!
2012/03/19(月) 12:07:52.39
切迫していなければ
別に回り道したっていいと思うけど
最終的に正しい答えを導き出しているんだし
そのぶん、ソースも読んだだろうし
2012/03/19(月) 13:03:50.05
>>427
つまり応答しないデーモンプログラムとか、
起動しているはずなのにプロセス一覧にでないとか?
無数にプロセスだけを起動しつづけるアプリとか?
2012/03/19(月) 14:19:30.88
ゴーストもいればゾンビもいる
UNIX界はほんまホラーやで
2012/03/19(月) 14:30:39.17
>>431
伺かしか思い浮かばんかった
実装する気ないけど、フレームバッファが使えるOSなら仮想コンソールの背景に立たせることもできるのかな
2012/03/19(月) 14:52:04.58
仮想コンソールの窓越しにしか見えないスタンドのような存在か
2012/03/19(月) 16:05:39.14
みなし児もいる悲しい街なのですよ。
2012/03/19(月) 18:17:26.17
お前ら、非技術的な話題だと食いつき良いな。
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板でまともな回答が帰ってくるとは思えないし
441営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/04/02(月) 02:54:08.78
>>440
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
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絡みのカーネルインターフェースがどうなってるかとかも分かる。
2012/04/05(木) 17:28:21.87
この頃から基本的に変わってないので読んでみるのも楽しいかも。
http://www.amazon.co.jp/Lions%E2%80%99-Commentary-UNIX-Ascii-books/dp/4756118445/
2012/04/06(金) 18:23:12.15
>>445
カーネルによって違うんだからこの情報では不親切では。
それにあえてマイナーなのを紹介しなくても。

>>446
PDP-11とx86が基本的に変わらないというのですね、わかりま... せん。
2012/04/06(金) 18:27:09.49
strftimeのフォーマットに則ってるかどうかを
格好よく調べる方法ない?
2012/04/06(金) 22:19:53.98
>>443
システムコールの実装
in Linuxカーネルインターナル
2012/04/12(木) 09:27:46.65
XLIBに出てくるATOMって何ですか?
2012/04/25(水) 19:42:17.01
COMのアウトプロセスサーバーみたいに
プロセス間で一つのオブジェクトを共有し、
一方のプロセスからもう一方のプロセスを制御する方法はありますか?
単に値を共有するだけならpipeやmmapを
使えばいいんでしょうが面倒です。
2012/04/26(木) 10:47:00.87
socketとかsignalで通信するのは駄目なの?
2012/04/26(木) 12:40:04.59
mmapすら面倒ならマルチスレッドで作るとか
2012/04/26(木) 23:12:18.99
CPU、GPUを利用(プログラム)するには?
http://togetter.com/li/293863
2012/04/26(木) 23:33:13.30
>>451
dbus使えば?
2012/04/28(土) 20:54:43.28
sigactionについての質問です。
古いソースではsigvecを使っていて、ちゃんとそれが動いているんだけど
私が使っているsignal.hヘッダの中にはsigvecが定義されていません。
どうして動くんでしょうか
2012/04/29(日) 03:02:46.33
obsoleteだから、特に指定しないとcompileは出来ないけど、linkは出来るようになっているんでしょう。
2012/05/01(火) 15:44:20.25
>>452
>>453
>>455
アウトプロセスサーバーみたいに、直接(擬似的)他プロセスの
メンバー関数呼んで、ポインターやら値を渡すってのは無理そうですね。
2012/05/01(火) 15:54:40.31
シェアードメモリ?
2012/05/01(火) 16:02:34.37
分散オブジェクト?
2012/05/01(火) 16:07:08.30
単にExcelの制御みたいな感じで、プロセスとか接続気にせず操作したいだけです
2012/05/01(火) 16:30:28.03
こういうのかなぁ
ttp://ja.wikipedia.org/wiki/Open_Network_Computing_Remote_Procedure_Call
2012/05/01(火) 16:44:26.49
>>462
ローカルプロシージャコールができて、引数からオブジェクトを渡せればいいので
そこまでは求めてないです。
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;
 }
}
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行書いたほうが最適化とかかかって
速くなったりするものなのでしょうか。
2012/05/02(水) 15:45:45.03
ていうか、djbのスタイルを参考にするのはやめれ。
根性で標準ライブラリを使わん、とか、癖があり過ぎる。
2012/05/02(水) 15:55:45.32
>>466
速度に関する最適化は、普通にコーディングした後に、どうしても速度的な要件を満たせてないときに
限って、ボトルネックがどこか「実際に測定して場所を特定」してから行うもの。

数nsレベルの調整なんかしなくていい。
469464
垢版 |
2012/05/02(水) 16:43:21.92
もちろんスタイルをまねする気も、速度を気にしてるわけではないですよ。
普通の人から見たら、ただの縛りプレイにしかみえないですし。

ただ、偏執狂なんていわれるほどの人だから、
この意味無いように見えるコードも何かあるのかな、と。

daemontoolsはよく使いますので、
コードも見てみようと思ったのが発端です。
2012/05/02(水) 18:07:50.56
本当に意味わかんないなこれ。
4bytes コピーして最適化したつもりが気が変わって無理矢理戻したとか、いや違うな。
素直に strlen() 使った方が最適化してくれていいのになあ。
2012/05/02(水) 18:49:53.19
どうせ最適化がかかるだろうし無駄な書き方ならライセンスで面倒なことが起きないとか?
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
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、すごいことしてるんですね。
特にビット演算のマジックナンバーが全然意味分かりませんでしたが、
説明をググったら解説があって、なんとなく分かったような気にはなりました。
なんすか、よく思いつくなと。

もう一個のアセンブラのほうは、
ニーモニックが全然分かってないので辛くて読んでませんが、
とにかく、案外、工夫のしがいがあるものなんですね。
2012/05/05(土) 16:38:05.82
非分岐時のみ投機実行のあるRISC系のCPUなら4行展開して意味ありそう。
けどCPUのアーキテクチャにベタベタに依存するコードだし、
遅延スロット埋める投機実行はもっと高度になってるから活躍の場は殆ど無いだろうね。
2012/06/01(金) 01:43:26.38
シェルスクリプトの質問なんですが、
いちいち別のサーバにログインしたりするのがめんどいので、
一つのシェルスクリプトで、
ローカルマシンとリモートマシンの実行結果を
マージしたりする仕組みって無いんですかね?
#!/bin/sh
num1=$HOME
num2=@$HOME<-例えば@の後ろに何か処理を書くとその処理は設定されたリモートで実行される
echo $num1<-ローカルの$HOME
echo $num2<-リモートの$HOME
2012/06/01(金) 11:26:58.67
man rsh
man ssh
2012/06/27(水) 18:49:44.31
Linuxで、ライブラリとかにデバッグ用のシンボルが付いてるかどうかって
どうやったら調べられましたっけ。
2012/06/27(水) 19:36:48.08
fileコマンドでstrippedと出るか出ないか、かな?
2012/06/27(水) 19:48:46.08
nm -a
2012/06/30(土) 07:43:47.53
ncursesのC++実装について分かる方教えてください
482481
垢版 |
2012/06/30(土) 08:23:23.34
自己解決しました
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;
}
2012/07/10(火) 04:13:32.60
>>466
アセンブラに直せばわかるのに
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
2012/07/10(火) 18:44:35.03
>>485
cursesでマルチバイト文字をどう扱うかって話だよ
2012/07/12(木) 01:18:29.66
素直にncurcesw使えばいいんでないかと思う
2012/07/25(水) 21:25:11.82
>>484
UNIX界隈にもアセンブリをアセンブラ呼ばわりする人が居るんだな
2012/07/25(水) 21:35:35.20
アセンブリ言語
490デフォルトの名無しさん
垢版 |
2012/07/28(土) 08:38:10.33
教えてください

静的ライブラリと、LD_PRELOADで指定された共有ライブラリでは、
静的ライブラリのほうが必ず先にロードされる、で正しいでしょうか?
2012/07/28(土) 09:26:29.66
静的ライブラリは、実行形式ファイルの生成時にロードされ、リンクされる。
共有ライブラリは、実行形式ファイルの実行時にロードされ、リンクされる。

ということで、タイミングとしては静的ライブラリの方が時間的に早いので
その意味では正しいと思われます。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況