【发布时间】:2014-05-15 17:31:22
【问题描述】:
我有一个任务是关于编写一个简单的 Unix shell。
我的老师说我需要“检查每个系统调用的返回值”。以下是我如何理解“检查每个系统调用的返回值”的含义。
例如,如果我的代码中有这一行:
int returnValue = kill (9999, SIGINT);
/* 9999 is the pid of some process */
如您所知,kill() 调用成功返回 0,如果发生错误则返回 -1。 所以如果 returnValue 实际上是 "-1" 那么我应该打印出一些错误信息。
我是否正确理解“检查每个系统调用的返回值”的含义?我真的不这么认为,因为赋值描述只是说检查系统调用的返回值,但它没有说明错误消息的格式或在系统调用中发生错误时我应该做什么。谁能给我一些想法?
【问题讨论】:
-
你可能应该问老师......他们究竟希望你做什么取决于他们。但当然你可以使用常识。例如,如果打开文件失败,则尝试从中读取是没有意义的。如果创建子进程失败,等待它退出是没有意义的。等等。在简单的程序中,唯一明智的选择通常是打印错误(确切的错误编号/消息,以及诸如文件名和失败的系统调用等上下文)并退出。