今日课堂内容:超时检测 数据库
select函数
#include <myhead.h>
int main(int argc, const char *argv[])
{
//1、定义检测容器
fd_set readfds;
//2、清空内容
FD_ZERO(&readfds);
//3、将文件描述符放入集合中
FD_SET(0, &readfds);
//4、定义超时时间变量
struct timeval tv = {5, 0};
while(1)
{
tv.tv_sec = 5;
tv.tv_usec = 0;
int res = select(1, &readfds, NULL, NULL, &tv);
if(res == -1)
{
perror("select error");
return -1;
}else if(res == 0)
{
printf("time out\n");
return -1;
}
//判断
if(FD_ISSET(0, &readfds))
{
int num = 0;
scanf("%d", &num);
printf("触发键盘输入:%d\n", num);
}
}
return 0;
}
poll函数
#include <myhead.h>
int main(int argc, const char *argv[])
{
//1、定义文件描述符集合
struct pollfd pfd;
pfd.fd = 0; //表示检测的是0号文件描述符
pfd.events = POLLIN; //表示检测读事件
//2、调用函数
while(1)
{
int res = poll(&pfd, 1, 5000);
if(res == -1)
{
perror("poll error");
return -1;
}else if(res == 0)
{
printf("time out\n");
return -1;
}
//判断
if(pfd.revents == POLLIN)
{
int num = 0;
scanf("%d", &num);
printf("触发键盘输入:%d\n", num);
}
}
return 0;
}
通过信号完成时间的设置
#include <myhead.h>
//定义信号处理函数
void handler(int signo)
{
if(signo == SIGALRM)
{
printf("系统已经随机为您出一张牌\n");
alarm(5);
}
}
int main(int argc, const char *argv[])
{
char ch; //用户选择的牌
//将SIGALRM信号捕获到自定义函数中
if(signal(SIGALRM, handler) == SIG_ERR)
{
perror("signal error");
return -1;
}
while(1)
{
alarm(5); //给出5秒考虑时间
printf("请出牌>>>");
scanf("%c", &ch);
getchar();
printf("您出的牌为:%c\n", ch);
}
return 0;
}
数据库
#include <myhead.h>
int main(int argc, const char *argv[])
{
//1、创建或打开一个数据库
sqlite3 *ppDb = NULL;
if(sqlite3_open("my.db", &ppDb) != SQLITE_OK)
{
printf("open error:%d, %s\n", sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb));
return -1;
}
printf("数据库已经打开\n");
//2、关闭数据库
sqlite3_close(ppDb);
return 0;
}
今日课堂提问:
1.IO多路复用的原理?
答:定义一个文件描述符集合,阻塞等待集合中是否有事件产生,如果有事件产生,则执行对于的函数
2.实现IO多路复用可以使用哪些函数完成?
答:select、 poll、epoll
3.select和poll的区别?
答:select是检测不同的文件描述符集合,包括读、写、异常文件描述符集合;poll将检测的文件描述符放入一个文件描述符结构体数组中。
有关超时参数,select是地址传递而pol1是值传递;
select在检测文件描述符集合大小有限制,而poll没有
4.在UDP通信过程中,能否使用connect函数?为什么?有什么好处?
答:可以使用,可以跟指定的端点建立唯一的通道,在通信过程中,不受其他端点的影响
5.OSI7层网络体系结构有哪些?
答:物理、数据链路层、网络层、传输层、会话层、表示层、应用层
6.四层网络体系结构?
答:应用层、传输层、网络层、网络接口层
7.ARP、HTTP、TFTP、IP、UDP、TCP说出全程和所在层?
答:arp地址解析协议,网络接口层
http超文本传输协议,应用层
IP网际协议,网络层
udp用户数据报协议,传输层tcp传输控制协议,传输层
8.100.0.125.2对于的默认子网掩码是多少?
答:255.0.0.0
9.顺序表和链表的区别?
答:顺序表类似于数组,特点是逻辑上连续物理地址也连续;链表是逻辑上连续的数据元素,物理地址上不一定连续;顺序表存储数据有上限,链表没有
10.进程和线程的区别?
答:线程是进程的最小执行单元、进程之间用户空间是相互独立的、多个线程共享同一个进程的资源、