_syscall() - Unix、Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix有用參考資料
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

_syscall() - Unix、Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

_syscall - 在沒有庫支援的情況下呼叫系統呼叫(已過時)

概要

#include <linux/unistd.h>

A _syscall macro
desired system call

描述

關於系統呼叫,最重要的一點是瞭解其原型。您需要知道有多少個引數、引數的型別以及函式的返回型別。有七個宏可以使實際的系統呼叫更容易。它們的格式如下:

_syscallX(type,name,type1,arg1,type2,arg2,...)

其中

標籤描述
X是0-6,表示系統呼叫接受的引數個數
型別是系統呼叫的返回型別
名稱是系統呼叫的名稱
typeN是第N個引數的型別
argN是第N個引數的名稱

這些宏建立一個名為name的函式,並帶有您指定的引數。將_syscall()包含到您的原始檔中後,您可以透過name呼叫系統呼叫。

檔案

/usr/include/linux/unistd.h

符合標準

使用這些宏是Linux特有的,並且已棄用。

備註

從核心2.6.18左右開始,_syscall宏已從提供給使用者空間的標頭檔案中刪除。請改用syscall(2)。(某些架構,特別是ia64,從未提供_syscall宏;在這些架構上,始終需要syscall(2)。)

_syscall()宏不會生成原型。您可能需要建立一個,尤其對於C++使用者。

系統呼叫不需要只返回正數或負數錯誤程式碼。您需要閱讀原始碼才能確定它是如何返回錯誤的。通常,它是標準錯誤程式碼的負數,例如-EPERM。當r非負時,_syscall()宏將返回系統呼叫的結果r,但當r為負數時,它將返回-1並將變數errno設定為-r。有關錯誤程式碼,請參閱errno(3)。

定義系統呼叫時,引數型別必須透過值傳遞或透過指標傳遞(對於結構體之類的聚合體)。

示例

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h> 
#include <linux/kernel.h>

_syscall1(int, sysinfo, struct sysinfo *, info);

/* Note: if you copy directly from the nroff source, remember to
REMOVE the extra backslashes in the printf statement. */

int main(void)
{
    struct sysinfo s_info;
    int error;

    error = sysinfo(&s_info);
    printf("code error = %d\n", error);
    printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n"
           "RAM: total %lu / free %lu / shared %lu\n"
           "Memory in buffers = %lu\nSwap: total %lu / free %lu\n"
           "Number of processes = %d\n",
           s_info.uptime, s_info.loads[0],
           s_info.loads[1], s_info.loads[2],
           s_info.totalram, s_info.freeram,
           s_info.sharedram, s_info.bufferram,
           s_info.totalswap, s_info.freeswap,
           s_info.procs);
    exit(EXIT_SUCCESS);
}

示例輸出

code error = 0
uptime = 502034s
Load: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: total 15343616 / free 827392 / shared 8237056
Memory in buffers = 5066752
Swap: total 27881472 / free 24698880
Number of processes = 40

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.