11

C で簡単なシェルをコーディングしようとしていますが、sys/wait.h を使用できません。私のコードはそれと同じです:

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(void) {
    char command[BUFSIZ];
    int status;
    pid_t pid;

    for(;;) {
        printf("simpsh: ");
        if(fgets(command, sizeof(command), stdin) == NULL) {
        printf("\n");
        return 0;
   }

   command[strlen(command) - 1] = '\0';
   if((pid = fork()) == 0)
   execlp(command, command, 0);

   while(wait(&status) != pid)
   continue;

   printf("\n");
   }

}

私はdev-C++を使用していますが、結果は次のとおりです。

[Error] sys/wait.h: No such file or directory

ここで何が問題なのですか?また、C または C++ で単純なシェルを作成するための提案があれば、リンクまたはコードを教えてください。ありがとう!

4

1 に答える 1

6

http://sourceforge.net/p/dev-cpp/discussion/48211/thread/e32720b4から

TextTiling/util.c:8:22: sys/wait.h: そのようなファイルやディレクトリはありません TextTiling/util.c:26:21: sys/vfs.h: そのようなファイルやディレクトリはありません

これらは OS 固有のファイルですが、Windows ヘッダーではありません。Windows は POSIX API を完全にはサポートしていません。コードをコンパイルして Windows で実行するには、おそらくコードの移植が必要になるでしょう。

おそらく、意図した環境 (おそらく Linux または OSX、いずれかの方法で UNIX に似た環境) でビルドする方がうまくいくでしょう。Cygwin でビルドできるかもしれませんが、それは非常に難しい作業です。

単純な (っぽい) 解決策は、仮想マシンで Linux を実行することです (たとえば、VMWare の無料の VMPlayer または VMServer ツールを使用します)。次に、VM でコードをビルドして実行します。VM は仮想ネットワーク経由で Wi​​ndows マシンにアクセスできるため、必要に応じて Windows 環境に結果とデータを取得できます。

別の問題として、Dev-C++ は、プロジェクトがインストール ディレクトリ (C:\Dev-Cpp) のサブフォルダーにある場合に (明らかにランダムに) 失敗することがあります。

于 2013-08-02T09:59:39.017 に答える