Tag: 架构

检查运行的二进制文件是32位还是64位

可以检查应用程序包的二进制进程是否在32位或64位模式下运行,如本问题所述 ,但我可以validation它只适用于GUI进程。 但是,我还需要检查没有GUI但不属于bundle的进程。 因此,在没有调用系统函数或其他可执行文件的情况下,在给定进程pid的情况下,如何测试是否有任何进程在32位或64位模式下运行?

构建C应用程序?

我打算用C开发一个应用程序。我的编程经验一直是面向对象的语言。 因此,在设计应用程序时,我总是在类,接口,inheritance,多态等方面进行思考。 我看过的所有C书都涉及如何用C编程或专注于特定主题,我在C中找不到任何关于应用程序架构的讨论。那么当OOPfunction是什么时,你如何构建一个C应用程序呢?无法使用? 你如何保持一切模块化和组织良好,避免代码重复(没有OOP似乎会有很多代码重复)? 编辑:我不是在寻找’如何在C中编写OOP代码’的答案。 我正在寻找构建C应用程序的标准实践方法,因此它们是模块化的,组织良好。 如果标准的练习方法是破解一些OOPfunction那么这是公平的,但如果不是那么那么就没有必要告诉我沿着那条路走下去。

执行子进程时,OS在哪里存储argv和argc?

我很难理解操作系统如何将数据从父进程的地址空间传递到子进程的地址空间。 也就是说,在一个C程序中,argc和argv在传入main时存储在哪里? 我理解argv本质上是一个双指针。 我不理解的是操作系统在将它们加载到内核后对这些值的作用。 为子进程创建地址空间后,是否会将这些值推送到新空间的堆栈上? 我们显然不想将指针传递给另一个地址空间。 为了记录,我正在使用MIPS32架构。

C:epoll和multithreading

我需要创建专门的HTTP服务器,为此我计划使用epoll sycall,但我想利用多个处理器/核心,我无法提出架构解决方案。 ATM我的想法是跟随:用自己的epoll描述符创建多个线程,主线程接受连接并在线程epoll之间分配它们。 但有没有更好的解决方案? 我可以在高负载架构上阅读哪些书籍/文章/指南? 我只看过C10K的文章,但大多数链接到例子已经死了:(并且仍然没有关于这个主题的深入的书籍:(。 谢谢你的回答。 UPD:请更具体一点,我需要材料和示例(nginx不是一个例子,因为它太复杂,并且有多个抽象层来支持多个系统)。

C中限制性最强的类型是什么意思?

“ C编程语言 ”一书在第8.7节“ 实例 – 存储分配器 ”中讨论了“限制性最强的类型”: 虽然机器各不相同,但对于每台机器都有一个限制性最强的类型:如果限制性最强的类型可以存储在特定地址,则所有其他类型也可以。 在某些机器上,限制最多的类型是double ; 在其他人, int或long就足够了。 在他们的代码中, union header使用long类型对齐。 限制性最强的是什么意思? 它可能是最大的类型(例如, double ),还是有另一种方法?

UART ISR Tx Rx架构

我让事情复杂化了吗? 我正在设计我的代码,通过UART从8051微型到外围设备进行通信。 外设响应来自主机的命令,并且一次只能响应一个命令。 这是一个简单的发送和接收协议。 (tx1,rx1,tx2,rx2,tx3,rx3)每个TX消息以CR终止,每个响应以>终止。 在收到对最后一个的回复之前,我无法发送新消息。 如果我启用该选项,响应也可以在回显打印原始TX消息(但这会导致更多流量) 一个示例消息是: 德克萨斯:你好 RX:世界!> 或者使用echo选项…… 德克萨斯:你好 RX:你好\ rWorld!> 选项A getHello等函数由发送和接收组成。 并行ISR例程将收集传入的字节,并在收到“>”字符时抛出一个标志。 char* getHello(char * buf){ sendMsg(“Hello\r”); delay(10ms); //wait a little bit //wait for receive to come in or timeout to occur while(!receiveFlag || !timeoutFlag); //thrown by ISR receiveMsg(buf); //parse the message and do some other stuff return buf; } […]

跨内存附加。 如何从子进程获取远程地址到父进程

Linux内核版本3.2还具有称为跨内存附加的function。 这是它的链接。 在这方面我无法得到很多帮助。 http://man7.org/linux/man-pages/man2/process_vm_readv.2.html 在语法中,我们需要要写入或读取的远程内存的地址。 我的问题是如果我使用fork(),如何获取此远程内存的地址。 假设我使用跨内存附加从父进程向子进程发送一些内容。 如何从子进程将远程内存的地址发送到父进程?

如何在具有big-endian架构的机器上测试代码?

ideone.com和codepad.org都有Little-Endian架构。 我想在Big-Endian架构的某台机器上测试我的代码(例如 – Solaris – 我没有)。 你知道一些简单的方法吗?

总是检查malloc的内存?

我经常抓住自己做以下事情(在非关键组件中): some_small_struct *ptr=(some_small_struct *) malloc(sizeof(some_small_struct)); ptr->some_member= …; 总之,我为一个小结构分配动态内存,我直接使用它而不检查malloc指针。 我知道程序总是有可能得不到它所要求的内存(呃!)但请考虑以下内容: 如果程序甚至无法为堆中的小型结构获取一些内存,那么可能会出现更大的问题并且它毕竟无关紧要。 此外,如果处理空指针会加剧不稳定的情况呢? (例如,尝试记录条件会调用更多不存在的资源等) 我的推理是否合理(足够)? 更新 : 调试时“safe_malloc”函数非常有用,否则可能会有用 +X访问可以隐藏NULL指针的根本原因 在Linux上,“乐观内存分配”可以影响loom OOM(Out-Of-Memory)条件