Unix编程
Cudi_
这个作者很懒,什么都没留下…
展开
-
循环中使用fork的问题
一直对于循环语句中调用fork创建子进程的过程不甚了解,直到在笔试中遇到了一道题目,因此简单做下笔记。原题:#include<stdio.h>#include<unistd.h>int main(int argc,char **argv){ for(int i=0;i<2;++i) { fork(); printf("*"); } return 0;}请问输出了多少个*。当时写的是6个,但事后测试发现是8个。因此在CSDN上找大佬寻求解答。转载 2020-09-16 20:32:17 · 1343 阅读 · 0 评论 -
使用OpenCV和socket传输图片
Server.cpp#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <opencv2/opencv.hpp>const int PORT = 5678; //端口号//const char *IP = "192.168原创 2020-08-11 19:30:07 · 2286 阅读 · 0 评论 -
select、poll和epoll
select原理IO多路复用之select总结select的调用过程如下所示:使用copy_from_user从用户空间拷贝fd_set到内核空间注册回调函数__pollwait遍历所有fd,调用其对应的poll方法(对于socket,这个poll方法是sock_poll,sock_poll根据情况会调用到tcp_poll,udp_poll或者datagram_poll)以tcp_poll为例,其核心实现就是__pollwait,也就是上面注册的回调函数。__pollwait的主要工作就是转载 2020-08-08 22:17:25 · 782 阅读 · 0 评论 -
使用socket实现简单的TCP和UDP通信模型
本文使用socket实现服务器和客户端之间简单的TCP和UDP通信。TCP通信模型服务器端:1. socket(); //创建TCP类型的套接字2. bind(); //绑定地址(选择服务器任意可用的IP地址)3. listen(); //设置监听上限4. accept(); //阻塞监听来自客户端的连接请求5. recv(); //从套接字中读取数据,可用read()代替6. //数据处理模块7. send(); //向套接字中写数据,可用write()代替8. close(); .原创 2020-08-08 22:06:30 · 397 阅读 · 0 评论 -
交替打印A和B-线程同步(信号量)
本文使用值为0的信号量实现两个线程同步,交替打印A和B#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <semaphore.h>#include <string.h>typedef void *(*Func)(void *); //使用typedef定义函数指针sem_t sem;原创 2020-08-08 21:42:45 · 849 阅读 · 0 评论