问题标签 [systems-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
635 浏览

winapi - 如何在 VC++ 中获取硬盘中的隐藏分区?

如何在 VC++ 中获取硬盘中的隐藏分区?

0 投票
1 回答
59 浏览

windows - 我们如何才能收到卷附加通知

当卷附加到文件系统时,在 Windows 上,
Window 资源管理器会检测到卷并自动刷新。

我想知道技术。
程序(包括设备驱动程序)如何获得通知?
-当然,这并不意味着投票。我想收到一个事件(或一条消息)。

我想在附加网络卷(如 SMB)时收到通知。
提前致谢。

0 投票
2 回答
2767 浏览

c++ - 如何从 C++ 程序修改键盘中断(在 Windows XP 下)?

  • 我们有一个小项目(作为我的操作系统课程的一部分)来制作一个修改键盘输入的 Windows 程序,以便它将输入的任何小写字符转换为大写字符(不使用大写锁定)!所以当你在键盘上输入时,你会看到你输入的内容变成了大写!

    • 我通过调用 geninterrupt() 并使用变量 _AH、_AL 使用 Turbo C 很容易地做到了这一点,我必须使用以下方法读取一个字符:

      _AH = 0x07; // 读取没有回显的字符 geninterrupt(0x21); // Dos 中断

    • 然后要将其转换为大写字母,我必须使用以下方法屏蔽第 5 位:

      _AL = _AL & 0xDF; // 用 11011111 屏蔽输入的字符

    • 然后我将使用任何输出例程显示字符。

现在,这个解决方案只能在旧的 C DOS 编译器下工作。但是我们打算做的是通过在 Windows XP 下使用任何现代 C/C++ 编译器来解决这个问题!我首先想到的是修改键盘 ISR 以便它掩盖任何输入字符的第五位以将其变为大写!但我不知道该怎么做。其次,我想创建一个 Win32 控制台程序来执行相同的解决方案(但无济于事)或制作与 Windows 兼容的解决方案,但我仍然不知道要使用哪些功能!第三,我想制作一个直接修改 ISR 以满足我需要的 Windows 程序!我还在寻找如何做到这一点!

所以,如果你能帮助我解决这个问题,我将不胜感激!

先感谢您 !

(我在带有 mingw-GCC 编译器的 intel X86 上使用 Windows XP。)

0 投票
5 回答
2555 浏览

linux - Linux系统编程

我想进入 linux 系统编程,想知道如何处理以及从哪里开始。我来自 Web 开发背景(Python、PHP),但我也知道一些 C 和 C++。

本质上,我想知道:

  1. 学习和追求哪种语言(我认为主要是 C 和 C++)?
  2. 如何/在哪里学习那些特定于系统编程的语言?书籍、网站、博客、教程等。
  3. 我可以从基础开始的其他任何好地方吗?
  4. 有什么好的图书馆可以开始吗?
  5. 我需要什么环境设置(或近似值)?假设 linux 必须在那里,但我有一个 linux 盒子,我很少使用 GUI 登录(总是使用 SSH)。是 GUI 更有帮助还是 VI 编辑器就足够了?(请让我知道这部分问题是否应该转到 serverfault.com

PS:澄清一下,系统编程是指编写设备驱动程序、系统工具、编写 Linux 平台上不存在但在其他平台上的本机应用程序、使用 linux 内核等。

0 投票
2 回答
2105 浏览

operating-system - 使用文件作为两个进程之间通信的方式有哪些缺点?

我有遗留代码,出于性能原因需要改进。我的应用程序包含两个需要交换某些信息的可执行文件。在遗留代码中,一个 exe 写入文件(文件名作为参数传递给 exe),第二个可执行文件首先检查这样的文件是否存在;如果不存在再次检查,当它找到它时,然后继续读取文件的内容。这种方式在两个可执行文件之间传输信息。代码的结构方式,第二个可执行文件在第一次尝试时就成功了。

现在我必须清理这段代码,并且想知道使用文件作为通信手段而不是像管道这样的进程间通信有什么缺点。打开和读取文件比管道更昂贵吗?还有其他缺点吗?您认为性能下降的影响有多大。

遗留代码在 windows 和 linux 上运行。

0 投票
1 回答
1163 浏览

macos - 如何以编程方式获取 OSX 网络服务的连接状态?

在 OS X 系统偏好设置中,当我点击“网络”时,我看到“以太网”旁边有一个绿点,“AirPort”和“火线”旁边有一个红点。这是因为我在通过以太网访问网络和 Internet 时关闭了 AirPort 和 FireWire。

我需要以编程方式确定系统偏好设置中显示的这些网络服务中哪些有绿点,哪些有红点。对于以太网和 FireWire,显示状态为“已连接”或“未连接”,对于 AirPort,显示状态为“打开”或“关闭”。也许其他网络服务有其他状态标签。

我已经挑选了“/Library/Preferences/SystemConfiguration”中的所有 plist 文件,尤其是“preferences.plist”和“NetworkInterfaces.plist”。我可以在那里获得各种信息,例如位置集、网络服务顺序、代理信息(这对我的任务也很重要),但我找不到如何确定给定的网络服务是打开还是关闭——相当于显示绿点。

我也尝试过使用系统配置框架,特别是 SCNetworkConnectionGetStatus 函数,但我得到的只是无效的连接状态。

有谁知道如何实际检索此连接状态信息?

谢谢。

0 投票
1 回答
5080 浏览

.net - 在 Windows 中以编程方式重新启动 USB 设备

我正在开发的某些软件需要存在 USB 设备(我作为 SerialPort 与之交互,带有 USB 到 UART 桥接器)。

有时,在计算机从休眠状态重新启动后,未检测到设备,我无法再通过其串行端口写入或读取设备。必须具有对设备的读/写访问权限。

我不能依赖用户采取任何行动(物理或其他方式),所以我需要一种以编程方式重新启动设备的方法。

我应该如何使用 .NET 框架在 Windows XP/Vista/7 中以编程方式重新启动 USB 设备?

0 投票
2 回答
309 浏览

c - 微优化:将 intptr_t 用于标志/布尔类型

据我了解, intptr_t 的定义因架构而异——它保证能够表示一个指针,该指针可以访问进程的所有统一地址空间。

Nginx(流行的开源网络服务器)定义了一个用作标志(布尔值)的类型,这是一个 typedef 到intptr_t. 现在以 x86-64 架构为例——它可以访问涵盖所有大小操作数的大量指令——为什么将标志定义为 intptr_t ?当然,使用 32 位 bool 类型的传统也符合要求吗?

我已经了解了 32 位 Vs。当我还是一名新开发人员时,我自己争论 8 位布尔值,结论是由于处理器设计的复杂性,32 位布尔值在常见情况下表现更好。那么为什么需要转移到 64 位 bools 呢?

0 投票
2 回答
1059 浏览

c - Windows 上的 libeio

libeio 移植到 Windows 需要什么?

0 投票
2 回答
933 浏览

linux - 通过 Unix 域套接字发送结构

我正在使用 Unix 域套接字在 Linux 中进行一些进程间通信。连接后,客户端使用send向服务器发送一个结构。此结构包含有关客户端的一些信息,包括末尾的标识符字符串。服务器接收刚刚找到的信息并将另一个结构发回。客户端使用recv阻塞,但永远不会得到任何东西。服务器在没有任何错误的情况下完成了发送调用并继续前进。

我在这里缺少一些基本的东西吗?当我通过套接字发送字符串时,双方发送和接收都很好。数据是否必须有一个终止 NULL?这似乎不对...