-1

我为我用 C 编写的一个类创建了一个 Linux shell。该 shell 可以完美地运行诸如 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

我的程序可以在 makefile 之外单独运行这些命令。我设计了程序来处理这些命令,因为这就是分配的目的。

4

1 回答 1

1

所以你说,有道理,tcsetpgrp 来自你的程序输出,对吗?好吧,这与您的 MakeFile 有关,但由于在提交过程中运行程序。您的程序正试图成为一个进程组,因此正试图告诉它的控制终端它是前台进程。但是没有终端,因为你在提交过程中,所以 tcsetpgrp() 抱怨(man tcsetpgrp(3) 获取更多信息)。通常这是无害的,虽然很烦人。

于 2012-04-20T22:15:08.983 回答