2017-04-06 28 views
3

Linuxシステムコールがエラーコードを返す方法を理解しようとしていました。私はtimes()システムコールにぶつかった。この単純なシステムコールユーザ空間へコピーし、いくつかのデータとその操作が成功しなかった場合は戻り-EFAULTLinuxカーネルでエラーコードを返す

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. 負のエラーコードを返すのは一般的ですか? man 2 syscallsから

答えて

3

注:システムコールを呼び出し側に負のエラー番号を返すことによって、失敗を示します。この場合、ラッパー関数は返されたエラー番号を否定(正にする)し、errnoにコピーし、-1をラッパーの呼び出し側に返します。

も、次の回答を参照してください。

関連する問題