我为我用C编写的一个类创建了一个Linux shell。这个shell完美地运行了ls,pwd,ps,top,cd等命令。
但是,使用MakeFile(因为这是提交过程的一部分),当您在终端I中使用命令“make test”时,在我的程序的所有正确输出中得到错误tcsetpgrp: Inappropriate ioctl for device"
。在Makefile中我有test: test.txt | .project4.c
,其中test.txt是命令,ls,pwd,ps,top,cd用换行符而不是逗号分隔。这是什么错误,如何摆脱它?
这是我的makefile:
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之外单独运行这些命令。我设计了程序来处理这些命令,因为这就是作业的用途。
答案 0 :(得分:1)
所以你说,tcsetpgrp是来自你的程序输出吗?这与您的MakeFile有关,但是由于在提交过程中运行程序。您的程序正在尝试成为一个进程组,因此试图告诉其控制终端它是前台进程。但是没有终端,因为你在提交过程中,所以tcsetpgrp()抱怨(man tcsetpgrp(3)获取更多信息)。一般来说,这是无害的,但很烦人。