【问题标题】:About the system calls when writing a simple shell [closed]关于编写简单 shell 时的系统调用 [关闭]
【发布时间】: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" 那么我应该打印出一些错误信息。

我是否正确理解“检查每个系统调用的返回值”的含义?我真的不这么认为,因为赋值描述只是说检查系统调用的返回值,但它没有说明错误消息的格式或在系统调用中发生错误时我应该做什么。谁能给我一些想法?

【问题讨论】:

  • 你可能应该问老师......他们究竟希望你做什么取决于他们。但当然你可以使用常识。例如,如果打开文件失败,则尝试从中读取是没有意义的。如果创建子进程失败,等待它退出是没有意义的。等等。在简单的程序中,唯一明智的选择通常是打印错误(确切的错误编号/消息,以及诸如文件名和失败的系统调用等上下文)并退出。

标签: c shell unix


【解决方案1】:

你的想法是对的。如果系统调用失败,您不希望它只是默默地过去。您需要做出的决定是错误是否严重到足以退出您自己的程序,或者您自己的程序是否可以有意义地继续(是否通过重试系统调用;采取其他一些措施,这可能只是打印一条错误消息;或者忽略它)。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2011-01-23
    • 1970-01-01
    • 2012-10-07
    • 2014-07-23
    相关资源
    最近更新 更多