- 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/
- 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を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|