随笔分类 - linux下C语言
摘要:数据库操作 基本命令 数据库/表增删 create database 数据库名 drop database 数据库名 create table 表名 (字段) drop table 表名 基本命令 修改表 alter table 表名 drop column 列名 alter table 表名 ad
阅读全文
摘要:在Ubuntu下安装Mysql. ubuntu上安装mysql非常简单只需要几条命令就可以完成。 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client 3. sudo apt-get install libmysql
阅读全文
摘要:多路复用并发模型 -- epoll 监控事件 events EPOLLIN fd可读 EPOLLOUT fd可写 EPOLLPRI fd紧急数据可读 EPOLLERR fd发生错误 EPOLLHUP fd 被挂起 EPOLLONESHOT fd 只监控 1 次,监控完后自动删除 EPOLLLT ep
阅读全文
摘要:多路复用并发模型 -- poll #include<poll.h> int poll(struct pollfd *fds, unsigned int nfds, int timeout); struct pollfd { int fd; //轮询的文件描述符 short events; //等待的
阅读全文
摘要:多路复用并发模型 -- select #include<sys/select.h> #include<sys/time.h> int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct time
阅读全文
摘要:使用原始的Socket模式,会发生阻塞问题,只能收一条消息再发一条消息。无法做到发送多次消息。 在服务器端创建多线程,每当accept()接受到一个客户端时,启动一条线程单独去处理。 代码:
阅读全文
摘要:偷包,就是在网络传输过程中,截取某一数据包,进行解析获取其发送的数据。 原理与TCP通信类似。只需在创建套接字时,参数不同。 fd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); PF_INET IPV4协议 SOCK_RAW 对原始网络协议访问 IPPROTO_
阅读全文
摘要:UDP通信流程步骤: 服务端: 等待(被动)接收发送 1: 创建 socket: socket() 2: 绑定端口: bind() 3: 读取消息: read() 4: 发送消息: write() 5: 关闭套接字: close() 客户端:主动发送接收 1: 创建 socket: socket()
阅读全文
摘要:TCP通信流程步骤: 服务端: 等待(被动)接收发送 1: 创建 socket: socket() 2: 绑定端口: bind() 3: 监听端口: listen() 4: 接受连接: accept() 5: 读取消息: read() 6: 发送消息: write() 7: 关闭套接字: close
阅读全文
摘要:网络通信 主机 主机 主机 服务器 主机 服务器 主机 主机--主机 主机 服务器 主机 服务器—主机 网络字节序 -- 使用大字节序 #include <arpa/inet.h> 主机序转网络序 uint32_t htonl(uint32_t hostlong); uint16_t htons(u
阅读全文
摘要:基本概念 线程:进程中的某一个处理流程 一个进程可以有多个线程,进程是线程的父进程 所有线程与父进程共享资源 线程分类 内核态线程 由内核调度程序直接调度,充分发挥多处理器的优势 目前linux系统标准线程库采用内核线程方式实现多线程 用户态线程 一个进程包含多个线程,这些线程从内核调度角度来看只是
阅读全文
摘要:例子:利用两个子进程从50进行降序输出 int g_num=50; //偶数 void *threadEven(void *lParam) { while(g_num>0) { if(!(g_num&1)) { printf("even:%d\n",g_num); } g_num--; usleep
阅读全文
摘要:共享内存 是最快的IPC通信方式,不存在数据复制,而是直接内存读写 涉及到多个进程访问,可能出现同时读、写操作,一般采用信号量的方式,进行互斥操作 步骤: 内存共享使用 1: ftok 使用某个文件做关键字创建key 2: shmget 使用key 创建(打开)共享内存 shmid 3: shmat
阅读全文
摘要:信号量:为控制临界资源而产生的一个或一组计数器,本质上是一个整数变量。用于进程的互斥操作 信号量基本操作 P 操作 进程申请临界资源时发出 P 操作 流程:检查信号量取值, > 0 则分配临界资源,信号值-1; 否则表示无空余资源,进程阻塞直到指定资源被释放 V 操作 进程释放临界资源时发出 V 操
阅读全文
摘要:消息与消息队列 IPC (Inter process communication) 广义:所有可以用于进程间通信的对象和方法 狭义:特指消息队列,信号量,共享内存 消息队列 应用于进程间少量数据的顺序共享 信号量 应用于进程间互斥 共享内存 应用与进程间大量数据的随机共享访问 命令行查询IPC对象
阅读全文
摘要:命名管道 FIFO (First In First Out) 命令行: mknod mknod [-m mode] NAME TYPE [ MAJOR MINOR] mknod name b | c major minor //块设备,字符设备文件 mknod name p //管道文件 mknod
阅读全文
摘要:重定向 dup2 int dup(int fd) 重定向文件描述符 int newFd = dup(STDOUT_FILENO) newFd 指向 stdout int dup2(int fd1, int fd2) 重定向文件描述符 dup2(newFd, STDOUT_FILENO) stdout
阅读全文
摘要:管道概念 进程间通信工具, 把数据从一端输出到另一端 如 ps –ef | grep pts 相当于 1: ps –ef > tmpfile 2: grep pts < tmpfile 半双工通信 无名管道(直接称之为管道), 只能用于父子进程或者兄弟进程间通信。 命名管道 , 可以用于所有进程间通
阅读全文
摘要:简单定时器 #include<unistd.h> unsigned int alarm(unsigned int seconds) 返回上一个alarm等待时间,没有则返回0 只能设置 1 个定时器,设置第 2 个时会替换第一个 设置成功后,上一个alarm会失效 定时事件只执行1次,多次执行需要递
阅读全文
摘要:多路复用 select 同时监控多个文件描述符的输入输出 <sys/types.h> <sys/times.h> <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, str
阅读全文