目录
摘要:高级编程语言中的系统调用和可移植性。 操作系统的硬件控制功能通常以小型功能集合的形式提供。 这是因为控制硬件是用户的唯一责任。 该语言提供的函数用于在命令提示符下显示字符串。
系统调用和高级编程语言可移植性
操作系统的硬件控制功能通常以一小部分功能集合的形式提供。 这些函数以及调用它们的行为统称为系统调用,即应用程序调用操作系统(系统)的函数。 前面的程序使用了time()和printf()等函数,这些函数内部还使用了系统调用。 我在这里使用“内部”一词是因为在Windows操作系统中,提供诸如返回当前日期和时间或在显示器上显示字符串等功能的系统调用的函数名称是time()或printf()。 。 系统调用在 time() 和 printf() 函数内执行。 这个方法可能看起来有点复杂,但这是有原因的。
高级编程语言(例如 C 语言)独立于任何特定操作系统。 这是因为预计几乎相同的源代码可以在 Windows 和 Linux 上使用。 所以,高级编程语言的工作方式是,它们使用自己的函数名称,并在编译时将其翻译成相应的操作系统系统调用(有时是系统调用的组合)。 换句话说,用高级编程语言编写的应用程序经过编译后,会使用系统调用将其转换为本机代码(图 9-6)。
图9-6高级编程语言中的函数调用经过编译后就变成了系统调用。
一些高级编程语言可以直接进行系统调用。 然而,以这种方式创建的应用程序不便于移植①(通常也称为具有恶意行为的应用程序)。 例如,直接调用Windows系统调用的应用程序显然无法在Linux上运行。
PS:①可移植性是指同一个程序在不同操作系统上运行所需的时间。 所需时间越短,就越便携。
Win编译链接机制
应用和硬件没有关系吗?
用C等高级编程语言开发的Windows应用程序很少能够访问直接控制硬件的指令。 这是因为 Windows 独自负责控制硬件。
但是,Windows 提供了通过应用程序间接控制硬件的方法。 可以使用操作系统提供的系统调用函数来进行硬件控制。 在 Windows 中,系统调用称为 API(图 11-1)。 每个 API 都是由您的应用程序调用的函数。 这些函数的实体存储在 DLL 文件中。
图11-1 应用程序通过操作系统间接控制硬件。
让我们看一个使用系统调用间接控制硬件的示例。 例如,如果要在窗口中显示字符串,可以使用Windows API①的TextOut函数。 TextOut 的语法如代码清单 11-1 所示。 该代码实际上没有任何参数来使其了解硬件。 参数hdc,注释为“设备描述表的句柄”,用于指定绘图对象的标识值,例如字符串或图形,并不代表直接的硬件设备。
代码清单11-1 TextOut函数语法(C语言)
BOOL TextOut(HDC hdc, // 指向字符串的指针int cbString // 字符串中的字符数);
那么 Windows 应该怎么做呢?结果表明,虽然Windows作为硬件直接控制显示,但Windows本身也需要作为软件向CPU传递一定的指令,通过软件控制硬件。
补充说明:脚注
① 如果要将字符串输出到 Windows 或打印机,可以使用 Windows 提供的 TextOut 函数作为 API,但不能使用提供的 printf 函数将字符串打印到窗口或打印机。 。
相关推荐
- 文爱云推荐套餐,美国高防VPS 26元起,香港CN2 GIA 26元起每月
- 华纳云双11超值购买,香港云主机4H4G5M年付费888元,1年免费.com域名(华纳云服务器怎么样)
- HostYun俄罗斯CN2 GIA上线内测,月付10%优惠25.2元起
- 潮翔云雅安/祖庄/十堰/香港/美国/高防云服务器每月39元起35折
- Pia Cloud香港CN2/深圳BGP服务器,洛杉矶CRE,三网回传CN2 GIA,20G防御每月20元起
- AkileCloud美国流量型云服务器,不限流量,可选500M或1000M带宽,235元/月,DNS解锁流媒体
- 10gbiz 香港/洛杉矶 CN2 GIA Line VPS 40% 折扣,起价 2.36 美元/月,香港/日本专用服务器首月 15% 折扣,起价 27.43 美元
- Krypt 云服务器 120 美元/年,2 核/2GB/60GB SSD/3TB,支持 Windows/Linux,洛杉矶/圣何塞
- 恒创科技8月优惠_云服务器低至32元买2送1、买3送2独立服务器时间(恒创科技合法吗?)
- DiyVM香港CN2机房,50元/月-双核,2G内存,50G硬盘,2M带宽(香港托管CDN)
- zlidc(智联IDC):韩国原生IP云服务器,35.9美元/季度,4核/4G内存/50G SSD/300M优质网络@2.5T月流量
- 10gbiz 香港/洛杉矶 VPS 8 月 40% 折扣 每月价格 2.36 美元起,258IP 站点组服务器首月半价(香港 VPS 价格)
- AkkoCloud 圣何塞 CN2GIA/德国 CN2GIA 年费299元起,带宽300-500Mbps
- CloudCone 洛杉矶 CN2 GIA 线路服务器 15-100M 无限流量 82 美元/月起
- 椰草云双11活动:香港云服务器81元/年,香港实体服务器199元/月(特价香港云服务器)
- DediPath 夏季促销 洛杉矶 E3 服务器起价 39 美元/月,纽约服务器起价 49 美元/月
评论前必须登录!
注册