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

📄 rw.c

📁 linux下用c写的简易聊天室程序
💻 C
字号:
#include <sys/types.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define MAXLINE 4096ssize_t						/* Write "n" bytes to a descriptor. */writen(int fd, void *vptr, size_t n){	size_t		nleft;	ssize_t		nwritten;	const char	*ptr;	ptr = vptr;	nleft = n;	while (nleft > 0) {		if ( (nwritten = write(fd, ptr, nleft)) <= 0) {			if (errno == EINTR)				nwritten = 0;		/* and call write() again */			else				return(-1);			/* error */		}		nleft -= nwritten;		ptr   += nwritten;	}	return(n);}static ssize_tmy_read(int fd, char *ptr){	static int	read_cnt = 0;	static char	*read_ptr;	static char	read_buf[MAXLINE];	if (read_cnt <= 0) {again:		if ( (read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0) {			if (errno == EINTR)				goto again;			return(-1);		} else if (read_cnt == 0)			return(0);		read_ptr = read_buf;	}	read_cnt--;	*ptr = *read_ptr++;	return(1);}ssize_treadline(int fd, void *vptr, size_t maxlen){	int		n, rc;	char	c, *ptr;	ptr = vptr;	for (n = 1; n < maxlen; n++) {		if ( (rc = my_read(fd, &c)) == 1) {			*ptr++ = c;			if (c == '\n')				break;	/* newline is stored, like fgets() */		} else if (rc == 0) {			if (n == 1)				return(0);	/* EOF, no data read */			else				break;		/* EOF, some data was read */		} else			return(-1);		/* error, errno set by read() */	}	*ptr = 0;	/* null terminate like fgets() */	return(n);}/* end readline */ssize_t						/* Read "n" bytes from a descriptor. */readn(int fd, void *vptr, size_t n){	size_t	nleft;	ssize_t	nread;	char	*ptr;	ptr = vptr;	nleft = n;	while (nleft > 0) {		if ( (nread = read(fd, ptr, nleft)) < 0) {			if (errno == EINTR)				nread = 0;		/* and call read() again */			else				return(-1);		} else if (nread == 0)			break;				/* EOF */		nleft -= nread;		ptr   += nread;	}	return(n - nleft);		/* return >= 0 */}/* end readn */voidWriten(int fd, void *ptr, size_t nbytes){	if (writen(fd, ptr, nbytes) != nbytes)		perror("writen error");}ssize_tReadn(int fd, void *ptr, size_t nbytes){	ssize_t		n;	if ( (n = readn(fd, ptr, nbytes)) < 0)		perror("readn error");	return(n);}Readline(int fd, void *ptr, size_t maxlen){	ssize_t		n;	if ( (n = readline(fd, ptr, maxlen)) < 0)		perror("readline error");	return(n);}

⌨️ 快捷键说明

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