- 1 名前:970 [2006/05/18(木) 18:56:16 ]
- UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
前スレ Part7 pc8.2ch.net/test/read.cgi/tech/1127373405/ Part6 pc8.2ch.net/test/read.cgi/tech/1116908090/ 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
- 596 名前:デフォルトの名無しさん [2007/02/21(水) 00:39:37 ]
- whileとforの違いがよくわからないんでお願いします。
あと、最後に;(セミコロン)をつけるのは何のときで、つけないのが何のときか教えてください。 教科書見てもイマイチよくわからなくて・・・
- 597 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:50:04 ]
- >>596
とりあえず使おうとしてる言語はなんなのか言ってみ シェルのことか?
- 598 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:54:39 ]
- あ、すんません。C言語です。
めっちゃ基礎的なことだけどおねがいします。
- 599 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:08:32 ]
- whileもforも繰り返し行う処理(ループ)を行わせるものだが、
while (式) 文 「式を評価(値を求めること)し、それが0でない場合は 文を実行」 を繰り返し行う。 for (式1; 式2; 式3) 文 式1を評価する。 そのあとは、 「式2を評価し、それが0でない場合は 文 を実行。ついで式3を評価」 を繰り返し行う。 つまりは、 式1; while (式2) { 文; 式3; } とほぼ同じ意味。 なお、文とは - 式に;を付けたもの - { 複数の文 } のどちらか。forもwhileも文は1つしかかけないので、複数の文を 繰り返し処理したい場合は { } で囲む。 (実際には1つであっても囲んで構わないし、ヒューマンエラーを避ける 意味ではそのほうが好ましい)
- 600 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:10:09 ]
- C言語なら俺に聞け(入門篇) Part 8
pc10.2ch.net/test/read.cgi/tech/1171946674/ こっち向きだろうね。
- 601 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:11:29 ]
- >>599
ありがとう!なんとなくわかったような・・・わからないような・・・ もっかい教科書見直してみるわ。 >>600 あ、そんなスレあったのか。こんどからはそっちで。
- 602 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:12:40 ]
- 訂正
式1; while (式2) { 文; 式3; } ↓ 式1; while (式2) { 文 式3; } まぁ空文が1つあるかないかだけど。 あと「それが0でない場合」しか書かなかったが、0になったら 繰り返しを終えて次に進む。
- 603 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 20:12:39 ]
- forは式を省略できるが、whileはできないってのも。
永久ループを作るときに、forなら for(;;)文 で大丈夫だけど、whileだと while(1)文 の様に書かないといけない。 これは1を評価するという冗長な意味を持つので、for(;;)の方がよく使われてる。 (;;) <- これが顔文字みたいでかわいいし。
- 604 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:31:32 ]
- >>603
最後の2文はおまいの思いこみだw 面白いけどw
- 605 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:41:24 ]
- while (1)はイデオム化しているので、読むほうも「1が0でない限り」
などとは読まないから問題ない。 生成されるコードも大差ない。 MacOSX 10.4.8, gcc 4.0.1 (Intel) でやってみたら、 while (1) { puts("hello"); } / for (;;) { puts("hello"); } いずれも 「文字列のアドレスをスタックに積んでputsをcallしてループの頭にジャンプ」 という全く同じコードになった。
- 606 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:49:27 ]
- for(;;)は無限ループを表すためだけにANSIが規格化した代物。
- 607 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:37:36 ]
- FreeBSD6.2だと
grep -R 'for *(;;)' /usr/src | wc -l 2322 grep -R 'while *(1)' /usr/src | wc -l 883 だから、やっぱりfor(;;)の方が優勢と思う。 確かにwhile(1)はイデオム化してるから問題はないと思うけど、 もしも、全く最適化をしないコンパイラがあれば、少しだけ無駄なコードになるはず、、 まぁそんなことは重要じゃないので、見た目のいい方を選べばいいと思います。
- 608 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 19:42:26 ]
- 以下のMakefileの
$(OBJS): $(HEADS) Makefile 行は何をしているのでしょうか? ttp://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/template/Makefile.nsrc1bin
- 609 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:02:27 ]
- >>608
スレ違い。
- 610 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:25:06 ]
- >>608
make makes many problems pc11.2ch.net/test/read.cgi/tech/1029599472/ あたりか? 一応答えておくと、 $(OBJS)内のファイルに依存性を追加しているだけ。 この行自体は何もコンパイルしたりしない。 「$(HEADS)のファイルいずれかかMakefileが書き換えられたら $(OBJS)のすべてのファイルはコンパイルし直しとなる」という宣言。
- 611 名前:608 mailto:sage [2007/03/01(木) 21:52:57 ]
- >>610
良くわかりましたありがとうございます 教えて頂いたスレにも書き込もうか迷ったのですが 過疎っており、都合上解答をできるだけ早めに頂きたかったので こちらで質問させていただきました 助かりました >>609 死ねカス 代替案出せないなら黙ってろ
- 612 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:51:45 ]
- カスにカス呼ばわりされてもなぁ。makeスレは過疎ってたって巡回している人は沢山いると思うのだが。
- 613 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:58:01 ]
- >>612
ごめんなさい core吐きまくっててイライラしてて言い過ぎた 次は教えてもらったスレで紳士的に質問しますね
- 614 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 22:03:55 ]
- gccのプリプロセッサだけを使いたかったので、子プロセスでcppを起動して
パイプで出力を受け取ったのですが、EOFが来ません。 メインのプロセスはboost::iostream::file_descriptor_sourceで子プロセスの 出力を読み込んでいます。 どなたかお知恵を…
- 615 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 22:13:13 ]
- 入力を閉じる
- 616 名前:デフォルトの名無しさん [2007/03/17(土) 01:01:16 ]
- ヘタレ組込みPGです。
下記のようなプログラムが既存のものであるんだけど、sigactionをセットした上でスレッドをぼこぼこ作り、各スレッドにシグナル待ちをさせるコードがあるんだけどシグナルハンドらの関数は処理を何もしていません。 これってどういうことを狙ってるとき、処理なしハンドラを設定してるかわからないんですが、教えてもらえませんか? void main(void) { act_SIGINT.sa_handler = funcA; act_SIGINT.sa_mask = *sigset; act_SIGINT.sa_flags = SA_RESETHAND; sigaction(SIGUSR1,&act_SIGINT,NULL) for(int i=0;i<5;i++) { pthread_create(); } funcB(); // 実処理 } funcA{ // 処理なし } funcB{ // 何か処理 pthread_kill(スレッドID,SIGUSR1); }
- 617 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 01:33:49 ]
- どっか別の場所でsigactionしなおしてるんじゃね?
- 618 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:12:48 ]
- 自作のshared objectを作って、その中の関数を呼ぶ別のプログラムを書いたんだが
どうやらshared objectの中にバグがあるようで、落ちる。 shared objectの中でgdbを使ってどこで落ちたのか調べたいのだから shared objectを呼び出してるプログラムにgdbを適応してrunしてもshared objectの中まで 入ってくれない。 shared objectの中身をgdbでデバッグしたい場合はどうすればいいんでしょうか? 教えてください
- 619 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 00:37:58 ]
- >>618
> 自作のshared object のコンパイルオプションは???
- 620 名前:デフォルトの名無しさん [2007/03/29(木) 06:38:54 ]
- プログラムが現在使用しているトータルメモリ量を取得する方法を教えてください
- 621 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 07:40:28 ]
- 先ずはあなたの言う、「プログラムが現在使用しているトータルメモリ量」を定義してください。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 08:40:48 ]
- >>620
/procを使う perlならProc::ProcessTable::Process
- 623 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 11:38:11 ]
- >>621
プログラムが確保したヒープとスタックと 内部でmallocしようとしてるサイズでいいんじゃね? まあmallocで100ギガ確保しても使わなければ メモリは使われないからそれを消費量というかどうかは 定義しなきゃだなぁ
- 624 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:10:03 ]
- mallocした量とmalloc用のヒープ量(sbrk次第?)はまた違うかもしれない。
管理用のデータもあるだろうし。
- 625 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 19:24:14 ]
- >>620
getrusage(2)
- 626 名前:デフォルトの名無しさん [2007/04/10(火) 21:53:49 ]
- Windowsきたねえ!UNIXきれい!
でもWindows使いたい!UNIX使いたくない! ふしぎ!!
- 627 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 08:11:21 ]
- エロゲがみんなUNIXで動いたらどうでしょう。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:02:39 ]
- あるプログラムをFORTRANからCに書き換えています。
FORTRAN内の配列(かなり大きい)を、Cで同じサイズで確保しようとすると、 実行時に確保できない旨のエラーが出てしまいます。 両方とも同じマシン上で動かしているので、空き領域自体はあると思うのですが、 何か良い方法はないでしょうか?
- 629 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:05:23 ]
- ↑エスパー専用
- 630 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:13:58 ]
- >>628
newをつかってみたら?
- 631 名前:630 mailto:sage [2007/04/12(木) 13:14:49 ]
- 動的に確保した方が、大きな値を取れたはず
- 632 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:17:36 ]
- エスパー登場
- 633 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:23:25 ]
- >>628
ソースコンバータで事は足りないの?
- 634 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:01:29 ]
- スタック上に確保しようとして溢れてるってことか。
それならmalloc()とかでヒープに確保しないと。
- 635 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:38:50 ]
- んな面倒なことしないでも、staticで宣言すりゃいいんでないかい。
- 636 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 20:37:23 ]
- ulimit でスタックのサイズをでかくする
- 637 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:25:10 ]
- limitで制限かけてあると思うけどな。
環境変数でも貼ってくれ。
- 638 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 18:44:13 ]
- 64bitマシンで32bitの整数を扱いたいのですが、int寄りも小さくshortよりも大きい整数はないのでしょうか?
C99を使うしかないのでしょうか?
- 639 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:17:07 ]
- OSとコンパイラは?
gccのx86_64版でsizeof(int)は4だよ。
- 640 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:24:49 ]
- >>638
LP64,LLP64,ILP64あたりでググれ。
- 641 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 04:41:26 ]
- intってマシン長じゃないの?
- 642 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 05:12:16 ]
- >>641
違うこともあるお⊂二二二( ^ω^)二⊃。x86_64とか。
- 643 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 06:55:21 ]
- >>641
そうじゃない例はいくらでもあるが。
- 644 名前:質問。 [2007/05/02(水) 03:01:44 ]
- あるプログラムから別のプログラムを立ち上げて、
その標準入出力を掴むプログラムをC言語で作りました。 forkで子スレッドを作って呼び出し先プログラムを実行、 パイプでそのstdin,stdoutを呼び出し元から読み書きするまでに至ったのですが、 呼び出し先としてsshやftpを立ち上げてみると、ログインパスワード要求時の 「Password:」 の表示が標準出力じゃないみたいで、 呼び出し元プログラムを通さず、画面に出てきてしまいます。 一体何故でしょうか? またこれの解決手段は何かありますか?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 03:13:03 ]
- stderrじゃね?
- 646 名前:質問。 mailto:sage [2007/05/02(水) 03:25:07 ]
- >>645
いや、それもしっかり呼び出し元に送ってるんですが・・・。
- 647 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 04:27:16 ]
- >>644
ssh などは /dev/tty にプロンプトを書いてる。
- 648 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 04:31:39 ]
- >>644
たぶん君のやりたいことには、 ttyrecやscriptのソースが参考になる。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 05:25:13 ]
- >>644
> あるプログラムから別のプログラムを立ち上げて、 > その標準入出力を掴むプログラムをC言語で作りました。 そしてこの仕様に(ry
- 650 名前:質問。 mailto:sage [2007/05/02(水) 07:27:32 ]
- ネットでいくらか調べてみたけど。。。
sshの自動ログインのパスワード入力突破はみんな悩んでるみたいね。 専用の鍵を作るだとかとても面倒なことになりそうな勢い。 さて、そろそろ寝るかorz
- 651 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 07:31:36 ]
- そんなもん誰も悩んでないよ。
ssh-agent使えばいいんだから。 プログラミングですらない。
- 652 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 07:33:58 ]
- マウスを操作して自動的にアプリのボタンをクリックするプログラムを作成するくらい不毛な話だ
- 653 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 07:50:53 ]
- それだってtcl/tkのtestsuitsにあるけどなw
- 654 名前:648=651=653 mailto:sage [2007/05/02(水) 17:01:00 ]
- そこでexpectですよ、となるわけかな?
- 655 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 00:29:57 ]
- そこでExpectですよ
→ そしてTclが嫌になる → Perl/Ruby/Pythonとかのexpect風モジュールに逃げる → 本家本元のexpectほどのエレガントさや機能がなくてガクーリ → でもTclの糞さにInline::Tclに逃げたりRuby+Expectとかのハイブリッドコードを書き出す → 他人には理解不能に いやほんとRubyのシンタックスならTclなみにエレガントにExpectできると 思うんだけどね。ベタなコマンドライン的記法にマッチしてるから。
- 656 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 01:17:02 ]
- マジアフォだな。
マウスカーソルを横取りして駆動するドライバとか変な苦労しそう。 キーボードコントローラを乗っ取ってキー入力してみたりとか、GPUプログラミングして表示内容を取得とか。
- 657 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 21:52:44 ]
- 質問をさせていただきます。
UNIX上で動く簡単なftpデーモンを作っています。 アクティブモードでクライアントとデータをやり取りするデータコネクションを繋ぐために、 FTPのPORTコマンドで受け取ったクライアントのIPアドレスとポート番号をsocket関数に渡して ソケットを作り、connect関数でコネクションを繋ぎました。 ここで20番ポートを使ってデータコネクションを繋ぐように本に書いてあったのですが、 サーバー側のポート番号はどこかで指定するのでしょうか? 制御コネクションの接続の時にはbind関数で21番ポートを指定しましたが、それにあたるような 処理がconnect側にも必要なのでしょうか? どこかで根本的な勘違いをしてるのか、調べても解答を探すことができませんでした。 お手数ですが、どなたがご助言をいただけないでしょうか?
- 658 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 00:03:42 ]
- >>657
アクティブモードのデータコネクションは、FTPサーバからクライアントにコネクションを張りに行くわけだから 制御コネクションとは接続方向が逆って辺りは理解している? まぁ、詳しくはネットワークスレを読めばリンクが出てくると思うけど。
- 659 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 01:19:45 ]
- RFCちゃんと読んでる?
- 660 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 06:09:45 ]
- >>657
サーバー側のポート番号を指定するのはPASVの場合
- 661 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:25:23 ]
- PORTとかEPRTのばあいは黙ってconnectすればいい。
PASVとEPSVの場合は、bind-listen-acceptして待ち受けてればいい。
- 662 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 01:19:48 ]
- >>658
その時のsrc portの話だと思われ。 >>657 制御コネクションを21番でbindしてlistenしたように、 データコネクションは20番でbindしてconnectすればいい。 bindせずにconnectすると適当なportが使われる。
- 663 名前:657 mailto:sage [2007/05/12(土) 01:27:58 ]
- >>658-662
たくさんのご助言、ありがとうございました。 bindはacceptする側だけだと思い込んでいて、データコネクション側では20番ポートでbindしていませんでした。 さっそく、bindしてみます。 それでは失礼いたします。
- 664 名前:デフォルトの名無しさん [2007/05/14(月) 21:30:04 ]
- javaファイルをpostscriptに変換して印刷しようとして
a2ps test.java と入力したのですが、印刷されませんでした。 なぜですか?
- 665 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 21:47:58 ]
- >>664
今時の a2ps は, 出力をかってに lpr あたりに食わしてくれるのか?
- 666 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 00:27:25 ]
- はい
|

|