各种IO函数
基于多进程服务器,稍微修改head.h,测试各种IO函数
1.recv 和 send 函数
void client_simple_echo(int sockfd)
{
char sendline[MAXLINE];
char recvline[MAXLINE];
while(fgets(sendline,MAXLINE,stdin) != NULL)
{
//read (from stdin) -> write (to serv) -> read(from serv) ->write(to stdout)
send(sockfd,sendline,strlen(sendline),0);
if(readline(sockfd,recvline,MAXLINE) == 0)//serv closed
break;
fputs(recvline,stdout);
}
}
void serv_simple_echo(int sockfd)
{
//read (from serv) ->write(to serv)
char buf[MAXLINE];
ssize_t nread;
while(( nread = recv(sockfd,buf,MAXLINE,0)) > 0)
writen(sockfd,buf,nread);
return;
}
2. readv和writev函数
测试writev
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/uio.h>
int main()
{
char *str0 = "hello ";
char *str1 = "world";
struct iovec iov[2];
iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0) + 1;
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1) + 1;
writev(STDOUT_FILENO,iov,2);
return 0;
}
测试readv
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/uio.h>
#define MAXLINE 8192
int main()
{
char buf1[MAXLINE] = {0},buf2[MAXLINE] = {0};
struct iovec iov[2];
iov[0].iov_base = buf1;
iov[0].iov_len = sizeof(buf1);
iov[1].iov_base = buf2;
iov[1].iov_len = sizeof(buf2);
ssize_t nread =readv(STDIN_FILENO,iov,2);
printf("has read %ld bytes.\n",nread);
printf("%s",buf1);
printf("%s",buf2);
return 0;
}
recvmsg 和 sendmsg
这两个函数包含了其余8个IO函数
辅助数据,高级轮询技术,事务目的TCP这些内容用到时再看