问题标签 [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++ - RFC /advice:关于安全/不安全的 rpc/事件流协议设计
SSL 对于我想做的事情来说似乎很臃肿,而且我对 OpenSSL 怀有强烈的仇恨(NSS 可能是可用的)。我需要在两个节点之间打开一个 TCP 通道,用于 RPC / 加密 RPC / 事件流 / 加密事件流。我正在使用协议缓冲区来定义和多路复用不同的流量源。
我不想从 SSL 开始。我需要经过身份验证的安全密钥建立(经过身份验证的 diffie-hellman),然后可能需要一个基于块密码的流对象来加密和解密加密的事件流和加密的 RPC。
我的第一个想法是,通过构建 SSL 实现来节省编码时间和设计时间,前提是我可以从 SSL 实现中获取套接字句柄并将其用于未加密交换和加密交换。但这可能最终会成为一个丑陋的实现,据我所知,这样做可能与 ssl 协议不兼容(即 TCP 状态和 SSL 状态之间的强耦合)。
我的第二个想法是,通过打开多个套接字来节省编码时间和设计时间。但众所周知,多套接字协议设计是邪恶的。
第三个想法是,我将加密所有内容,但有问题的服务以高性能事件交换机的能力提供服务,并且它还在同一台机器上运行了一个数据库服务器。这种方法的开销并不令人满意,因为大部分流量都是明文。
所以,这些方法对我来说似乎并不令人满意。因此,我得出的结论是,使用 cryptopp 和 boost::asio 我可以推出自己的解决方案并构建自己的协议(我已经必须这样做)。我是一个非常有能力的系统程序员,并且我有一位了解应用加密技术的工程师。
我完全支持重用,在这种情况下,我希望我可以重用 SSL,但我认为我不能。您可以根据您在类似情况下的经验(您必须设计或使用过网络协议)给我任何建议,我们将不胜感激。给我留下最深刻印象的建议得到了打勾。:D
ps,我的应用程序还需要执行一些奇异的加密,无论如何我都在使用cryptopp。
c - 使用 ReadDirectoryChangesW API 监控目录
我正在尝试e:\test
使用ReadDirectoryChangesW API 监视目录。
我的代码:
我不知道我的代码有什么问题,因为我没有完全理解 ReadDirectoryChangesW 文档,特别是LPOVERLAPPED
参数。
当我运行代码时,我没有得到任何输出,除了一个空白的控制台窗口。有人能指出我正确的方向吗?
谢谢。
c - 如何以编程方式启动 Internet 连接?
我想以编程方式启动宽带 (PPOE) 互联网连接。
我不确定InternetDial是否可以工作,因为文档清楚地表明它使用调制解调器启动与 Internet 的连接。
我尝试搜索 API 函数,但找不到。
我正在尝试创建一个程序,该程序将获取用户名和密码,然后连接到 Internet。类似于这个程序。
现在我只需要 API 函数的名称,因为我想自己实现这个程序。
谢谢。
c - /proc/pid/mem 上的 mmap
有没有人成功地用 Linux 内核 2.6 映射 /proc/pid/mem 文件?我收到 ENODEV(没有此类设备)错误。我的电话看起来像这样:
我通过在调试时查看 /proc/pid/maps 文件来验证,当执行到达此调用时,偏移量的值是堆栈顶部减去 PAGE_SIZE 的值。我还用 ptrace 验证了 mmap 将 errno 设置为 ENODEV。
c - 如何制作一个进程守护进程
我试图了解如何使我的程序成为守护程序。所以我遇到的一些事情通常是,程序执行以下步骤成为守护程序:
- 打电话
fork( )
。 在父级中,调用
exit( )
. 这确保了原始父进程(守护进程的祖父进程)对其子进程终止、守护进程的父进程不再运行以及守护进程不是进程组领导感到满意。最后一点是成功完成下一步的必要条件。Call
setsid( )
,给守护进程一个新的进程组和会话,两者都将它作为领导者。这也确保了该进程没有关联的控制终端(因为该进程刚刚创建了一个新会话,并且不会分配一个)。通过 将工作目录更改为根目录
chdir( )
。这样做是因为继承的工作目录可以位于文件系统上的任何位置。守护进程倾向于在系统正常运行期间运行,并且您不希望保持一些随机目录打开,从而阻止管理员卸载包含该目录的文件系统。关闭所有文件描述符。
- 打开文件描述符 0、1 和 2(标准输入、标准输出和标准错误)并将它们重定向到
/dev/null
.
有人可以给我一个链接到一些程序(如 Apache)的现有源代码,以便我可以更深入地理解这个过程。
operating-system - 硬件支持的操作系统功能
我想知道主要硬件支持的操作系统(通用)功能或其类别。有没有可以参考的链接或参考资料?
multithreading - 相当于 RUSAGE_THREAD 达尔文?
我需要测量 darwin 上单个线程的 cpu 使用率。在 linux 上我使用 getrusage(RUSAGE_THREAD, ...) 但它在 darwin 上不可用。
c - 除了 C 之外,哪些没有运行时的编程语言适合编写编程语言?
我正在研究一种编写玩具编程语言的爱好,部分原因是对其他语言的小烦恼,部分是为了让我能理解它是什么样的,但主要是为了鬼混。
如果它变得非常有用,我不希望它依赖于另一种编程语言的运行时来运行用它编写的程序。也就是说,我希望解释器/编译器本身是一个本地编译到目标操作系统中的程序(语言本身可以被解释/提供运行时)。
除了C之外,还有其他选择吗?有哪些优点/缺点或使用它们?
澄清 1:我不打算使用足够低的级别来编写内核、文件系统、设备驱动程序、引导加载程序。但是,我希望能够管理自己的记忆。
澄清2:由于术语错误/误解,并且由于我已经习惯了在各种操作系统上运行的C运行时,我说C没有运行时/或者我对运行时不感兴趣。表达我真正想要的更好的方式是,我的程序可以本地编译到目标(桌面)操作系统中,而无需从引导语言安装其他软件。
2.1:如果我用python编写编译器/解释器,我不希望发出的可执行文件依赖于python程序。
2.2:如果我使用编译步骤,例如,使用 perl 编译程序,我不希望发出的可执行文件依赖于 libperl.dll/so。
2.3:除了运行时是 C,因为 C 运行时通常安装在几乎所有桌面操作系统上,因为许多核心操作系统工具都依赖它。
c++ - 关于alloca的使用和滥用
我正在开发一个软实时事件处理系统。我想尽量减少我的代码中具有不确定时间的调用。我需要构建一个由字符串、数字、时间戳和 GUID 组成的消息。大概是std::vector
的boost::variant
。
我一直想alloca
在过去的代码中使用类似性质的代码。然而,当人们查看系统编程文献时,总是对这个函数调用非常谨慎。就我个人而言,在过去的 15 年中,我无法想到没有虚拟内存的服务器类机器,而且我知道 Windows 堆栈一次增长一个虚拟内存页面,所以我假设Unices也一样。这里(不再)没有砖墙,堆栈和堆一样可能会用完空间,所以什么给了?为什么人们不喜欢 aloca 呢?我可以想到许多负责任地使用 alloca 的用例(字符串处理任何人?)。
无论如何,我决定测试性能差异(见下文),alloca 和 malloc 之间存在 5 倍的速度差异(测试捕获了我将如何使用 alloca)。那么,事情发生了变化吗?每当我们可以绝对确定对象的生命周期时,我们是否应该将谨慎抛诸脑后并使用alloca
(包裹在 a 中)?std::allocator
我厌倦了生活在恐惧中!
编辑:
好的,所以有限制,对于 Windows,这是一个链接时间限制。对于 Unix,它似乎是可调的。似乎页面对齐的内存分配器是有序的:D 任何人都知道通用的可移植实现:D?
代码:
输出:
--编辑:家用机器、clang 和 google perftools 上的结果--
c - 调用 pthread_join() 后出现分段错误
我使用 POSIX pthread 库编写了以下代码:
在执行代码时,我得到以下输出:
正如我所研究的,调用 pthread_join 的线程(pid2)将阻塞,直到传入参数(pid1)的线程调用 pthread_exit()。pthread_exit() 用于停止特定线程的执行,让所有其他线程继续执行。
我想知道为什么我最后得到了分段错误。
请正确解释我。