Tag: 设计

在C中使用fork()和TCP连接进行设计

关于如何设计以下系统,我有一个问题: 我的系统由几个听取环境的客户构建。 当违反音频阈值时,他们将信息发送到服务器,该服务器让孩子们监听每个连接。 服务器需要来自所有客户端的信息以进行必要的计算。 目前,服务器在UNIX中工作,并且已经分叉连接。 他们是独立工作的。 我想要做的是告诉父母(在服务器中)已经发送了信息,现在是时候处理它了。 我该怎么办 ? 我正在考虑可能的不同方法: 在Unix中使用signal()以某种方式告诉父母发生了什么 转换为线程并使用一些等待和通知function 信号是优选的,但我无法弄清楚如何有效地做到这一点。 因为我的系统中可能发生以下情况: 如果所有客户端成功地将信息发送给他们的服务器的子女,我怎样才能告诉父母我已经准备好了? 不知道/我不确定它将如何处理它们。 服务器可能无法从所有客户端接收信息。 因此,父母必须等待所有孩子一段时间,但不要太久。 所以我猜某种计时器?

我该如何在C库中返回二元运算函数的结果?

我正在研究一个C库,其中一部分涉及一些数学类型并操纵它们。 每种类型都有一个工厂构造函数/析构函数,可以动态分配和释放它们。 例如: /* Example type, but illustrates situation very well. */ typdef struct { float x; float y; float z; } Vector3D; /* Constructor */ Vector* Vector3D_new(float x, float y, float z) { Vector3D* vector = (Vector3D*) malloc(sizeof(Vector3D)); /* Initialization code here…*/ return vector; } /* Destructor */ void Vector3D_destroy(Vector3D* vector) { free(vector); } […]

基础软件设计概念/原理书籍

我需要在我的团队中介绍基本的设计原则。 我正在寻找不仅限于面向对象设计原则的书籍。 它可以涵盖模块化,信息隐藏等概念。仅供参考 – 我们团队中所有项目的实施语言是C.

获取(string#)函数跳过第一个获取请求

我正在为自己的个人休闲和学习做一个项目。 部分内容如下: #include #include wgame() { char string3[12], string2[12], string1[12], string4[12], string5[12]; memset (string1, 0, 11); memset (string2, 0, 11); memset (string3, 0, 11); memset (string4, 0, 11); memset (string5, 0, 11); printf(“reference C correct\n”); printf(“Okay, so you want a game. Here’s one for you\n\n\n”); printf(“This is a word game.\n\n A noun is a person […]

标题背后的基本原理是什么?

我不太明白有一个标题; 它似乎违反了DRY原则! 标头中的所有信息都(可以)包含在实现中。

C语言中结构多态的最佳方法

我正在写一个简单的2d矢量对象。 它将具有x和y分量,以及长度,交叉乘积等方法。 问题是,我希望结构具有许多可能的类型(char,int,float,double等)。 我想知道什么是最好的选择,设计明智,与对象互动? 这是我目前正在考虑的事情: 1.让用户将vector对象传递给专门的函数,例如: Vector2Dt_Dot(Vec2Dt* vector1, Vec2Dt* vector2); 其中’t’是向量的类型。 然而,这种方法的问题在于它不允许不同类型相互交互,所以我不能说计算float vector2d和double vector2d的点积。 第二种方法,以及我倾向于: 2.让用户将矢量对象作为void指针及其类型传递,例如: Vector2D_Dot(void* vector1, unsigned vector1_type, void* vector2, unsigned vector2_type); 显然,这种方法在API方面更紧凑,并且还解决了上述问题,但代价是一些额外的参数和类型安全性。 可能还有其他我不了解的解决方案,但这些是我正在考虑的解决方案。 你觉得最好的方法是什么?

我可以用宏的一些技巧?

在我们的遗留代码中,以及我们的现代代码中,我们使用宏来执行代码生成等的漂亮解决方案。我们使用#和##运算符。 我很好奇其他开发人员如何使用宏来做很酷的事情,如果他们根本使用它们的话。

总是检查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)条件

UML for C编程语言

UML最常用于使用C ++建模系统。 在我的项目中,C是实现语言。 我正在寻找适用于C的UML策略资源。我想在设计过程中使用UML并代表系统的不同方面。

在C中规划和组织应用程序开发的最佳方法是什么?

我只需要在C中编码几次,而且似乎每次都这样做,它就变成了一些无法管理的野兽。 我已经在C#和.Net中完成了大部分编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织。 我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等。这个主题有没有什么好的资源? 另请参阅: 使用来自面向对象的土地的C苦苦挣扎?