- 1 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 13:14:50 ]
- UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
前スレ Part5 pc8.2ch.net/test/read.cgi/tech/1105723117/ Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/ Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/ Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/ Part1 pc2.2ch.net/tech/kako/992/992057422.html Part3のミラー makimo.to/2ch/pc5_tech/1085/1085930894.html Part2のミラー makimo.to/2ch/pc5_tech/1055/1055110889.html 関連スレ Cygwin使っている人いますか? その14 (UNIX板) pc8.2ch.net/test/read.cgi/unix/1107587275/ Cygwin使っている人いますか? 3 (Windows板) pc8.2ch.net/test/read.cgi/win/1090131123/ 関連板 pc8.2ch.net/unix/ pc8.2ch.net/linux/
- 892 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 11:18:54 ]
- vimのようにスクリーン全体を書き変えるようなプログラムの画面出力を得るにはどうしたらよいのでしょうか?
- 893 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 11:52:01 ]
- vram上のデータをファイルに書きだせばいい。
- 894 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 11:55:49 ]
- >>892
・画面のイメージが欲しい。 ・画面全体を文字列として取得したい。 ・vimの出力するコントロールシーケンスを取得した。 どれ?
- 895 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 12:17:45 ]
- >>894
二番目か三番目です。そのへんも良くわからないもので…
- 896 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 12:20:00 ]
- >>894
> ・画面全体を文字列として取得したい。 端末エミュレータでcut&paste > ・vimの出力するコントロールシーケンスを取得した。 script(1)
- 897 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 12:21:02 ]
- あれ? 自分の書いたプログラムで、
自分の書いた画面を知りたいと言うこと? curses(3)を使って画面を書けばあ?
- 898 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 12:24:47 ]
- >>896
おお、ありがとうございます!scriptを使ってみます。
- 899 名前:892=895=898 mailto:sage [2005/09/08(木) 12:27:09 ]
- >>893
vramって何か分かりません… >>897 自分の書いたプログラムから他のプログラムを呼びだして、その画面出力が得られないかと思ったのですが…。
- 900 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 12:30:59 ]
- >>899
scriptはそういう使い方じゃないなあ。 cursesの方が良さそう。>>687>>683
- 901 名前:892 mailto:sage [2005/09/08(木) 12:40:48 ]
- >>900
そうなんですか。。cursesで調べてみます。ありがとうございます!
- 902 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 13:13:26 ]
- >>901
騙されるなキミが調べるべきものは pty だ。
- 903 名前:デフォルトの名無しさん [2005/09/10(土) 12:28:45 ]
- あるプロセスが動いているかどうかを調べるための関数を教えてください。
- 904 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 12:31:03 ]
- ps
- 905 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 12:57:56 ]
- >>903
ttp://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC18
- 906 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 14:35:12 ]
- 困りましたねぇ。
- 907 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 14:42:55 ]
- なんだこの直訳なページは!!
- 908 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 14:51:26 ]
- >>907
>>3
- 909 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 21:54:37 ]
- >>907
書籍じゃないんだから訳が気に入らないなら自分も訳せば?
- 910 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/10(土) 22:45:09 ]
- メモリが'read'になることはできませんでした。
- 911 名前:名無しさん [2005/09/11(日) 08:40:39 ]
- >>892
vim abc.txt |tee vim.log でどう?
- 912 名前:911 [2005/09/11(日) 09:01:00 ]
- あるいは、vim のコマンドを使って適当な行を切り出す。
vim -c ":1,25w! onepage.txt" orig.txt
- 913 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 19:05:01 ]
- オクトデュアル ってなんでしょうか
- 914 名前:名無しさん@そうだ選挙に行こう mailto:sage [2005/09/11(日) 19:10:03 ]
- ググったらすごかった
- 915 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 09:54:37 ]
- Emacsやviより統合開発環境を使った方がわかり易くないでしょうか?
- 916 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 09:58:27 ]
- Σ(´д`) えっ このすれは大学生、院生、趣味人 しかいないって本当ですか?
- 917 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 10:15:59 ]
- 本当です
- 918 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 14:10:34 ]
- 趣味人ってのが範囲広すぎるな。。。
(一応)社会人の俺もあてはまってしまうではないか。
- 919 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 14:18:35 ]
- 社会人に(一応)と付ける意味がわからん。
NEETってこと?
- 920 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 15:04:12 ]
- >>913-
スレ違い
- 921 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 15:36:29 ]
- >>1-
板違い
- 922 名前:名無しさん [2005/09/16(金) 19:59:21 ]
- Advanced Programming in the Unix Environment
だけど、 amazon.com から直接買うのと amazon.co.jp から買うのとどっちが安い?
- 923 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 20:21:59 ]
- しらべりゃば?
- 924 名前:名無しさん [2005/09/16(金) 20:52:18 ]
- 調べた。
amazon.com(古本) + 送料9.79ドル + 日本の消費税 = 7848円 (3週間以上かかる?) amazon.co.jp(新本) + 送料無料 + (税込み) = 8734円 (数日)
- 925 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 08:41:08 ]
- ついでに買いたい洋書の1冊や2冊ないのか?
- 926 名前:名無しさん [2005/09/17(土) 13:26:08 ]
- 古本混ぜると1パックにまとまらんのよ
- 927 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 13:46:49 ]
- 自分なら値段が少し高くついても、面倒くさくないほうを選ぶ。
- 928 名前:デフォルトの名無しさん [2005/09/17(土) 18:00:49 ]
- おまいら、MINIXやったか?
- 929 名前:デフォルトの名無しさん [2005/09/17(土) 18:03:52 ]
- けっ、
- 930 名前:名無しさん [2005/09/17(土) 20:19:39 ]
- Advanced Programming in the Unix Environment
第1版 著者Stevens(1999年に死去) 邦訳 『詳解UNIXプログラミング』 第2版 Pagoによる改定版(2005年) (いずれ第2版の邦訳も出るだろう) Linuxについての記述を読んでみたいので買うか。
- 931 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 23:59:20 ]
- カーネルの勉強したいけど、どのへんがおすすめ?
www.amazon.co.jp/exec/obidos/ASIN/0132017997/ www.amazon.co.jp/exec/obidos/ASIN/0596005652/ www.amazon.co.jp/exec/obidos/ASIN/0130313580/ www.amazon.co.jp/exec/obidos/ASIN/0136386776/
- 932 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 08:01:52 ]
- FreeBSDじゃダメかね? OS問わないなら、一番読みやすいと思うが。
www.mckusick.com/FreeBSDbook.html 具体的なんじゃなくて、概論だったらこっちがお勧め。 www.amazon.com/exec/obidos/tg/detail/-/0201741962/ タンネンバウムはMINIX(とamoeba)で有名になったけれど、著作は激しくイマイチ。
- 933 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 12:16:16 ]
- 今更FreeBSDのkernelなんか勉強して意味あるのか
LinuxかOpenSolarisだろ
- 934 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 12:50:49 ]
- Solarisだと、↓だな。
Solarisインターナル www.amazon.co.jp/exec/obidos/ASIN/4894714582/
- 935 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 12:52:00 ]
- >>933
基本的な技法はそれほど変わらないよ。 >>931のような人なら。 Linuxはいい本あるかね? 構造がころころ変わるしなあ。
- 936 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 15:34:39 ]
- kernel 2.4以前と2.6以降の違いって言えるか?
おれは、無理。
- 937 名前:名無しさん [2005/09/18(日) 21:25:27 ]
- つ www-6.ibm.com/jp/developerworks/linux/031121/j_l-inside.html
- 938 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 21:28:20 ]
- ↑ブラクラ
- 939 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 23:36:06 ]
- さすがにdeveloperWorksをブラクラって言っても誰も引っかからないと思う
- 940 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 11:43:21 ]
- おれはURLだけ張って澄まし顔の奴が許せない
- 941 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 13:04:58 ]
- なぐっていいよ
- 942 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:03:15 ]
- 仕事上Linuxカーネルの仕様変更は0.0.0.1単位で把握してるけど
こういうのって御当地カップラーメンのバージョンいくつ覚えてるか とかいうのと大差無いどうでもいい知識なんだよな。面白いけど。
- 943 名前:デフォルトの名無しさん [2005/09/19(月) 15:19:54 ]
- ログファイルの再オープン(?)について質問です。
openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2); のようにオープンして出力しているログファイルを、SIGHUP受信時に 再オープンしたいのですが、 signal(SIGHUP,sighup_handler); ... void sighup_handler(int signal) { closelog(); openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2); } では、処理以降にログが記録されなくなってしまいました。 GoogleやKodersなどで調べてみてもこれというものが見つからなかったのですが 正しい処理の書き方はどのようにすればいいのでしょうか?
- 944 名前:943 mailto:sage [2005/09/19(月) 15:26:41 ]
- 補足です。
最終的にログローテートを正常に行いたいわけですが、/etc/syslog.conf に local2.*/var/log/test.log とした上で、/etc/logrotate.d/syslog に /var/log/test.log { postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } と書いたのですが、ローテート後のログファイルには何も出力されませんでした。 それでプログラム側でもSIGHUPで何かしないとだめなのかと思ったのですが。。。
- 945 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:48:34 ]
- >>943
やり方はだいたいOKだから closelogとopenlogを疑うしかないな openlog内のファイルの開き方が特に心配だ
- 946 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 16:00:27 ]
- 経験的にはcloselog呼ばずにもう1回openlog()呼べば上手く行くことが多い
- 947 名前:943 mailto:sage [2005/09/19(月) 16:02:03 ]
- ありがとうございます。
openlog()で開いてsyslog()で出力しているだけなので、openlog()の処理が 実際どのように行われているか分かりません…。渡している引数がおかしかったり するのでしょうか? それと環境を書いていませんでした。RedHat9(gcc3.2.2, glibc2.3.2)です。 単純なサーバプログラムの練習で書いています。
- 948 名前:943 mailto:sage [2005/09/19(月) 16:24:38 ]
- >>946
ありがとうございます。 試してみましたが、ファイル名を変更しても以前のログファイルにそのまま 追記されてしまいました。 根本的な質問で恐縮ですが、syslogにログを出力する場合にログローテートに 必要なこととは何なのでしょうか? ・アプリケーション側でHUPシグナル受信時などにログファイルを再オープン ・syslogdを再起動 ↑上記は二つとも必要でしょうか?
- 949 名前:943 mailto:sage [2005/09/19(月) 16:26:42 ]
- すみません。>>943のopenlog()の部分ですが手写しだったので
間違っていました。訂正いたします。 誤: openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2); 正: openlog("test", LOG_NDELAY|LOG_PID, LOG_LOCAL2);
- 950 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 16:51:07 ]
- 書かれるログはsyslogが握ってるんだから出力するデーモン側では
何もする必要ないだろ。 syslogdが腐ってるんじゃないの? それになんでわざわざkillのエラー出力を捨ててるのさ。
- 951 名前:943 mailto:sage [2005/09/19(月) 18:00:21 ]
- ありがとうございます。
syslogに出力している場合、syslogdを再起動(またはHUP)するだけで 良いということですね。ローテート後にログが出力されなくなるのは別の 原因かもしれませんので、もう少し調べてみます。 killのエラー出力を捨てているのは、/etc/logrotate.d/syslog の他の デフォルト記述がそうなっていたので流用していました。
- 952 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 18:06:38 ]
- 別にsyslogdの動作が標準で決まっているわけじゃないので、
SIGHUP送ればどうとかそんなことは環境依存。少なくとも最近の OSに同梱のsyslogdなら、ローテートするためのコマンドが一緒に ついてくるか、ローテートする方法がマニュアルに書いてある はずだが。 どっちも無いとしたらそのロクでもない環境を恨め。
- 953 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 18:14:01 ]
- syslog(3)はsyslogdにログを送る関数で、
ログローテイトはsyslogd側の仕事。 殆んどの場合、SIGHUPでsyslogdがログファイルをreopenする。 ただし、新しいファイルはtouch(1)などで作成してやる必要があることが多い。 >>945>>946は、かなり無知だから、知らないことは黙っているように。
- 954 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 18:37:40 ]
- SIGPIPEってシグナルハンドラで捉えることができないのでしょう
か? 下のプログラムを実行してもシグナルハンドラが呼ばれず、一瞬で 終了してしまいます。linuxとsolarisでテストしてみました。 #include <stdio.h> #include <unistd.h> #include <signal.h> void f(int a) { printf("sigpipe\n"); } int main(int argc, char **argv) { int fds[2]; pipe(fds); close(fds[0]); write(fds[1], "hoge", 4); signal(SIGPIPE, f); sleep(100); return 0; }
- 955 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 18:44:24 ]
- >>953
syslogがsyslogdにログを送る関数なんて決まってないんだが LinuxとBSDしか触ってないとこういう人間になるんだろうか
- 956 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 19:00:45 ]
- >>953
ちょっと誤解を招きそうな書き方じゃないか? syslogdはHUPを受けてクチをパクパクするだけで ログローテート自体はnewsyslog(ないし類似品)の仕事。 どのみちsyslogを吐くプログラムの知ったことではないんだが。 >>954 KILLとSTOP以外は捕捉できる筈だが。他のttyでkillを使ってSIGPIPEを 送ってみたか? 言っておくが、writeより後に設定したシグナルハンドラが時空を遡って 機能するなんてことはないぞ普通。 >>955 質問からsyslogdが存在するシステムなのは明らかなんだから別に構わないだろ。 この質問でimplementation-defined logging facilityがsyslogd以外であることを 想定する奴はいないだろ。
- 957 名前:954 mailto:sage [2005/09/19(月) 19:47:06 ]
- >>956
すいません。あほでした。writeを後にしたらシグナルハンドラが 呼ばれました。
- 958 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 19:53:54 ]
- >>954
$ cat tt.c #include <stdio.h> #include <unistd.h> #include <signal.h> void f(int a) { fprintf(stderr, "sigpipe\n"); fflush(stderr); } int main(int argc, char **argv) { signal(SIGPIPE, f); for (;;) { printf("This is a test\n"); fflush(stdout); } return 0; } $ ./a.out | echo sigpipe sigpipe sigpipe
- 959 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 17:39:45 ]
- fork、ドキュメント呼んでも全然わかりません
小さいプログラムのソースと挙動から都合のいい解釈してます でダメだししてほしいんですけども intforked = -1; int main() { fork(); } int fork() { if (forked == -1) forked = 0; return (forked = main()); } else { return (forked); } } この自作forkはforkっぽいですか?全然話になりません?
- 960 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 17:44:22 ]
- >>959
なにがやりたいの?
- 961 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 18:11:49 ]
- >>959
pthreadあたりと混同してるね
- 962 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 18:16:53 ]
- 自前で fork できたら大変w
- 963 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 18:22:44 ]
- >960
やりたい事はとりあえず理解したいです あれであってます?forkがpidだけ違う複製(子)を生成します。て各所で書かれてますが forkは己を呼ぶって事ですよね?どこを呼ぶんんでしょうか、もーまるごと疑問ですよ 根本が間違ってると思うんで質問しづらいんですけども switch(fork()) { case 0: exec(); } こんなコードとか見かけるんですけど forkしてからexec()呼んだりするのは 何のメリットがあるんでしょうか 普通にexec()呼ぶコード見かけません
- 964 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 18:51:25 ]
- fork() は現在のプロセスと同じ内容の新しいプロセスを生成する。
exec() は現在のプロセスに別のプログラムをロードして実行する。 fork() してから exec() すれば、現在のプロセスはそのまま実行しつつ、 新しいプロセスで別のプログラムを実行することができる。 fork() しないで exec() すれば、現在のプログラムは別のプログラムに置き換わってしまう。
- 965 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 18:51:52 ]
- >>963
そのコードだと、fork()でプロセスがコピーされた後は 親プロセスも子プロセスもswitch()で真偽の評価を行う。 fork()の返り値は親と子で異なるから そのswitchによって親と子の動作が分岐する。 「普通にexec()呼ぶ」と1つのプロセスが他のプログラムに化けるだけ。 それに対してfork()してexec()呼ぶとマルチプロセスになる。
- 966 名前:965 mailto:sage [2005/09/20(火) 18:57:13 ]
- >>965
>親プロセスも子プロセスもswitch()で真偽の評価を行う。 ミスった。 「親プロセスも子プロセスもswitch()で値の評価を行う」が正しい。
- 967 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 19:54:03 ]
- fork()した瞬間を堺に、実行してるプロセスが二つに分裂する。
fork()した途端にパラレルワールドができると思え。 そのパラレルワールドは元の世界とまったく同じだが、 ひとつだけ、fork() の戻り値と、親の pid だけが違う。
- 968 名前:963 mailto:sage [2005/09/20(火) 20:21:53 ]
- >965,967
すっごい、今その事を頭にいれて読み直しました。で 親はforkの戻り値がおおー、 子のプロセスが再度同じfork通って、おおーー これ子もwait通っていいの?おおーすげーーーー とか自己完結の連発です。上手く言えません ぐっときましたありがとう。更に深めにのめり込んで見ます これ2重人格だ
- 969 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 20:27:51 ]
- ちょっと微笑ましいね
- 970 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 20:34:43 ]
- >>968
> 子のプロセスが再度同じfork通って、おおーー メモリの中身も全く同じ分身(子プロセス)が出来て、 そいつはfork()を返るところから始まるんですよ。 ただpidや帰り値が違うと。
- 971 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 04:54:25 ]
- でも実際、fork() のインターフェースは奇怪だよなぁ…。
なんかもっと上手い方法は無かったんかね。
- 972 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 04:58:57 ]
- いや、とてもよくできている。
*BSDのrfork()もpretty!
- 973 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 12:16:54 ]
- 漏れもとても使い勝手が良いとおもう>>fork
Windows の CreateProcess みたいな一見すっきりしたAPIだと、 新プロセスに情報を渡すのが面倒。
- 974 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 13:43:43 ]
- >>973
すっきりしてるかなあ? まあWin32のプロセスは親子の結び付きが弱いような気はしますな。
- 975 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 14:08:17 ]
- Win32は、
・コンセプト単純 ・関数仕様複雑 ・機能貧弱 POSIX fork()は、 ・コンセプト抽象的 ・関数仕様超単純 ・(モデルが)高機能 fork()に戸惑う人は、抽象的なコンセプトにやられていると思われ fork/joinモデルよりも、分身が出来るという概念に。
- 976 名前:デフォルトの名無しさん [2005/09/21(水) 17:12:14 ]
- Linux環境で、getopt()を使ってるプログラムをgdbでデバッグ
してるんだけど、いくらgetopt()してもoptindをprintコマンド で見るといつも1になってるんです。 コード中でprintf()してoptindを見ると、ちゃんと数字が上がる んだけど。 で、optindのポインタを調べてみたら、gdbでprintしたやつと コード中でprintf()したやつとは違った物になってた。 どうやったらgdbで正しいoptindを見ることが出来ますでしょうか。
- 977 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 20:04:01 ]
- 試さずに適当に答えるが、最適化されちゃってんじゃないのかな。
最適化外してコンパイルしてみればあ。
- 978 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 20:17:42 ]
- libcコンパイルしなおせばいいんだと思うが、そもそも板違い。犬板逝け
- 979 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 20:19:04 ]
- (´・ω・`)
- 980 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 21:13:30 ]
- fork()の仕様が単純とか言ってる奴は池沼ですか
- 981 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 21:20:42 ]
- >>978
逆だろ? callerが、calleeによって変えられたメモリじゃなくて、 registerのみを見てるんだろ? (gdb) printf *(&optind) でどうかな?
- 982 名前:976 [2005/09/22(木) 10:15:47 ]
- 皆様ありがとうございます。
CPUに弱いのでcallerとかcalleeとか全くわからいのですが、 >>981さんの言う (gdb) print *(&optind) でも結局同じでした。 皆さんの環境ではどうなんでしょうか。ちゃんと正しい optind が gdb の print で見れているのでしょうか。 あと、犬板に相応のスレが無いのでここに来た次第です。
- 983 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 10:39:38 ]
- 試してみたけどこのぐらいの簡単なプログラムで確かにその現象がでるな。
#include <stdio.h> #include <unistd.h> extern int optind; int main(int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "abc")) >= 0) { printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind); } }
- 984 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 10:40:20 ]
- ↑をgdbにかけるとこんな感じ。
(gdb) break 9 Breakpoint 1 at 0x8048414: file optind.c, line 9. (gdb) run -a -b Starting program: /home/matsui/a.out -a -b Breakpoint 1, main (argc=3, argv=0xbfdd1884) at optind.c:9 9 while ((opt = getopt(argc, argv, "abc")) >= 0) { (gdb) s 10 printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind); (gdb) s opt=a optind=2 &optind=080496b8 9 while ((opt = getopt(argc, argv, "abc")) >= 0) { (gdb) print optind $1 = 1 (gdb) print &optind $2 = (int *) 0xb7fb07d8 どうなってんのかね?
- 985 名前:>>981 mailto:sage [2005/09/22(木) 11:03:22 ]
- (gdb) print *((int *) 0xb7fb07d8)
すると、正しい値だね。
- 986 名前:>>981 mailto:sage [2005/09/22(木) 11:07:49 ]
- lists.gnu.org/archive/html/bug-gdb/2005-07/msg00002.html
にも報告されてる。 6.0, 6.3でも駄目。
- 987 名前:デフォルトの名無しさん [2005/09/22(木) 15:34:09 ]
- pc8.2ch.net/test/read.cgi/tech/1114223450/
>GNUが低品質なのはconfigureと無関係ではないだろう。 >GNUが低品質なのはconfigureと無関係ではないだろう。 >GNUが低品質なのはconfigureと無関係ではないだろう。
- 988 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:42:27 ]
- GNUって究極の低賃金労働者の粗悪品だろ。
- 989 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:47:22 ]
- そもそもソース配布なんて馬鹿げた思想を排除すべき。
- 990 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:48:14 ]
- まさにこの業界にとっての諸悪の根源だね
- 991 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:50:44 ]
- GDBっつーかGNU謹製のクソさ加減がよくわかった
- 992 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:52:09 ]
- でも、糞UNIXがいまだに生き残ってるのはGNUのおかげなんだよな。
- 993 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:53:36 ]
- SourceForge死ね
- 994 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:56:02 ]
- 価値のあるソフトを作ってください
- 995 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:57:57 ]
- >>98
同意! RMSは反社会的な共産主義者!
- 996 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 15:58:34 ]
- 国にはGPLコードの輸入の禁止措置をとってもらいたい。
このままでは国内産業が壊滅してしまう。
- 997 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 16:00:13 ]
- おれもそう思う。
こういうソース公開の押し付けは、いらないんじゃないかって。
- 998 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 16:01:27 ]
- UNIX向けの商用のソフトが存在しないのは
こいつのせい
- 999 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 16:02:19 ]
- 存在しないオプションを渡した時のoptoptは正しく読めるな。
それから、gdbで、optind = 100としても、メモリ側は書き変わってないけれど、 (gdb) print optind すると、100が出力される。 やはり>>981ということで、メモリをフェッチせずにレジスタを見ているようだ。
- 1000 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 16:02:19 ]
- 次スレ
pc8.2ch.net/test/read.cgi/tech/1114223450/
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|