linux编程
文章平均质量分 80
yinhua405
努力工作
展开
-
C++时间戳实现
#ifndef TIME_VITO_H#define TIME_VITO_H#ifdef _WIN32#include<windows.h>#else#include <pthread.h>#endif#include<iostream>using namespace std;class TimeVito{public: TimeVito(); ~TimeVito(); std::string nowTime();...原创 2021-05-31 19:37:47 · 1023 阅读 · 0 评论 -
C++线程池实现
#ifndef THREAD_POOL_VITO_H#define THREAD_POOL_VITO_H#ifdef _WIN32#include<windows.h>#include<process.h>#else#include <pthread.h>#endif#define LL_ADD(item, list) do { \ item->prev = NULL; ...原创 2021-05-31 17:04:03 · 121 阅读 · 0 评论 -
C++条件变量实现
#ifndef COND_VITO_H#define COND_VITO_H#ifdef _WIN32#include<windows.h>#else#include <pthread.h>#endifclass CondVito{public: CondVito(); ~CondVito(); void signal(); void broadcast(); void waitImpl() const; //bo...原创 2021-05-28 19:22:31 · 336 阅读 · 0 评论 -
C++线程类实现
#ifndef THREAD_VITO_H#define THREAD_VITO_H#ifdef _WIN32#include<windows.h>#else#include <pthread.h>#endifclass ThreadVito{#ifdef _WIN32 typedef unsigned(__stdcall* func)(void*);#else typedef void* (* func)(void*);#endif...原创 2021-05-27 19:59:50 · 197 阅读 · 0 评论 -
epoll使用实例
#include <iostream>#include <sys/socket.h>#include <sys/epoll.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include &l原创 2021-01-20 09:29:53 · 225 阅读 · 0 评论 -
linux编程---进程间通信---PIPE---无名管道
无名管道是一种特殊类型的文件 ,在应用层体现为两个打开的文件描述符,通信结束后会自动消失,但它仍然可以通过读写系统调用(write/read) 来访问1 创建无名管道 #include int pipe(int pipefd[2]); #define _GNU_SOURCE #include原创 2017-08-22 13:25:35 · 268 阅读 · 0 评论 -
linux编程---进程通信中,利用socketpair实现子进程间通信
#include #include #include #include int main () { int fd1[2]; int r = socketpair( AF_UNIX, SOCK_STREAM, 0, fd1 ); if ( r perror( "socketpair()" )原创 2017-08-07 10:47:56 · 521 阅读 · 0 评论 -
linux编程---进程---孤儿进程与僵尸进程区别
基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那转载 2017-08-10 20:17:07 · 212 阅读 · 0 评论 -
linux编程---makefile---make 传递参数
#includeint main(){ int i = 9; #ifdef DEBUG i=1; #else i=0; #endif printf("i=%d\n",i); return 0;}原创 2017-08-10 19:42:42 · 1138 阅读 · 0 评论 -
linux---cut,grep用法
cut 以行为单位进行分解参数-d 接分隔字符,与-f 一块使用-f 取出第几段-c 以字符的单位取出固定字符区间grep 分析一行信息参数-a 将binary 档案以text 档案的方式搜索数据-c 计算找到的次数-i 忽略大小写-n 输出行号-v 反向选择原创 2017-05-11 11:17:53 · 395 阅读 · 0 评论 -
linux编程---进程间通信---FIFO---有名管道
无名管道是临时的,在完成通信后将自动消失,且只能在具有亲缘关系的进程间实现通信。有名管道FIFO有效地克服了这一问题,它是一个存在的特殊文件,可以在不同进程间通信。管道是单向的,要实现双向,需要两个管道。创建有名管道int mkfifo (const char *FILENAME, mode_t MODE)使用示例非亲缘关系的两个进程使用有名管道实现数据原创 2017-08-22 14:02:44 · 291 阅读 · 0 评论 -
linux编程--多路复用---epoll
定义:epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果而不是迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一个原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍原创 2017-08-22 14:59:25 · 280 阅读 · 0 评论 -
linux编程---线程
线程线程是进程中的一个独立控制流,由环境(包括寄存器集和程序计数器)和一系列要执行的指令组成。所有进程至少由一个线程组成。所有线程共享为该进程分配的公共空间。线程基本上不拥有系统资源,只拥有少量在运行中必不可少的资源(如程序计数器、一组寄存器、栈、线程信号掩码、局部线程变量和线程私有数据),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源(同一地址空间、通信的信原创 2017-08-23 10:03:52 · 229 阅读 · 0 评论 -
linux编程---线程---互斥锁
线程间同步机制互斥锁通信机制互斥以排他方式防止共享数据被并发修改。(1)在访问该资源前,首先申请该互斥锁,如果该互斥处于开锁状态,则申请到该锁对象,并立即占有该锁,以防止其他线程访问该资源。如果该互斥锁处于锁定状态,默认阻塞等待。(2)只有锁定该互斥锁的进程才能释放该互斥锁,其他线程的释放操作无效。初始化锁静态初始化互斥锁pthread_mutex_t mu原创 2017-08-23 10:59:25 · 311 阅读 · 0 评论 -
linux编程---线程---条件变量
条件变量通信机制基本原理 初始化条件变量int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr); pthread_cond_t cond = PTHREAD_COND_INITIALI原创 2017-08-23 15:00:50 · 265 阅读 · 0 评论 -
linux编程---线程---读写锁
读写锁通信机制读写锁分为读锁和写锁,功能如下(1)如果某线程申请了读锁,其他线程可以再申请读锁,但不能申请写锁。(2)如果某线程申请了写锁,则其他线程不能申请读锁,也不能申请写锁。初始化读写锁int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlo原创 2017-08-23 15:49:08 · 255 阅读 · 0 评论 -
linux---编程---进程通信---信号
信号 linux提供的信号机制是一种进程间异步的通信机制,在实现上是一种软中断。信号可以导致一个正在运行的进程被另一个进程异步进程中断,转而处理某一个突发事件。异步事件是不可预见的,只能通过某些特定的方式来预防,或者说,当该异步事件到来时,根据原来的设定完成相应的操作。信号中断处理相关的术语(1)产生信号:产生信号有多种说法。一个进程创建一个信号用于发送给另一个进程叫发原创 2017-08-25 10:06:07 · 259 阅读 · 0 评论 -
一个生产者生产产品,多个消费者同时获得产品
#include <iostream>#include <cstdlib>#include <unistd.h>#include <pthread.h>#include <semaphore.h> using namespace std; struct{ pthread_rwlock_t rwlock; i...原创 2018-08-27 17:25:37 · 716 阅读 · 0 评论 -
linux---sed,awk
sedsed [-nefr] [动作]-n 使用安静模式-e 直接在指令列模式进行sed的动作编辑-f 执行指定档案的sed动作-r n1,n2 指定行数执行a 新增字符串c 取代字符串d 删除i 插入字符串p 打印s 取代awk 处理每一行的字段内的数据awk ' 条件类型1{原创 2017-05-11 14:13:35 · 271 阅读 · 0 评论 -
linux---排序命令 sort,wc,uniq
sort 排序参数-f 忽略大小写-b 忽略最前面空格-M 以月份排序-n 以数字排序-r 反向排序-u 相同数据只出现一行-t 分隔符-k 以指定区间排序uniq 将重复行列出一行参数-i 忽略大小写-c 进行计数wc 排序参数-l 仅列出行-w 仅列出多少字-m 多少个字符原创 2017-05-11 11:26:46 · 283 阅读 · 0 评论 -
openssl rsa 加密,解密,签名,验签简单例子
#include#include#include#include#include#include#include #include#includeusing namespace std;int padding= RSA_PKCS1_PADDING; char publicKey[]="-----BEGIN PUBLIC KEY-----\n原创 2017-04-18 08:38:18 · 13295 阅读 · 2 评论 -
linux---which,whereis,locate,find用法
which 寻找 执行档参数-a 将所有可以找到的指令列出whereis 寻找特定档案参数-b 只找binary的档案-m 只找在说明文件manual 路径下的档案-s 只找source来源档案-u 没有说明档的档案locate 直接寻找档案find 寻找档案find / -mtime 0显示从现在开始到24小时前,有变动原创 2017-05-11 09:04:25 · 212 阅读 · 0 评论 -
linux---常用压缩,解压缩命令
*.Z compress程序压缩的档案*.bz2 bzip2程序压缩的档案*.gz gzip程序压缩的档案*.tar tar程序打包的档案,没有压缩过。*.tar.gz tar程序打包,经过gzip压缩的档案gzip 生成*.gz文件参数-c 将压缩的数据输出到屏幕上-d 解压缩zcat 查看压缩文件bzip2 生成*.原创 2017-05-11 09:08:43 · 192 阅读 · 0 评论 -
linux---vi 常用命令
一般模式:移动光标的方法n 光标向后移动n个距离0 光标移动这一行的最前的字符$ 光标移动这一行的最后的字符H 光标移动到这个屏幕的最上方那一行M 光标移动到这个屏幕的最中央那一行L 光标移动到这个屏幕的最下方那一行G 光标移动到这个档案的最后那一行gg 光标移动到这个档案的第一行n 光标向下移动n行一般模式:搜寻与取代原创 2017-05-11 10:39:12 · 166 阅读 · 0 评论 -
linux alarm函数
首先 man alarmNAME alarm - set an alarm clock for delivery of a signalSYNOPSIS #include unsigned int alarm(unsigned int seconds);DESCRIPTION alarm() arrang原创 2017-04-13 08:58:37 · 393 阅读 · 0 评论 -
linux---万用字符与特殊符号
* 代表0个或多个字符? 代表一个字母(一定有)# 批注\ 跳脱符号,将 特殊或万用字符 还原成一般字符| 两个管线的界定; 连续性命令的界定~ 家目录$ 变量取代值& 将指令变成背景下工作/ 路径分隔> 取代>> 累加' 单引号 不具有变量置换功能" 具有变量置换功能` `原创 2017-05-11 10:49:47 · 551 阅读 · 0 评论 -
linux---数据流重导向
标准输入 standard input 简称 stdin 代码为 0 使用 标准输出 standard output 简称 stdout 代码为 1 使用 > 或 >>标准错误输出 standard error 简称 stderr 代码为 2 使用 2> 或 2>>/dev/null 垃圾桶 cat > catfile原创 2017-05-11 11:02:18 · 274 阅读 · 0 评论 -
linux---tr,col,join,paste,expand 字符转换命令
tr 删除一段信息当中的文字参数-d 后接删除信息-s 取代掉重复字符col参数-x 将tab键转换成对等的空格键join join [ -ti12 ] file1 file2-t 指定分隔符-i 忽略大小写-1 指定第一个档案使用字段-2 指定第二个档案使用字段pastepaste原创 2017-05-11 13:41:15 · 392 阅读 · 0 评论 -
linux---正则表达式
^word 待搜寻的word在行首word$ 待搜寻的word在行尾. 代表一个字符,一定是一个\ 跳脱字符,将特殊符号的特殊意义去除* 重复0个或多个前一个re字符\{n,m \} 连续n到m个的前一个re字符[ list ] 选择范围+ 代表一个或一个以原创 2017-05-11 13:52:41 · 171 阅读 · 0 评论 -
linux---crontab用法
crontab 建立例行性命令crontab [ -u username ] [ -l ] [ -e ] [ -r]-u 指定用户-e 编辑内容-l 显示内容-r 删除内容五个时间分钟 0-59小时 0-23日期 1-31月份 1-12周 0-7* 代表任何时刻, 代表原创 2017-05-11 15:00:50 · 237 阅读 · 0 评论 -
linux---ps用法
ps参数-A 所有的process 均显示出来,与-e具有同样的效用-a 不与terminal有关的所有process-u 有效使用者相关的processx 通常与a这个参数一起使用输出格式规划l 较详细列出j 工作的格式-f 完整的输出常用 ps -lps auxps -lAps -ax原创 2017-05-11 15:33:44 · 556 阅读 · 0 评论 -
linux---netstat用法
netstatnetstat -[atunlp]参数-a 将目前系统所有的联机,监听,socket数据都列出来-t 列出tcp网络封包的数据-u 列出udp网络封包的数据-n 以port 来显示-l 列出正在监听的服务-p 列出网络服务程序pidproto 网络的封包协议recv-Q 非由原创 2017-05-11 16:04:27 · 211 阅读 · 0 评论 -
c++ 编程常用库函数实现
#include#include#include#include#includeusing namespace std;static int is_space( int ch ){ return (unsigned long)(ch - 9) }static int is_digit(int c){ return ((c) >原创 2017-04-07 16:32:20 · 328 阅读 · 0 评论 -
linux---静态库与动态库的创建、生成、使用
静态库,以.a为后缀,直接编译到程序中。动态库,以.so.xx.xx命名,间接引用 。系统库函数的基本路径是/lib/usr/lib/usr/local/lib创建静态库-rw-r--r-- 1 test developer 66 7月 20 11:28 libhello.c-rw-r--r-- 1 test developer 72 7月 20原创 2017-07-20 13:28:27 · 271 阅读 · 0 评论 -
linux编程---信号量通信机制
信号量通信机制主要用来实现进程间同步,信号量用来标识系统可用资源的个数。信号量管理操作1. 创建信号量集合 #include #include #include int semget(key_t key, int nsems, int semflg);2. 控制信号量集合、信号量 int semctl(int semid, int sem原创 2017-08-16 14:58:46 · 280 阅读 · 0 评论 -
linux编程---IO复用---select
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。/* According to POSIX.1-2001 */ #include /* According to earlier standards */ #include #原创 2017-08-09 13:10:41 · 223 阅读 · 0 评论 -
linux编程---进程通信---消息队列
消息队列是消息的链式队列1 创建消息队列 #include #include #include int msgget(key_t key, int msgflg);2 消息队列属性控制 int msgctl(int msqid, int cmd, struct msqid_ds *b原创 2017-08-09 15:35:22 · 203 阅读 · 0 评论