7得票5回答
Linux系统编程

我想学习Linux系统编程,并想知道如何入手和从哪里开始。我有Web开发背景(Python,PHP),也了解一些C和C ++。 基本上,我想知道: 1. 要学习和追求哪种语言(我认为主要是C和C ++)? 2. 如何/在哪里学习这些特定于系统编程的语言?书籍、网站、博客、教程等。 3. 有...

27得票2回答
64位的Windows是否使用KERNEL64?

我用dumpbin查看了一些库,发现所有的64位版本都链接到KERNEL32。在64位Windows中没有KERNEL64吗?如果没有,为什么呢? 我的所有操作系统都是32位的,所以我不能直接查看。通过谷歌搜索找不到有价值的信息,所以我怀疑64位Windows中没有KERNEL64,但是我还...

24得票5回答
对alloca的使用和滥用

我正在开发一个软实时事件处理系统。我希望尽可能减少代码中具有非确定性时间的调用。我需要构建一个包含字符串、数字、时间戳和GUID的消息,可能使用std::vector和boost::variant。 在过去的类似项目中,我一直想使用alloca函数。然而,在研究系统编程文献时,总是会对这个函...

7得票2回答
无法进入系统调用源代码

我已用-g选项编译了我的freebsd libc源代码,现在我可以进入libc函数。 但是,我遇到了无法进入系统调用代码的问题。我已使用-g选项编译了freebsd内核源代码。在设置断点时,GDB会提示关于.S文件的断点信息。在触发断点后,GDB无法进入系统调用源代码。 此外,我还尝试了:...

8得票1回答
使用sigaction()函数,C语言

我正在阅读关于sigaction()的一些资料(来自我的课程笔记),但我不确定我是否理解了这段文字: 信号掩码仅在信号处理程序执行期间计算和安装。 默认情况下,当发生信号时,“sig”信号也会被阻塞。 一旦使用sigaction为特定信号安装了一个操作,它将一直保留,直到另一个操作被显式请...

9得票2回答
如何利用VDSO对象来开发您自己的编程语言?

最近的Linux内核(至少在amd64上)提供了一个神奇的目标文件,名为linux-vdso.so.1,它抽象了系统调用接口到内核,允许内核选择最优的调用约定。如果您使用C语言编写代码,则glibc会自动使用此对象。 现在,如果我想编写一个不使用glibc的程序,我该如何使用这个对象?它所提...

11得票3回答
动态导入的函数能否通过它们的名称唯一识别?

我使用了readelf --dyn-sym my_elf_binary | grep FUNC | grep UND 要显示my_elf_binary中动态导入的函数,具体来说是从.dynsym节中的动态符号表中。示例输出如下: [...] 3: 00000000 0 FUNC ...

9得票3回答
如何以编程方式真正清除删除的文件?

所以,您即将把工作电脑交给同事。您如何确保真正删除了所有个人数据? 重新格式化、重新安装操作系统并不能真正解决问题。 我搜索了一下,发现有些程序可以“擦除”磁盘,例如KillDisk、GuidanceSoftware和HDD Wipe Tool。 这让我想起了这些程序是如何工作的? 我的...

47得票2回答
*nix中select和exceptfds/errorfds的语义

select系统调用需要3个文件描述符集,用于监视文件描述符的可读/可写和“异常”。 我的man page关于exceptfd描述符集并没有说明很多。它的作用是什么?文件描述符上可能会通知哪些类型的异常? 我假设这可能因描述符类型而异......无论是TCP套接字、管道、tty等)。是否有...

12得票4回答
分叉实现

fork系统调用的代码是如何编写的?我想知道一些细节,即一个函数如何可以返回两个不同的值,并且分别给两个不同的进程。简而言之,我想知道fork系统调用是如何实现的?