-1

C で記述されたクラスの 1 つに Linux シェルを作成しました。シェルは、ls、pwd、ps、top、cd などのコマンドを実行して完全に動作します。

ただし、MakeFile を使用すると (送信プロセスの一部であるため)、ターミナルで「make test」コマンドを使用するtcsetpgrp: Inappropriate ioctl for device"と、プログラムのすべての正しい出力の中でエラーが発生します。Makefile 内ではtest: test.txt | .project4.c、test.txt がコンマではなく改行で区切られたコマンド、ls、pwd、ps、top、cd になっています。このエラーは何ですか?どうすれば解消できますか?

これが私のメイクファイルです:

PAWPRINT=myname

project4:

clean:
    rm -f *.o

nuke:
    rm -f *.o project4 *.gz

test: project4
    cat test.txt | ./project4   

submit.sh:
    wget -O submit.sh http://somewebsite.com/submit.sh
    chmod +x submit.sh

project4.tar.gz: project4.c test.txt Makefile
    mkdir -p dist
    cp $^ dist
    tar -cvzf $@ dist

 submit: submit.sh project4.tar.gz
    PAWPRINT=$(PAWPRINT) sh submit.sh project4.tar.gz

ここに私のtest.txtファイルがあります:

sleep 1000 &
jobs
pwd
ls
echo hello > a.txt
echo world > b.txt
cat a.txt b.txt > c.txt
cat c.txt

私のプログラムは、メイクファイルの外でこれらのコマンドを個別に実行できます。これらのコマンドを処理するようにプログラムを設計しました。これが割り当ての目的だからです。

4

1 に答える 1

1

つまり、当然のことながら、tcsetpgrpはプログラム出力から来ているということですか?これはMakeFileと関係がありますが、送信プロセス内でプログラムを実行した結果です。あなたのプログラムはプロセスグループになろうとしているので、それがフォアグラウンドプロセスであることを制御端末に伝えようとしています。ただし、送信プロセス内にいるため、端末はありません。そのため、tcsetpgrp()は文句を言います(詳細については、man tcsetpgrp(3))。迷惑ですが、一般的にこれは無害です。

于 2012-04-20T22:15:08.983 に答える