【问题标题】:What is a system call in windows written in c?什么是用 c 编写的 windows 中的系统调用?
【发布时间】:2011-07-14 02:46:29
【问题描述】:

什么是用c编写的windows中的系统调用? 在 Google 中找不到关于它的解释。

这就是我们被要求做的事情: 你的任务是实现一个名为 HeadTail 的 Windows 实用程序,它接收一个文件名和一个整数 N 作为其参数,并输出到控制台(标准输出)文件的前 N ​​行,后跟 N 最后行反转。

【问题讨论】:

  • 这是一道作业题吗?如果是,请添加作业标签。
  • 不是,有人要求我用系统调用写一些东西,但我不知道它们是什么。
  • 您可能想发布您被要求写的内容,以便人们更好地了解您想要做什么。
  • 我很困惑——您的任务是编写 HeadTail,还是使用 Windows 系统调用编写 HeadTail?也就是说,如果你直接使用Windows系统调用写HeadTail而不用你的代码,你是否满足了赋值?
  • 我只需要使用系统调用

标签: c windows system


【解决方案1】:

http://en.wikipedia.org/wiki/System_call

在计算中,系统调用是程序如何从操作系统内核请求它通常无权运行的服务。系统调用提供进程和操作系统之间的接口。大多数与系统交互的操作都需要用户级进程不可用的权限,例如使用系统上存在的设备执行 I/O,或与其他进程进行任何形式的通信都需要使用系统调用。

例如fopen 不是系统调用,ReadFile 是。

或更多信息System call vs Function call

【讨论】:

  • 你能解释一下如何在c中使用它吗?
  • @Vadiklk:从ntdll.dll导入一些函数并调用它们。
  • 你能举个例子吗?
  • ReadFile 不是系统调用。 NtReadFile 是。
  • @The GiG: NtCreateFile 不是系统调用?
【解决方案2】:

从 kernel32.dll 和 advapi32.dll 导出的所有核心 Windows API 通常都被视为系统调用(还有其他的,并且有较低级别的 API,但这可能会满足您的要求(较低级别的 API 没有文档,而且更难使用))。

要在您的 C 应用程序中使用它们,如果您使用的是 Visual Studio 或 Windows SDK 构建环境,您只需添加:

#include <windows.h>

到您的源文件。然后,您可以从 C 程序中进行任何 API 调用。

链接应用程序时可能需要添加 kernel32.lib。

【讨论】:

  • +1 我喜欢。 kernel32.dll 和 advapi32.dll 通常被认为是系统调用非常简单。
猜你喜欢
  • 2013-09-13
  • 2010-11-08
  • 1970-01-01
  • 2020-08-17
  • 2021-05-01
  • 1970-01-01
  • 2015-06-17
  • 2013-07-19
相关资源
最近更新 更多