Tag: c

使用select()监听多个客户端(TCP)

我开发了(TCP)服务器来监听客户端并与之交互。 现在我正在尝试调整该服务器代码以收听多个客户端。 我想使用select,但我对我发现的一些例子和解释感到困惑。 我一直在阅读: http : //support.sas.com/documentation/onlinedoc/sasc/doc750/html/lr2/select.htm和http://support.sas.com/documentation/onlinedoc/sasc/doc750/html /lr2/select.htm这两个都被推荐给我..:S 第一个网站的例子似乎不太复杂..(虽然仍然不知道如何使其适应我的代码,因为我非常非常非常新的网络等)但我担心我错过了关键方面,因为第二个网站的例子的复杂性。 下面是我的服务器代码的快照,当只监听一个客户端时(包括一些伪代码以最小化不那么重要的东西): int main(int argc, char *argv[]) { int sockfd, newsockfd, portno, clilen; char buffer[3]; struct sockaddr_in serv_addr, cli_addr; int n; if (argc < 2) { fprintf(stderr,"ERROR, no port provided\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0){error("ERROR opening socket");} bzero((char *) &serv_addr, sizeof(serv_addr)); […]

扫描多个数字而不扫描输入C

我正在尝试扫描4个数字而不按Enter(我希望它在看到有4个数字时结束扫描)。 我正在使用这个方法: printf(“Enter 4 Numbers(with space):\n”); scanf(“%d %d %d %d” , &guess1 , &guess2 , &guess3 , &guess4); 但它需要数字之间的空格并在最后按Enter键。 那么如何让它接收例如:1234(num1 = 1,num2 = 2等等)并结束接收而不按Enter键。

SIGCHLD导致分段错误,而不是进入处理程序

我正在尝试创建一个简单的shell,并添加了使用&在后台运行进程的function。 在我的主要方法中,我基本上有: int main() { if (signal(SIGCHLD, handle) == SIG_ERR) perror(“Cannot catch SIGCHLD”); pid_t child = fork(); if (child == 0) execvp(command, arguments); else { if (background == 1) { printf(“1”); backgroundList(command, child); printf(“2”); } else waitpid(child, NULL, 0); } } 对于我的经纪人,我有: void handle(int s) { printf(“a”); if (signal(SIGCHLD, handle) == SIG_ERR) perror(“Cannot catch SIGCHLD”); […]

分段错误和链接列表的未知问题

所以我正在尝试编写一个机械程序。 程序很长但是这里有导致我问题的函数: recherche_noe和creation_noe 。 不需要打扰其余的。 这是法语所以请耐心lst_noe我的想法是这样的:首先在main我向用户询问lst_noe的noe lst_noe (这是noe列表)。 使用creation_noe他在向用户询问结构信息时做出了这一点。 最后recherche_noe返回我正在寻找的noe 。 所有信息都存储在struct maillage ,你有其他结构。 谢谢您的帮助。 #include #include #include /*==============================================*/ /* Déclaration des structures */ /*==============================================*/ struct matrice { char nom[20]; int n,m; double **tab; struct matrice *next; }; struct element { int num; int n1, n2; double k; struct element *next; }; struct noeud { […]

将c字符串解析为指针数组时出现分段错误

函数makearg应该计算char数组中的单词数,并将每个单词分解为指针数组中自己的位置。 分段错误似乎是strncpy函数的问题。 int makearg(char s[], char ***args); int main(){ char **args = (char**)(malloc(100)); char *str = “ls is a -l file”; int argc; argc = makearg(str, &args); printf(“%d”, argc); printf(“%c”, ‘\0’); int i; for(i = 0; i < argc; i++){ puts(args); printf("%c", '\n'); } return 0; } ///////////////////////////////////////// int makearg(char s[], char ***args){ int argc […]

通过C中的argv使用管道发送和接收字符数组

所以,我正在尝试创建一个管道,通过argv []连接的管道来回发送char数组。 现在,我一直坚持在接口中接收数组(从父节点发送到子节点的c_param的参数)。在db.c中接收字符3和5。 我知道3和5是我的管道所在的argv []的索引,但我不知道如何接受它并在db.c中打印出我的消息。 interface.c创建管道,分叉到父进程和子进程。 char数组param被转移到子进程到char数组c_param。 使用snprintf,我将我的管道变成了一个char,使用execl和我的char数组c_param发送。 interface.c: int main (int argc, char *argv[]) { int to_Child[2]; int to_Parent[2]; int id, toChildPipe, toParentPipe, err; char param[100] = “This is the parameter!”; char sendPipe[100]; char recPipe[100]; /*CREATING PIPE*/ toChildPipe = pipe(to_Child); toParentPipe = pipe(to_Parent); if(toChildPipe == -1 || toParentPipe == -1) { printf (“Error on […]

动态地在C可执行文件中包含文本

对C和编译语言来说非常新。 我需要在此代码中基本上包含来自另一个文件的一行动态文本: #if T2T_NDEFFILE_PREDEF == URI const uint8_t T2T_DATA_DEF[] = { #include “/home/link” // Terminator TLV 0xF3 }; #endif 我已经尝试使用#include链接到文本文件,但是当文件“链接”中的文本发生更改时,它显然不会在编译的可执行文件中更改。 有没有简单的方法来做到这一点?

创建数组的动态声明

我想要动态声明的make数组我想象像这样的somethnig。我想要make程序识别单词中的字符。 char i; scanf(“%c”,&i); char word[]=i; printf(“%c”,word[0]); 我也试过这样的事情 char i; scanf(%c,&i); char *word=i; printf(“%c”,word[0]); 我不知道如何使它工作

在分隔符处拆分字符串并将子字符串存储在C中的char **数组中

我想编写一个函数,通过第一次出现的逗号将用户在命令行上给出的字符串拆分并放入数组中。 这是我尝试过的: char**split_comma(const str *s) { char *s_copy = s; char *comma = strchr(s_copy, “,”); char **array[2]; *(array[0]) = strtok(s_copy, comma); *(array[1]) = strtok(NULL,comma); return array; } 这是主要function: int main(int argc, char **argv) { char **r = split_comma(argv[1]); printf(“substring 1: %s, substring 2: %s\n”, r[0],r[1]); return 0; } 有人可以给我一些见解,为什么这不起作用?

如何在C中创建一个虚拟shell?

我有一个带有参数的虚拟shell程序。 但是,我希望它不带参数,而是提示让用户输入可执行程序和参数的名称。 例如: $dummyshell >(executable program and parameters go here) 这是我到目前为止的代码: #include #include #include #include #include #include #define BUFFER_SIZE 1<<16 #define ARRAY_SIZE 1<= &bufCmdArgs[cmdArgsSize])) break; } for (p=n=0; bufCmdArgs[n]!=NULL; n++){ if(strlen(bufCmdArgs[n])>0) cmdArgs[p++]=bufCmdArgs[n]; } *nargs=p; cmdArgs[p]=NULL; } int main(int argc, char *argv[], char *envp[]){ char buffer[BUFFER_SIZE]; char *args[ARRAY_SIZE]; char hflag = ‘N’; int *retStatus; size_t nargs; […]