进程间的通信和同步
题目1:编写C语言程序,要求创建子进程,实现父进程通过管道的方式向子进程发送消息,子进程在收到消息后将消息打印在屏幕上。
#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
//想要知道应该包含什么头文件可以使用man命令查看函数的详情
#define BUFSIZE PIPE_BUF
void err_quit(char *msg) //该函数被用于打印错误信息并退出程序
{
printf("%s",msg);
exit(1);
}
int main(void)
{
int pid;
int fd[2];
char buf[BUFSIZE]="hello,child!I am your parent!";
int len;
if(pipe(fd)<0) //创建管道
{
err_quit("pipe failed!\n");
}
if((pid=fork())<0)
{
err_quit("fork failed!\n");
}
else if(pid>0) //父进程操作
{
close(fd[0]);
write(fd[1],buf,strlen(buf));//从buf写到管道中
exit(0);
}
else //子进程操作
{
close(fd[1]);
len=read(fd[0],buf,BUFSIZE);//从管道读到buf中
if(len<0)
{
err_quit("process failed when read a pipe!");
}
else
{
write(STDOUT_FILENO,buf,len);//从buf写到标准输出中
}
exit(0);
}
return 0;
}
题目2:编写C语言程序,创建共享内存,实现多个进程通过共享内存实现信息交换。
题目3:编写C语言程序,创建多个线程,实现多线程对某变量进行互斥访问。
TCP网络编程
题目1:基于TCP协议实现服务器程序和客户端程序,要求:
服务器程序等待客户端连接,建立连接后,打印客户端IP地址和端口到屏幕,打印客户端请求的内容到屏幕,统计客户端请求的字节数并发送给客户端;
客户端连接服务器,向服务器发送任意请求内容,接收服务器的相应内容,并打印到屏幕。
题目2:在已知亚马逊主站域名(www.amazon.com)的前提下,通过调用gethostbyname()函数,来获取IP地址;通过该IP地址调用gethostbyaddr()来获取亚马逊主站的主机信息,并打印到控制台。
题目3:编写基于TCP的server.c和client.c程序,要求使用recvmsg()和sendmsg()函数实现通信,通信内容可以自己定义。
题目4:编写基于TCP的server.c和client.c程序,要求在server.c中使用select()函数实现IO复用,通信内容可以自己定义。
题目5:编写基于TCP的server.c和client.c程序,要求在server.c中使用poll()函数实现IO复用,通信内容可以自己定义。
网友评论