无意中看到一句话

stackoverlow 2011-09-20 06:52:21
在unix中大约有90个系统调用(ms-dos中少一些)
---c专家编程

难道unix只有90个API啊?那linux也是?
windows有上千个API啊,是真的么linux这么少
...全文
172 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2011-09-20
  • 打赏
  • 举报
回复
唉, 看了下, 好像冰刀就没 WIN7 版本, 唉...
mLee79 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jackyjkchen 的回复:]

这就差不多了,对了,有什么比较好的ssdt查看工具?我过去用wsyscheck,有驱动的,x64不能用
[/Quote]

Win不是很熟, 我只在虚拟机里跑着64位WIN7, 冰刀有64位版本么, 在冰刀下看了下, WIN SSDT表最后一个该是 NtQueryPortInfomationProcess = 0x11B ...

jackyjkchen 2011-09-20
  • 打赏
  • 举报
回复
这就差不多了,对了,有什么比较好的ssdt查看工具?我过去用wsyscheck,有驱动的,x64不能用
mLee79 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jackyjkchen 的回复:]

Windows的native api是有上千个的,Windows 7得有2000多个

应该还不算那些字符串双版本的,API不光是操作系统的功能,C库里的那些字符串函数、格式化函数什么的API都实现了一份甚至好几份

但是Windows API和和系统调用不是一个层级的,他比系统调用还高一级,毛德操的那本《Windows内核情景分析》貌似这么说的
[/Quote]

那些叫API吧, 不叫NativeAPI , NativeAPI 应该是 ZwCreateFile/NtCreateFile 这样子的 , 这个只有宽字符版本, 像M$Win 下是 CreateFile --> NtCreateFile@ntdll --> int 2e ( sysenter ) --> ZwCreateFile@ntosknl , linux 下是 open( glibc ) --> int 80 --> sys_open( kernel ) , 这样子计算系统调用数量应该比较合理...
mLee79 2011-09-20
  • 打赏
  • 举报
回复
不过M$WIN有些函数不在SSDT里, 像 GetTickCount , getpid 啥的是直接读的 PEB , 再加上10几个这样的函数差不多了, 也算300个左右...
mLee79 2011-09-20
  • 打赏
  • 举报
回复
linux的系统调用应该对应 SSDT 表里的那些Native API, 粗略的看了下 WINXP下是 NtYieldExecution == 0x116 ...
jackyjkchen 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mlee79 的回复:]

linux 2.6.x 下看了下 x86 下是 341 , x64 下是 303 , arm 下是 366 个, 跟 M$差不多...
[/Quote]
Windows的native api是有上千个的,Windows 7得有2000多个

应该还不算那些字符串双版本的,API不光是操作系统的功能,C库里的那些字符串函数、格式化函数什么的API都实现了一份甚至好几份

但是Windows API和和系统调用不是一个层级的,他比系统调用还高一级,毛德操的那本《Windows内核情景分析》貌似这么说的
mLee79 2011-09-20
  • 打赏
  • 举报
回复
linux 2.6.x 下看了下 x86 下是 341 , x64 下是 303 , arm 下是 366 个, 跟 M$差不多...
jackyjkchen 2011-09-20
  • 打赏
  • 举报
回复
unix高级编程说过posix标准至少规定了几百个吧

C专家编程太古旧了
帅得不敢出门 2011-09-20
  • 打赏
  • 举报
回复
include/asm-generic/unistd.h

This file contains the system call numbers, based on the
8 * layout of the x86-64 architecture, which embeds the
9 * pointer to the syscall in the table.

#define __NR_fork 1079

看起来像是1079+1
stackoverlow 2011-09-20
  • 打赏
  • 举报
回复
额。。我百度下怎么说windows有1500-2000个API函数
mLee79 2011-09-20
  • 打赏
  • 举报
回复
*nix系统调用对应的应该是WIN下的Native API, WIN下也没有上千个, 应该不到300个. *nix 现在应该是100多个...

pathuang68 2011-09-20
  • 打赏
  • 举报
回复
系统调用是系统的API,和库函数或者库的API不是一回事。
自由建客 2011-09-20
  • 打赏
  • 举报
回复
系统调用和 API 可不是一个概念!
taodm 2011-09-20
  • 打赏
  • 举报
回复
楼主,c专家编程是哪一年成书的?那个时候的主流pc是啥配置?
modicum_lf 2011-09-20
  • 打赏
  • 举报
回复

API 从广义上来说,指的就是某个系统,
某个平台,某个库提供的应用编程接口.
不仅仅包括系统调用.


帅得不敢出门 2011-09-20
  • 打赏
  • 举报
回复
可以通过查看kernel源码.找到.

查看sys_table大小.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧