• ベストアンサー

Cのsystem()に対応するWindows API

C言語そのものの質問でなくてすみません。 Cではsystem()関数を用いてシステムコマンドを実行できますが,Windows APIで同等のものは存在するのでしょうか? ※ShellExecuteでは"dir"や"type"などは使えないため

  • www15
  • お礼率35% (7/20)

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

Cランタイムライブラリにあるsystem()と同等のWin32 APIはCreateProcess()です。 system関数のソースを辿っていくと、最終的にはCreateProcessに行き着くはずです。

www15
質問者

お礼

ソース見てみればよかったんですね・・・。 今回私はCで開発しているわけではなかったので,Windows APIの範囲で出来ないか探してみていたところでした。 ありがとうございました。

その他の回答 (3)

回答No.3

補足です。 system() は、標準関数なので、仕様としては「プログラムを実行する」のではなくて、「標準シェルに引数で指定したコマンドを与える」形になります。 このため、system("dir") も(cmd.exe 経由で)正常に実行されます。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

system()自体はきくはずです。 "dir"や"type"は、内部コマンドといって、コマンドインタープリタが実行を行っており、独立したプログラムではありません。 そのため、system()の引数にdirなどとしても、プログラムが存在しないため動きません。 今回の場合は、system("cmd /c dir");などとすれば動くと思います。

回答No.1

system() は、C言語の標準ライブラリなので、Windows 環境でも使用できますよ。 見た目(DOS プロンプトが立ち上がるので)問題あるとは思いますが。

関連するQ&A

  • c言語ではsystem(・・・) javaでは?

    c言語ではsystem(・・)と書くとコマンドプロセッサ上で 実行してくれます。 http://www.bohyoh.com/CandCPP/C/Library/system.html 例 #include <stdio.h> void main(){ system(dir); } 実行した結果、dirをコマンドプロセッサ上で実行してくれます。 javaで同じことをしたいのですが、どうすればいいのでしょうか。 調べてみた結果わかりませんでした。 できたら簡単なサンプルを教えてくれませんか。 申し訳ありませんが、よろしくお願いします。

  • C言語でWin32API

    C言語を使ってWin32APIを呼び出すような、Windowsプログラミングを始めたいんですが、何かよい本やサイトはご存知ないでしょうか。 Visual C++6.0はあるんで、それを使えばいいと思うんです。 C言語はわかるんですが、Windowsプログラミングに関する知識はほとんどないので、ごく基本的なことから知りたいんです。 WinMain関数というのを書くようなんですが、その書き方すら知りません。  スケルトン(出来れば、それよりもっと基本的なこと)から書いてあるようなものです。

  • C#でAPI利用

    C#でAPI、具体的にはVideo for windowsを使いたいのですが、 やり方がわかりません。APIを読み込む方法からわかりません。 読み込めてしまえば、あとは関数を呼び出せばよいとおもうのですが、、、、 初歩的な質問かもしれませんがよろしくおねがいします。

  • 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関数がうまく 動作しないようです。 どうしたらシステム関数のようなことができますか?

  • SYSTEM関数等を用いて複数のコマンドを打ち込みたい

    こんばんは。C言語初心者のjovanといいます。 初心者のため拙い文章になってしまう可能性があることを初めにお詫びしておきます。 現在SYSTEM関数を使って、コマンドプロンプトでコマンドを実行するプログラムを作成しているのですが、少々困ったことになりました。 というのも、 SYSTEM("cl c:\\temp.c"); などと打ち込むと、ダブルクォーテーション内の記述がコマンドプロンプト上で実行され、コマンドプロンプトが終了されますよね? 私がやりたいのはそれだけではなく、(1)コンパイラをロードし、(2)フォルダを移動し、(3)コンパイルというような動作をコマンドプロンプト上で行わせたいのです。 しかしながら、この3つの動作をSYSTEM関数だけで処理するのは、SYSTEM関数は、1つのコマンドがコマンドプロンプトで実行されるとコマンドプロンプトが終了してしまうという性質上不可能だと思います。少なくとも私の知識上では無理です。 というわけで、SYSTEM関数、または他の関数でもいいのですが、コマンドプロンプト上で複数のコマンドを実行するプログラムはどのように作成したらよいのかを教えてくださると幸いです。

  • APIの使いかたを教えてください

    borland C++でListCamのようなビデオカメラシステムを作成したいと思っています。 ビデオをキャプチャするために、API関数を使って作ろうと思っているのですが、いまいち、よくわかっていません。 どんなAPIを使えばいいのか、どんなソフトをAPIで操作すればいいのか教えてください。

  • java C言語では[system(**)]

    c言語ではコマンドラインに指定の文字列を入れて実行させるには system(***); をつかいますが javaではどのように書くのでしょうか?・ ご教授お願いします。

  • C言語でのディレクトリ作成についての質問です。

    C言語でのディレクトリ作成についての質問です。 Linuxコマンドのmkdir -pコマンドのようなことをC言語で実現したいのですが、 mkdir(dir1/dir2)のようにすると、エラーになってしまいます。 mkdir(dir1)のように階層でないディレクトリを指定した場合はうまくいくのですが・・・ mkdir関数では階層ディレクトリを1度で作成できないのでしょうか。 ディレクトリをたどってmkdirを1回ずつ使用しなければいけないのか、 階層ディレクトリを指定できる関数がほかにあるのか、 ご教授お願いいたします。

  • system関数でCシェルコマンドを実行した時のエラー抑制

    CシェルコマンドをPerl上でsystem関数を使用し実行した時の、 エラーメッセージ抑制について教えてください。 ディレクトリ(DIR1をDIR2に)をコピーする際、 下記のようにしました。 system("cp -r DIR1 DIR2"); ここでもし、なんらかの原因でコピー失敗した場合、 「DIR1がありません。」などと、エラーメッセージが出力されます。 Cシェルでこの様なエラーメッセージを抑制するには cp -r DIR1 DIR2 >& /dev/null と、 することによって、エラーメッセージの抑制は可能になります。 これと、同じ事をPerlで行いたいと思っています。 ご回答よろしくお願いします

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

専門家に質問してみよう