【问题标题】:returning error code in linux kernel在linux内核中返回错误代码
【发布时间】:2017-09-01 12:50:27
【问题描述】:

我试图了解 Linux 系统调用如何返回错误代码。我碰到了times() 系统调用。这个简单的系统调用将一些数据复制到用户空间,如果该操作不成功,则返回-EFAULT

SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
{
    if (tbuf) {
        struct tms tmp;

        do_sys_times(&tmp);
        if (copy_to_user(tbuf, &tmp, sizeof(struct tms)))
            return -EFAULT;
    }
    force_successful_syscall_return();
    return (long) jiffies_64_to_clock_t(get_jiffies_64());
}

我的问题是:

  1. 为什么是-EFAULT?不应该是EFAULT 没有减号吗?
  2. 返回负错误码是否常见?

【问题讨论】:

    标签: linux-kernel system-calls error-code


    【解决方案1】:

    来自man 2 syscalls

    注意:系统调用通过向调用者返回一个负错误号来指示失败;发生这种情况时,包装器函数否定返回的错误号(使其为正),将其复制到errno,并将-1 返回给包装器的调用者。

    另见下一个答案:

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2017-01-29
      相关资源
      最近更新 更多