C 如何使我的服务器同时打开到多个客户端的连接?

我想在MacOS机器上用C编写自己的聊天服务器。现在我想连接到所有联机的客户端,并打开连接,以便能够接收和发送消息。问题是,我只知道如何一次打开一个套接字连接。所以到目前为止只有一个客户可以连接,这样聊天有点无聊;) 一个选项是对库使用多线程。另一种选择是对调用使用异步I/O。使用选择(2),您可以打开一组套接字,然后可以轮询每个套接字以查看其是否有数据。如果它有数据,您就读取它,否则就转到下一个套接字。一个选项是对库使用多线程。另一种选择是对调用使用异步I/O。使用选择(2),您可以打开一组套

C语言中数组字符的转换

为什么我要从控制台获得一个包含以下代码的文件 char array1[] = "Hello World"; char ch = array1; printf(" %s" , ch); (我们被指示不要使用指针执行此操作)因为您需要将ch设置为指向字符的指针。编译器应该警告您正在将字符指针分配给字符变量,并且应该警告您正在尝试对非字符指针变量printf(“%s”)——如果没有,您应该提高编译器的警告级别 只要加上一颗容易被遗忘的小星星,它就能正常工作: #include <std

C 获得证书处理失败

我有一段代码,试图获取远程计算机上用户的凭据,但我无法工作。当前,运行时会产生访问冲突错误(0xc0000005): SEC_WINNT_AUTH_IDENTITY_W identity; ZeroMemory(&identity, sizeof(identity)); identity.Domain = (unsigned short *)_T("DOMAIN"); identity.DomainLength = lstrlenW(_T("DOMAIN")); identity.User

C Windows套接字问题!

我开始了一个学校的项目,当我开始编程时遇到了一些问题!这是我的代码(远未完成): 包含的文件是“winsock2.h”和“ws2tcpp.h”!当我试图编译程序时,我得到了以下输出: ------已启动生成:项目:Ovning1,配置:调试Win32------ Oving.c c:\documents and settings\fredrich\desktop\lokala nätverk\ovning1\ovning1\ovning.c(16):警告C4013:“printf”未定义;假设外

具有非阻塞输入和分叉的Ncurses

我在使用fork()和ncurses在进程之间进行正确的读写时遇到问题。我有一个进程(我称之为子进程)来控制应用程序的输入,还有一个进程(父进程)来控制应用程序的逻辑 我的问题是,我在管道中写东西是为了将信息从儿子发送给父母,但父母什么都不读 由于非阻塞性,我添加了等待和信号,以便在读写时相互排除进程 让我给你看一些代码:) /--pipes,读我不写bloquejants--------- int flags_f0=fcntl(pip_fill[0],F_GETFL); int flags_f

C 如何摆脱循环';谁的任务团队?

我有两种工作要做,foobar1要并行做3次,foobar2要并行做5次。 我的想法是让主线程创建这两个工作组。但我面临一个困难 有可能使线程从并行循环中转义吗?我的意思是在主任务可以执行的地方实现这样一个代码 逃避第一个团队的工作,创建第二个团队 #pragma omp parallel num_threads(8) { // first team of task which will execute the foobar1 function in parallel #pra

C语言中的传递控制

在面向对象编程中,我知道可以在类之间传递控制,这使事情更有条理。我意识到C语言中没有类,因为它不是一种面向对象的编程语言,但是有没有一种方法可以编写一个新的文件,将控制权传递给它?只是为了让事情更简单 我真正想问的是:我如何将控制传递给程序的外部扩展,以及我是否需要使用任何特殊类型的程序(.dll等)。在C中,您可以在函数之间“传递控制”。在C++中,你在类或函数之间传递“控制”。 除此之外,两者几乎没有什么区别:用一种语言编写的程序的行为与用另一种语言编写的类似程序的运行时行为几乎没有区别 也

在C中未正确使用strcmp

我写这个方法是为了找到适合给定小数点的2的最大幂。十进制是字符数组格式,以避免数字存储的输入溢出错误。2的幂是用pow(2,幂)格式的浮点计算的,即8.000000。然后将该数字发送到一个方法,以删除该周期和该轨迹的0。也就是说,8.000000变成了8 1 #include <string.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <memory.h> 5 #inc

从C语言中的压缩位结构中获取历元时间值

我需要从具有以下数据结构的二进制数据文件中找出历元时间(它是一个12字节的结构): 对于字段1和字段2,我没有问题,因为它们可以轻松取出 我需要以历元时间(long)表示的时间值,因为它已被压缩为字节5、6、7、8、3和4,如下所示: 字节5到8(32位字)打包0到31之间的时间值位(字节5有0到7位, 字节6有8到15,字节7有16到23,字节8有24到31) 剩余的10位时间值按如下方式压缩在字节3和字节4中: 字节3有2位:32和33,字节4有其余的位:34到41 所以时间值的总位

C Don';我不知道为什么会出现链接错误

我不知道为什么会出现这种链接错误,我很确定所有的链接都是正确的 gcc -Wall -Wextra -o test driver.c target.c driver.c:8: warning: unused parameter ‘argc’ ld: duplicate symbol _first in /var/folders/yx/31ddgzsj4k97jzvwhfx7tkz00000gn/T//ccw2n48G.o and /var/folders/yx/31ddgzsj4k97jzvw

C 文本被重写了1000次?

嗨,我是c新手,我制作了一个随机数应用程序,如下所示: #import "stdio.h" #import "stdlib.h" #import "time.h" int main (int argc, char *argv[]){ unsigned int iseed = (unsigned int)time(NULL); srand (iseed); int Ran; int N; int max; int min; int dec;

我应该如何组织这个C项目

我正在用C语言做这个编程作业,但我不知道如何组织它 所以,情况是这样的。我有两个树实现,并在两个单独的头文件中声明它们的struct/includes/function原型等等。然后我为这两个实现提供了两个c源代码。现在问题来了。我有一个测试c文件(只有一个用于运行测试的主函数)用于树的ADT。因为这两个实现将使用相同的测试。如何避免制作同一个main.c文件的两个副本?当我包含tree implementation1的头文件时,我可以执行gcc tree\u implementation1.c

C 对于不工作的回路

我想到了一个棘手(尽管是标准)问题的混乱解决方案: 对于给定的用户输入,反转单词的字母 例如: 这是一个标准测试 变成 是的,我是德拉德纳茨 而不是 这是我的梦想 问题的核心是这段代码 while (!iscntrl(user_input[x])) // quit when new line is read { restart: x++; puts("first level test"); if (user_inpu

C 插座清洁

我对unix套接字(TCP本地)有点困惑 我有一个服务器和一个客户端: 客户端通过套接字向服务器发送一些信息(使用发送) 多次 server打印此数据(server调用recv接收数据) 问题是,服务器不仅打印由客户端发送的最后一个信息,而且还打印来自该客户端的一些旧信息(有时已损坏),因此我认为套接字以某种方式累积了客户端写入它的所有以前的数据 服务器如何仅接收来自客户端的最后数据?我应该以某种方式清理套接字,还是应该一直关闭它并创建新的(非常糟糕的解决方案)?TCP套接字是流套接字。 这

sscanf函数更改另一个字符串的内容

我在使用sscanf读取字符串时遇到问题。我已经简化了代码以专注于这个问题。下面是整个代码中的一个函数,它应该打开一个文件并读取一些内容。但是sscanf的行为很奇怪。例如,我声明了一个名为atm的字符串,其内容为'ATOM'。在sscanf之前,它将此字符串打印为ATOM,而在它之后为null。有什么问题吗?我想这一定是分配问题,但我找不到。我尝试了一些关于其他主题的建议,比如用其他东西替换%s,但没有效果 void Get (struct protein p, int mode, int

这个C程序究竟是如何从这个二进制文件中读入数据的?

我的教授给我们展示了一个程序示例,该程序读取粒子结构对象并打印每个粒子的细节。我了解C程序的工作原理,但对包含“结构对象”的“filea”二进制文件感到困惑。如何将数据自动分配给C程序中的结构值?文件a是二进制的,无法理解,所以我不确定它到底是如何工作的,当我问他这件事时,我没有得到明确的答案 节目如下: #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.

C union在Linux进程描述符中的使用

在阅读“理解Linux内核”时,我发现union被用于进程描述符数据结构 union thread_union { struct thread_info thread_info; unsigned long stack[2048]; /* 1024 for 4KB stacks */ }; 当两种数据结构都在使用时,为什么在这里为union使用unionunion thread\u union union thread_union { struct thread_info

C 基本函数指针错误

我有以下代码: #include <stdio.h> #include <conio.h> int fun1 (int); int fun2 (int); int fun3 (int); int (*fun4) (int) = fun1; // 1 void main() { int (*fun4) (int) = fun2; // 2 printf ("%d\n", fun4(3)); printf ("%d\n", fun3(3));

C 如何使用netfilter内核模块从sk_buff读取数据?

我们正在编写一个内核模块来向数据包添加一些额外的数据。我们在skbuff的数据部分的源位置添加了120字节的数据,并试图从目标位置的skbuff中提取这些数据 下面是我们在这两台机器上运行的内核模块代码 #include <linux/kernel.h> #include <linux/module.h> #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> #include

在Windows上获取以C为单位的总交换大小?

我知道如何使用GlobalMemoryStatus()和GlobalMemoryStatusEx()获取总RAM,但如何使用C编程在Windows上获取总交换大小?有关获取页面文件使用和限制的信息,请参阅的文档 ullTotalPageFile 系统或当前进程的当前提交内存限制(以较小者为准),以字节为单位。要获取系统范围的提交内存限制,请调用 ullAvailPageFile 当前进程可以提交的最大内存量(字节)。此值等于或小于系统范围的可用提交值。要计算系统范围内的可用提交值,请调用Comm

最好传递struct或指向struct的指针?

我有一个数据结构,它将在函数中读取 我想要尽可能最小的内存、代码大小和速度。我在做AVR typedef struct { uint16_t clu; uint16_t num; uint32_t cur_rel; } FSAVEPOS; 现在,一个将文件位置存储到结构中的函数: // Approach 1 FSAVEPOS save_pos(const FFILE* file); // return value // Approach 2 void save_pos

读取sscanf()中的可选空白

所以我一直在做一个C项目,我一直在解决这个问题,基本上我在做一个程序,用户可以输入他们的名字,然后我把它打印到一个文件中,用户的名字和姓氏用逗号分开,但是,逗号周围可以有可选的空格。这就是我一直在使用的“读取用户名”: char lastName[20]; char firstName[20]; char line[LINESIZE]; while(fgets(line,LINESIZE,stdin)) { if((sscanf(line,"

C 有没有最简单的方法可以在子进程中等待标志/事件更改?

这是我的示例程序,但它作为标志工作不影响子进程,甚至sem_wait,sem_trywait也不会工作,除了信号和fcntl,是否有其他方法等待特定事件触发 #include "header.h" void main() { int flag = 1; pid_t cpid; sem_t semobj; int value; cpid = fork() ; sem_init ( &semobj, 0, 2); if ( cpid =

C 套接字编程中出现错误10054

我正在用C编写一个套接字编程代码,在同一台计算机上运行一个客户端和一个服务器 int main() { WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { cout << "WSAStartup failed!" << endl; return -1; } SOCKET sock = socket(AF_INET, SOCK

C程序中Linux系统调用的输出

我想在我的C程序中操作ls-al命令的输出。 有办法吗 int main() { int return_value; return_value = system("ls -al "); return return_value; } 你需要一条通向流程的管道 #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char output[1024]; fp =

EclipseCDT工具链插件中的工具调用和交互

我需要为Eclipse编写一个插件,将其与我定制的基于叮当声的工具链联系起来。我试着按照食谱(滚动到页面中间)。这似乎是可行的:我可以创建一个特殊类型的项目并查看所描述的工具。然而,当我尝试构建它时,我收到“没有规则将目标设置为‘全部’”。生成的makefile包含以下字符串: # All Target all: TestProject # Tool invocations @echo 'No tool found that can build the extension specif

C 多个传出ipv6地址

我需要实现以下方案(在C语言中,但这里的语言不是这样): 客户端(192.168.1.2)代理(地址4:192.168.1.1:1000,地址6:FE80:0000:0000:0000:0202:B3FF:FE1E:8329)某些远程主机(远程地址6) 问题是,代理端的addr6必须根据传入的ipv4端口进行动态更改。例如: 客户端连接到192.168.1.1:1000,通过addr6\u 0进行传出连接 客户端连接到192.168.1.1:1001,通过addr6\u 1进行传出连接 等等

PMPI_Bcast中的致命错误:无效的通信器

我试图向一组进程广播,但在运行代码时出现以下错误(编译显示无错误): 这是我的代码: #include <stdio.h> #include <mpi.h> void main (int argc, char *argv[]) { int rank,size,b=0; MPI_Comm comm_a; MPI_Group group_world,new_group; MPI_Init(&argc, &argv);

';C';-如何用32位浮点值初始化32位整数值?

我试图找到一种通用方法,用参数值初始化数组或结构。当从数组或结构中使用参数时,我的函数将知道上下文,因此它将知道如何正确使用这些值 要初始化数组/结构,我想做如下操作: const void *para[] = { // General Purpose store for parameters "1234", // Store string pointer (void *)1234, // Store integer value (v

C:关于使用整型指针参数计算数组长度

我写了一个简短的代码,从整数数组计算平均值。我首先创建了一个名为mean.h的头文件,如下所示 #ifndef MEAN_H #define MEAN_H double mean(int *inputs) { int i = 0; int len; while((inputs[i]) != '\0') { ++i; } len = i; for(i=0; i<len; i++) { printf("%d

C打印到自定义硬件

我有各种调试消息的现有代码。我们的嵌入式系统没有终端的外部连接。我想修改printf,使其输出到内存位置,而不是映射到FIFO的STDOUT。我想我需要找到写我自己的outbyte/outnum。只是似乎找不到GNU代码,在那里我可以抓取东西 我正在Xilinx FPGA中运行一个微型Laze处理器。所有打印语句都用于调试。我们正在运行GNU工具(Xilinx SDK)。对于开发,我们能够在设计中粘贴UART,并将UART连接到几个测试点 当我们准备部署时,我将不再具有这种可见性。我们确实有一个

C套接字接收奇怪的字符

所以我主要使用MAC/Linux和sockets,这一切都很好,所以我尝试将我的windows sockets从某种程度上去掉,也许我这样做是错误的,这就是全部问题,但我现在试图解决的问题是控制台在服务器发送的实际字符串之后打印随机字符。 服务器.c 在server.c中 bzero(smesg, sizeof(smesg)); printf("Command: "); fgets(smesg, 155, stdin); strca

C 使用链表的堆栈实现有什么错误?

我正在尝试使用链表实现一个堆栈。这是我的密码: #include<stdio.h> //implementation of stack struct Node{ int data; struct Node* next; struct Node* prev; }; struct Stack{ struct Node* headNode; struct Node* presentNode; int size; }; struct Node*

C中的正则表达式代码问题

每次我运行这段代码时,它都告诉我status等于17,我不知道为什么 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <regex.h> int main () { char *word[100]; char *exp[100]; regex_t w; int status; p

如何在mbed cli上编译hal mbed

我想在我的NucleoBoard上编译并运行一个示例。我能够使用mbed os api编译和闪存。但是,我已经下载了STM32Cube_FW_F4_V1.16.0包,并希望运行其中一个示例。如何在mbed cli上编译,还是必须使用像MKD_ARM这样的ide?您不能在mbed上编译它们。Mbed在STM32设备的后台使用HAL库,但您无法在embed上编译这些示例 简单的方法: 安装openSTM32软件包 转到“导入/常规/现有项目到工作区” 查找包含示例和SW4STM32的目录(其中包含I

使用void函数计算C中数组中最频繁的整数

你好我正在尝试创建一个程序(学校作业),要求用户输入一个介于0-1000之间的整数序列。当用户输入负整数或超过100个整数时,序列停止 实际上,输入、保存和创建一个“计数器”数组以及输入整数的次数就完成了。但是,赋值的一部分是创建一个void函数,该函数使用指针变量返回发生次数最多的整数以及发生次数 #include <stdio.h> #include <stdlib.h> #define MAX_SEQ 100 void analyzeFrequencies(in

STM32 Discovery能否区分短按键和长按键

如果我能在我的项目中实现长按钮和短按钮,它将派上用场。我正在使用STM32F4发现工具包并用C编程。我准备了一个引脚作为外部输入,修改了中断处理程序 模式: 现在,我把它设置为在下降和上升时触发。我看不到明显的方法来检测长推和短推。有什么办法吗?一个选项是按下按钮后立即启动计时器,松开按钮后停止计时器。根据计时器中经过的滴答声的数量,您可以采取正确的操作,但是您需要确定滴答声的阈值数量,以区分长按和短按 作为对上述建议的改进。您可以配置为IO中断源,而不是将按钮连接的引脚配置为GPIO。此方法

C Bubblesort每次减小大小

此代码: #include <stdio.h> #define SIZE 10 int main(){ int a[SIZE]={2,6,4,8,10,12,89,68,45,37}; int pass; int i; int hold; int dim=10; printf("Data items in original order\n"); for(i=0; i<SIZE; i++){ prin

C 我想将一个数组从main方法传递到函数(min),以便在函数(min)中计算最小值 #包括 内部最小值(内部阵列[],内部阵列) { min=pArray[0]; 对于(int i=1;i

在尝试将我的数组从main传递到函数min时出现以下错误我不太清楚为什么在我尝试获取该位置上的元素时,pArray[0]被分类为指针 main.c:13:9:错误:赋值的左操作数需要左值 min=pArray[0] main.c:19:8:错误:赋值的左操作数需要左值 min=帕雷[i] main.c:32:16:错误:调用的对象“min”不是函数或函数指针 int min=min(x[10],nrofayerements) 你有三个问题 您正在调用函数sizeOf,而实际名称是sizeOf。(

c编程,读取文件后内存丢失

这是我的c代码的一部分,该程序将读取由行分隔的关键字文件,并将它们存储到字符串数组中 int keyno = 4; char *keywords[keyno]; char var[100]; i=0; while(fgets(var, sizeof(var), k)!=NULL){ //k is the file printf("var: %s", var); if(i>0) keywords[i-1]=var; printf("keyword:

C 子进程执行顺序似乎错误,但有效

为什么以下代码执行该命令: “cat/etc/passwd | wc-l” 而不是 “wc-l | cat/etc/passwd” 即使调试语句是按顺序排列的 b a intmain(){ pid_t pid; int-fd[2]; int stdOut=dup(1); pid=fork(); 如果(pid==0){ 管道(fd); pid=fork(); 如果(pid==0){ 关闭(fd[0]); dup2(fd[1],标准文件号); 关闭(fd[1]); 写入(stdOut,“a\n”,2

在C中运行时打印变量的值

我试图通过检查局部变量和全局变量的值来测试一些用C编写的包,我尝试使用GDB调试器和fprint,正如这里许多人所建议的那样,它们可以很好地处理简单和小的程序,但是使用包并不容易 因此,我需要将所有变量提取到一个txt.file(每行有一个变量)中,然后在运行程序时,我需要打印这些变量的值 我使用了一个普通的print语句从txt文件中获取变量的名称,问题是打印的字符是否准确 问题:如何使用文本文件中的这些字符作为变量来打印值而不是名称 variables.txt x y d main.c 在

C 为什么打印的是012而不是123

对于家庭作业,我必须创建一个包含多个士兵的节点,并打印n个数字,即5,打印1到5,然后打印5到1 现在如果n是3而不是123,我得到012 我试着修复指针和for循环 Spongebob* create_reverse_circle(int n) { Spongebob *p= NULL; for (int i=0; i<n; i++) { //everytime a soldier is created, it goes in beg. of

C 将MIPS指令转换为二进制,然后转换为十六进制

对于一个类项目,我需要在一个至少包含MIPS指令的文件中读取,如: add $t0, $s1, $s4 addi $t1, $a0, 7 等等…(我可以根据需要制作文件,只需担心I和R格式) 我的问题是从文件中读取并首先将其转换为二进制,然后将二进制转换为十六进制应该不难。 我只是不知道如何正确地读入指令并将其转换为二进制 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M

关于malloc的valgrind错误:它们是什么意思?

我得到了这个错误,我不知道这意味着什么 Evaluating a Virtualized Heap of 1 KBs... numIterations: 1000 ==17272== Conditional jump or move depends on uninitialised value(s) ==17272== at 0x4C2FABC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==17272

无法获取点积C编程的结果

如果我在函数中打印结果,我会得到正确答案,但如果我在main中打印结果,我会得到1。我做错了什么 #包括 int dotpro(int v1[],int v2[],int result,int n); 内部主(空){ inti,n; printf(“输入n:”); scanf(“%d”和“&n”); int v1[n],v2[n],结果; printf(“输入arr1:”); 对于(i=0;i

C语言中的无符号整数环绕处理

为了处理无符号整数环绕问题,我计划使用以下检查 添加: 执行后置条件检查以确保无符号加法运算的结果不小于第一个值 void fn(unsigned int a, unsigned int b) { unsigned int sum = a + b; if (sum < a) { // Wraparound occured. return error. } /* ... */ } 我假设不管编译器如何,这些检查都会起作用。有没有更好的方法来处理无符号整数环绕问题?

C 使用main函数的递归

我需要找到这段代码的输出。我知道这是递归,但我不知道这段代码实际上是如何工作的。我认为这将是一个无限代码,但事实并非如此。谁能给我解释一下吗 #include <stdio.h> char *str = "kre"; void main(void) { int i; static int j = 3; for (i = 0; i < j; i++) { printf("%d ", j--); main();

  1    2   3   4   5   6  ... 下一页 最后一页 共 3743 页