问题标签 [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.
c - tcgetsid 与 getsid 函数有何不同?
在阅读“Unix 环境中的高级编程”时,在我看来这两个函数的作用完全相同。
它们都向调用进程返回相同的结果。
那么为什么要设计其中两个呢?
谢谢拉尔斯曼。但是如果一个进程想知道它的会话ID,它可以简单地做getsid(0),在什么情况下进程需要调用tcgetsid(pid)来知道它的会话ID?
c - DBUS 服务器崩溃
我正在使用 Glib 绑定实现 DBUS 对象,并且在返回 GArray 时遇到问题:
当我使用测试客户端调用对象的方法时,出现分段错误:
函数返回后程序崩溃。这是我第一次使用 Glib,所以我可能缺少一些明显的东西。我一直在阅读本教程,并且大多数示例都有效。不幸的是,它没有将数组返回给客户端的示例。
windows - 想了解 Windows 剪贴板内部结构
我有兴趣学习 Windows 系统内部结构和工作原理。我倾向于在 Windows 上学习系统编程。在这种情况下,我很想知道有关 Windows 剪贴板内部功能的一些事情:
- 当我们选择一些文本、图像等并按 Ctrl + C 时,究竟会发生什么?
- 当我们在不同的应用程序中按下 Ctrl + V 时,究竟会发生什么?
- 复制的数据到底在哪里?复制的数据是否进入内核模式内存 - 在所有进程之间共享?
- 复制的数据如何可供不同的进程使用?
我想从系统程序员的角度了解以上问题的答案。
此外,分享任何讨论 Windows 剪贴板内部结构的资源。
c - dlmalloc 的 mspace_malloc 返回奇怪的地址
[我已经解决了这个问题-请在下面查看我的最后一条评论。]
在我的应用程序中,我需要使用我自己的特殊 malloc,基于 Doug Lea 的 dlmalloc:我映射一个匿名文件(使用 mmap),从映射文件的一部分创建一个 mspace,并将 mspace 传递给 mspace_malloc。我发现 mspace_malloc 返回的一些地址不在映射文件的范围内——尽管据我所知,该进程可以很好地写入和读取 malloc 的内存。为什么我会遇到这种行为,我该怎么做才能强制 mspace_malloc 返回 mspace 范围内的地址?
当我运行这个程序时(嗯,上面是一个简化,但不是很多),我看到分配给矩阵的地址在为堆打印的范围内,但是两行的两个地址非常远低于下界——比它低 0x100000000 多!然而我似乎能够读写矩阵。最后一点我觉得令人费解并想理解,但更紧迫的问题是我需要做一些事情来确保 my_malloc 返回的所有地址都在堆范围内,因为我的应用程序的其他部分需要这个。
顺便说一句,请注意我不需要锁定我对 create_mspace 的调用,因为我在这个程序中只使用一个线程。无论如何,我尝试将此参数设置为 1,但我看不出结果有什么不同。
谢谢!
linux-kernel - 内核空间和用户空间进程的内存分配
任何人都可以请提供一些指示吗?
谢谢。
最好的祝福,
桑迪普·辛格
debugging - windows、linux、OSX上调试器的底层细节
可能重复:
调试器如何工作?
我正在尝试了解有关调试器的更多信息。我知道一般调试的基础知识和 Windows 上的一些低级细节。但我想了解更多关于如何实现调试的细节。就像windows、linux、OSX上的硬件和软件中断以及调试器如何附加到正在运行的进程等等。
我不是在寻求答案。我只想从你那里得到一些论文、书籍、链接,我可以在其中了解更多关于这个主题的信息。
感谢您的时间。
c - 分叉实现
fork 系统调用代码是怎么写的。我想知道一个函数如何返回两个不同的值以及返回到两个不同的进程的一些细节。总之想知道fork系统调用是怎么实现的?
ubuntu - Ubuntu中的系统编程
[问题来自 askubuntu.com]
我想进入 Ubuntu 系统编程;具体来说 - 开发和调试设备驱动程序。但是,我不确定如何开始,尽管我之前有为其他开源项目做出贡献的经验。
我有相当多的 Python 编程技能/经验(但我猜这在这里没用),中等的 C 编程技能,良好的调试技能(虽然只有用户模式程序),不错的静态反转技能(更多的是一种爱好)和在这里完成了一个简短(但非常有趣)的内核模块编程教程。
我有几个问题想问。
- 你想给我的任何特别的建议(你必须努力学习的东西)。一个抽象的问题,是的。
- 我已经是 Ubuntu 用户很长时间了,但我不确定我可以从哪里开始提供帮助。鉴于我对设备驱动程序的特殊兴趣,有什么建议吗?推荐阅读材料?我目前正在阅读“Linux 系统编程 - 与内核和 C 库对话”。
- 与设备驱动程序调试相关的推荐阅读材料?
谢谢。
linux - 在 MAC 层访问无线接口 (802.11) (Linux)
我花了最后几天阅读手册页、文档和谷歌提出的任何其他内容,但我想我现在比开始时更加困惑。
这就是我想做的事情:我想在使用 C/C++ 的 Linux 系统上通过无线接口 (802.11) 使用我自己的第 3-x 层协议发送和接收数据包。到目前为止,一切都很好。我不需要信标、关联或任何与 AP/SSID 相关的东西。但是,对于数据传输,我希望 MAC 层表现得“像往常一样”,这意味着单播数据包被 ACK、重传、退避等。我还想享受扩展的 QoS 功能(802.11e 有 4 个队列和不同的访问类别)。另一方面,混杂模式不是问题,我只需要广播数据包和发送到特定站的数据包。
什么是正确的方法?大多数关于原始套接字访问的文档似乎都集中在网络嗅探上,这并没有帮助。我已经玩了一段时间的监控模式,但从我到目前为止所读到的,在监控模式等下接收到的数据包没有被确认。如果没有监控模式,还有什么替代方案?使用ad hoc 模式和 unix 原始套接字?还是我必须摆弄司机?
我不是在寻找一个完整的解决方案,只是一些好的想法,从哪里开始。我通读了 socket(2)、socket(7) 和 packet(7) 的手册页,但这对 MAC 层在不同模式下的行为没有帮助。
提前致谢。
c - vfork() 系统调用中的返回值
考虑以下代码:
在vfork()的情况下,父进程和子进程使用的地址空间相同,因此变量 pid 的单个副本应该在那里。现在我无法理解这个 pid 变量如何具有vfork()返回的两个值,即子级为零,父级非零?
在fork()的情况下,地址空间也会被复制,并且每个子节点和父节点都有两个 pid 变量副本,所以我可以理解在这种情况下,两个不同的副本可以具有由fork()返回的不同值但无法理解在vfork()的情况下, pid 如何有两个由vfork()返回的值?