簡體   English   中英

了解 Linux syscall() 的工作原理

[英]Understanding how Linux syscall() works

我試圖了解 Linux syscall() function 期望得到什么。 我正在查看syscallman ,我似乎無法弄清楚參數的數量以及它們代表什么。 在源代碼中:

extern long int syscall (long int __sysno, ...) __THROW;

這是否意味着它可以處理無限數量的參數? 如果不是,哪個參數代表什么?

第二個 arg ...表示可變參數 function - 一個接受可變數量的 args; 常見的例子是printf()和 co。 根據設計,雖然任何可變參數 function 都不知道 args 的數量和類型,但對於syscall() ,正確的 arg-count 和類型是特定於每個系統調用的,它由__sysno索引,並且應該是一個清單常量,如SYS_exit在系統 header。

盡管 args 的數量大多是無限的,但存在實際限制、性能考慮和拱形差異; 簡而言之,越少越好。

請注意,可變參數函數可以非常通用。 舉個例子:創建你自己的(error_message + exit)可變參數例程,它將錯誤狀態作為第一個參數,然后是printf參數; 參見man stdarg和 vdprintf() 和 vfprintf() 等服務。 雙重好處包括更簡潔的源代碼和更小的文本段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM