⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 该代码为unix环境高级编程的源代码
💻 C
字号:
#include	"calld.h"static voidclient_alloc(void)		/* alloc more entries in the client[] array */{	int		i;	if (client == NULL)		client = malloc(NALLOC * sizeof(Client));	else		client = realloc(client, (client_size + NALLOC) * sizeof(Client));	if (client == NULL)		err_sys("can't alloc for client array");			/* have to initialize the new entries */	for (i = client_size; i < client_size + NALLOC; i++)		client[i].fd = -1;	/* fd of -1 means entry available */	client_size += NALLOC;}/* Called by loop() when connection request from a new client arrives */intclient_add(int fd, uid_t uid){	int		i;	if (client == NULL)		/* first time we're called */		client_alloc();again:	for (i = 0; i < client_size; i++) {		if (client[i].fd == -1) {	/* find an available entry */			client[i].fd = fd;			client[i].uid = uid;			return(i);	/* return index in client[] array */		}	}			/* client array full, time to realloc for more */	client_alloc();	goto again;		/* and search again (will work this time) */}/* Called by loop() when we're done with a client */voidclient_del(int fd){	int		i;	for (i = 0; i < client_size; i++) {		if (client[i].fd == fd) {			client[i].fd = -1;			return;		}	}	log_quit("can't find client entry for fd %d", fd);}/* Find the client entry corresponding to a process ID. * This function is called by the sig_chld() signal * handler only after a child has terminated. */voidclient_sigchld(pid_t pid, int stat){	int		i;	for (i = 0; i < client_size; i++) {		if (client[i].pid == pid) {			client[i].childdone = stat;	/* child's exit() status +1 */			return;		}	}	log_quit("can't find client entry for pid %d", pid);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -