• 締切済み

プロセスのファイルディスクリプタ(Windows)

#include<stdio.h>と記述すると実行時に標準入出力が オープンされますが、標準出力がcommand.exe上に出力される仕組みが いまいちよくわかりません。どなたか詳しく教えてもらえないでしょうか

  • shred
  • お礼率75% (18/24)

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・コンソール API には詳しくありませんが、参考になりそうなリンクを貼っておきます。 ・http://www.winapi-database.com/Console/index.html→『コンソール関数』 ・http://support.microsoft.com/default.aspx/kb/190351/ja→『コンソール プロセスを生成して標準ハンドルをリダイレクトする方法』 ・http://www.microsoft.com/japan/msdn/accessibility/general/atg_consoleaccessibility.aspx→『コンソール アクセシビリティ』 ・以上。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

>標準出力がcommand.exe上に出力される仕組み 標準入出力と言うのは、そのハードウェアの デフォルトの入出力先のことを言います。 UNIX系OSでは、それらがオープンされた時、 コンソールへの割り当てが行われます。 つまり、何故コンソールに出力されるかというと、 「標準出力のデフォルトがコンソールに割り当てられているから」 と言うことになります。 #が、何故デフォルトがコンソールなのかは #作った人しか判らない気します。。。

shred
質問者

お礼

回答ありがとうございますm(_ _)m mycommand.exe(自作シェル)を作成してcommand.exeと同様な機能をつけることはできるでしょうか??このとき、標準出力はmycommand.exeのクライアント領域に出力されるとします。 それともcommand.exeはWindowsにとってただのプログラムではない特別なプログラムなのでしょうか??

関連するQ&A

  • WindowsXpProでC言語でCGI

    自宅のXp Proをサーバーにして,Apache2.2やメールサーバを動作させています。昨日,Apacheでssiやcgiを実行可能にして,次のような簡単なプログラムをコンパイルして,hello.exeを作って,試してみました。 #include <stdio.h> #include <conio.h> int main() { printf("Hello"); /*getch();*/ } htmlファイルは, <!--#exec cgi="counter.exe" --> <!--#include file="count.dat" --> <!--#exec cgi="hello.exe" --> としています。実は,counter.exeは自作カウンターなのですが,標準出力が表示されず,しかたなく,#includeでカウンタファイルの値を表示させています。hello.exeも同様にファイルに書き出して,includeすれば大丈夫なのでしょうが,いろいろな資料やhpを見る限り,上記ソースのように標準出力でできるはずだと思うのです・・・。 Windowsをサーバにした場合は,標準出力は表示されないのでしょうか? どなたか,アドバイスいただけないでしょうか。

    • ベストアンサー
    • CGI
  • printf文で"という文字を出力したい

    #include <stdio.h> #include <stdlib.h> #include <string.h> main() { printf("a"b"c\n"); } 標準出力でa"b"cと出力したいのですが、エラーが出てしまいます。 printf文で"を出力することは可能なのでしょうか。 教えてください、お願いします。

  • 子プロセスと親プロセス

    ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。 自分でもいろいろ調べたのですが、わからないので質問させていただきます。 自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。 というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセスとして10回実行する方法がわからなくて困っております。。。 言語はc言語を使ってもらいたいです。以下に自分のプロセスIDと親のプロセスIDを表示するプログラムを付けときます。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(){ pid_t pid; int status; if((pid=fork())==0) printf("I am a child with pid=%d. My parent pid is %d.\n",getpid(),getppid()); else{ wait(&status); exit(EXIT_SUCCESS); }

  • VBS 特定のプロセスが終了した後に、別のプロセスを実行したい

    はじめまして。 VBSの初心者です。 VBSで、あるアプリケーションのsetup.exeを実行し、そのsetup.exeのプロセスが終了したあと、特定のメッセージダイアログを出力したいと思いますが、記述方法が分かりません。。。 どなたか、サンプルの記述方法を教えていただけますでしょうか?

  • BCC Developerについて。

    Borland C++ Compiler、BCC Developerを使って #include <stdio.h> void main(){ printf("Hello C world.\n"); } をメイクしてみたのですが、 インクルードファイル 'stdio.h' をオープンできない 、と表示されコンパイルできませんでした。 環境設定は、コンパイラにbbc32.exeを指定すればいいだけなんでしょうか?よろしくお願いします。

  • C言語の#includeについて

    ただいまC言語の勉強を始めたばかりなのですが、 疑問に思った点があったので質問させていただきます。参考書やweb上で#includeについて調べると、 <stdio.h>なら、<stdio.h>に書かれている内容を含める、<stdio.h>にはC言語を使う上で標準的に使われるものが色々書かれている、例えば、printfを使うための色々な設定であるということで一度は理解できたのですが、「外したらどうなるのだろう」と思い、 外してみたところ、先ほどの状態となんら変わりなく 動作しました。ここで自分がやったプログラムは 初歩的な文字列表示(printf),変数を使った計算(int)です。この場合が別に#includeを最初に記述しなくても良かったパターンだと思うのですが、 では一体どういった時に記述しないと動作しなくなるといった現象が起こるのでしょうか? また、記述しなくてもいい場合はどういった時なのでしょうか?私のレベルは本当に始めたばかりの初心者です。どうぞご教授お願いいたします。

  • アポトーシスのexeファイルを作りたい

    いろいろ処理をして自滅するexeファイルを作りたいのですがアクセスを拒否されます この問題をどのように解決したら良いでしょうか? 処理後自分の入っているディレクトリを削除する方法も教えてください gomi.exeは下記ソースのコンパイル出力です #include <stdio.h> #include <conio.h> #include <dir.h> #include <string> #include <iostream> using namespace std; void main(void) {      ・・・・・・・・・・・・・ system("del gomi.exe"); } 結果:アクセスは拒否されました.

  • llc system("dir").c

    llcのDOSコンパイラでsystem("dir");というソースを 含めると、その部分で実行時に 正しいコマンド インタープリタの名前を入力してください. (例 : C:\COMMAND.COM) >> というメッセージが表示されます。 #include <iostream.h> int main() { system("dir"); return 0; } このソースをDOSコンパイラ用に書き換えたいのです。 #include <stdio.h> int main() { system("dir"); return 0; } このようにするとllcでコンパイルできますが、おそらく #include <stdio.h>しか使っていないためにsystem関数がうまく 動作しないようです。 どうしたらシステム関数のようなことができますか?

  • gccのインクルードパスの確認

    #include <stdio.h> は デフォルトのインクルードパス(/usr/include/)からstdio.hファイルを 探しますよね? http://oshiete1.goo.ne.jp/kotaeru.php3?q=2006018 ここに書いてあるように gcc -print-search-dirs を実行してみたのですが、/usr/include の記述は 含まれていませんでした。 http://www.sra.co.jp/wingnut/gcc/gcc-j.html で-print-search-dirsのオプションの意味を見てみましたがよくわかりませんでした。

  • メモリ確保の謎。

    C言語のメモリの確保の所でふと疑問に思ったのですが、 malloc,calloc,realloc,memset,memcpyなどの関数を使うときって #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <malloc.h> とか書かないといけないと本にはありますが、#include <stdio.h>だけで なんのエラーにもならずに実行できてしまうのはなぜでしょうか? 実際のプログラムにはmallocとreallocしか使ってないのですが、#include <stdio.h>でできてしまいます。 でも教科書には他にも書かなきゃいけないとかいてありますが、なぜ書かなくても実行できてしまうのでしょうか?

専門家に質問してみよう