使用C语言编写的Linux Shell的Makefile时出错

时间:2012-04-20 17:11:51

标签: c linux unix makefile

我为我用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之外单独运行这些命令。我设计了程序来处理这些命令,因为这就是作业的用途。

1 个答案:

答案 0 :(得分:1)

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