Linux
文章平均质量分 58
编程小耗子
本人比较喜欢高性能服务器开发。
在校曾获奖:
中国大学生计算机设计大赛国赛三等奖;
龙鼎杯河北二等奖;
蓝桥杯省赛三等奖;
CCPC河北省赛三等奖;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux系统中创建共享内存
创建共享内存//创建共享内存int init_shmget_master(char* ipcpath, unsigned int shm_size){ int ret = -1, ipckey = -1; struct shmid_ds shm_stat; void *shm = NULL; /* 为建立IPC通讯准备key值。注意: 1、使用ftok时,文件必须存在; 2、要想确保每次获得key值不变,文件不能被删除; 3、第2个参数表示子序号,只能为8bits(1-255,原创 2020-11-16 23:12:46 · 318 阅读 · 0 评论 -
解决ubuntu无法使用root登录问题
ubuntu16.04解决root登录问题修改/etc/ssh/sshd_config文件,把PermitRootLogin Prohibit-password 添加#注释掉新添加:PermitRootLogin yesubuntu14.04解决root登录问题sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf在末端添加下面两行命令greeter-show-manual-login=true #手工输入登陆系统的原创 2020-08-07 19:24:45 · 1728 阅读 · 0 评论 -
高性能服务器C10K到C1000K到C10M的转变路程
文章链接:https://codemouse.online/archives/2020-06-26-17-51-36网络五元组五元组标识一个网络fd的唯一网络fd --> 五元组(sip,dip,sport,dport,proto)c1000k服务器的并发量条件(百万并发)服务器能够承载的客户端数量。(最基本条件)5w以上的应供应操作。(也就是客户端的5%)对数据库的操作。磁盘的操作。(日志,文件。。)CPU占用率60%。(留下40%用来应付突发情况)内存占用率80%。系统限原创 2020-06-26 18:00:22 · 593 阅读 · 0 评论 -
互斥锁,条件等待,读写锁,自旋锁,原子操作,CAS操作
文章链接:https://codemouse.online/archives/2020-06-09145446互斥锁(mutex)用在执行长的代码块效率较高,如果只是执行一条少的指令,速度不如自旋锁和原子锁。如果被锁住,线程回去休眠等待,不占用系统资源。由于共享区域执行时间长,所以速度快。API:#include <pthread.h>//动态初始化:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pth原创 2020-06-24 23:26:45 · 417 阅读 · 0 评论 -
给服务端一个shell控制端
文章链接:https://codemouse.online/archives/2020-04-02182636服务器开启监听nc -lvp 6666连接服务器,并给服务端一个shellvoid start_reverse_shell(char *bd_ip, unsigned short int bd_port){ int sd; struct sockaddr_in serv_addr; struct hostent *server; sd = soc原创 2020-06-23 10:49:57 · 208 阅读 · 0 评论 -
gethostbyname获取主机信息
文章链接:https://codemouse.online/archives/2020-04-02162649获取主机信息#include <netdb.h>extern int h_errno;struct hostent *gethostbyname(const char *name);#include <sys/socket.h> /* for AF_INET */struct hostent *gethostbyaddr(const void *a原创 2020-06-23 10:47:27 · 192 阅读 · 0 评论 -
getprotobyname和getprotobynumber获取协议名字和协议号
文章链接:https://codemouse.online/archives/2020-04-02161208获取协议名字和协议号#include <netdb.h>struct protoent *getprotoent(void); //获取下一条协议struct protoent *getprotobyname(const char *name); // 通过名字获取struct protoent *getprotobynumber(int proto); // 通过号获取vo原创 2020-06-21 23:08:21 · 696 阅读 · 0 评论 -
stat,fstat,lstat,fstatat的解析
文章链接:https://codemouse.online/archives/2020-03-29224238函数声明#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *pa原创 2020-06-21 23:00:08 · 435 阅读 · 0 评论 -
linux中opendir,readdir,closedir的使用
文章链接:https://codemouse.online/archives/2020-03-29211238头文件#include <sys/types.h>#include <dirent.h>打开目录opendir函数:传入name路径,成功则返回非空DIR指针,否则返回NULL。DIR *opendir(const char *name);读取目录readdir函数:返回 struct dirent *指针,读完目录下所有文件时,返回NULL原创 2020-06-21 22:59:28 · 626 阅读 · 0 评论 -
linux系统中open函数的使用open函数
文章链接:https://codemouse.online/archives/2020-03-29201722open函数的定义:#include <sys/types.h> #include <sys/stat.h>#include <fcntl.h>int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);原创 2020-06-21 22:57:56 · 477 阅读 · 0 评论 -
优化内存空间,提升读写速度
文章链接:https://codemouse.online/archives/2020-03-28201251posix_fadvise与fallocate#include <fcntl.h> int posix_fadvise(int fd, off_t offset, off_t len, int advice);int fallocate(int fd, int mode, off_t offset, off_t len);advice的参数:标签描述原创 2020-06-21 22:57:09 · 703 阅读 · 0 评论 -
linux异步IO之AIO编程方法
文章链接:https://codemouse.online/archives/2020-03-27223443AIO编程方法对象struct aiocb { /* 下面所有字段依赖于具体实现 */ int aio_fildes; /* 文件描述符 */ off_t aio_offset; /* 文件偏移 */ volatile void *aio_buf; /* 缓冲区地址 */ size_t原创 2020-06-21 22:55:41 · 859 阅读 · 0 评论 -
linux信号的处理使用总结
文章链接:https://codemouse.online/archives/2020-03-23190627发送信号kill命令指令格式: kill -signum pidkill 函数int kill(pid,signum);pid>0 发给pid进程pid=0 发给当前进程组的所有进程pid=-1 发送给所有进程pid<0 发送给|PID|所对应的组上发送给自己:int kill(getpid(),signum);raise 自举函数自举原创 2020-06-21 22:52:45 · 258 阅读 · 0 评论 -
linux信号组件作用解析与分类
文章链接:https://codemouse.online/archives/2020-03-16181245查看支持的信号列表运行如下命令:codemouse@codemouse:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIP原创 2020-06-21 22:50:28 · 183 阅读 · 0 评论 -
tcpdump的使用
文章链接:https://codemouse.online/archives/2020-03-13181100tcpdump安装yum install tcpdumpapt install tcpdump抓包选项-c:指定要抓取的包数量。-i interface:指定tcpdump需要监听的接口。默认会抓取第一个网络接口-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。-P:指定要抓取的原创 2020-06-20 19:43:42 · 243 阅读 · 0 评论 -
网络编程之select使用说明
文章链接:https://codemouse.online/archives/2020-03-10-201000函数说明void FD_CLR(int fd, fd_set *set);将fd文件描述符从集合中删除int FD_ISSET(int fd, fd_set *set);判断该fd是否在集合内void FD_SET(int fd, fd_set *set);将fd添加到集合中void FD_ZERO(fd_set *set);将集合清空in原创 2020-06-20 19:40:04 · 303 阅读 · 0 评论 -
使用inet_aton报错
文章链接:https://codemouse.online/archives/2020-03-08185618报错原因在使用inet_aton函数的时候,有时候会报错,是因为64位机子的时候,比32位机子多一个头文件,将头文件加上就可以了#include <arpa/inet.h>x64:#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>x32:#i原创 2020-06-20 19:38:40 · 796 阅读 · 0 评论 -
linux各个目录作用解析
文章链接:https://codemouse.online/archives/324623462346文件系统的结构:/bin 存放二进制可执行命令的目录/dev 存放设备文件的目录/etc 存放系统管理和配置文件的目录/home 用户主目录,比如用户user的主目录是/home/user/lib 存放动态链接共享库的目录/sbin 存放系统管理员使用的管理程序的目录/tmp 公用的临时文件存储点/root 系统管理员的主目录/mnt 系统提供这个目录是让用户临时挂载其他的文件系统/p原创 2020-06-19 21:04:40 · 144 阅读 · 0 评论 -
mv,cp,rm的使用
文章链接:https://codemouse.online/archives/2020-03-03-131035mv移动文件或文件夹位置mv <源文件/路径+源文件> <目标路径>重命名mv <源文件名字/路径+源文件名字> <目标名字>移动并改名mv <源文件名字/路径+源文件名字> <目标名字/路径+目标名字>cp复制文件cp <源文件> <目标文件>复原创 2020-06-19 19:24:01 · 196 阅读 · 0 评论 -
linux上常用的压缩与解压
文章链接:https://codemouse.online/archives/2020-03-03-124307tar这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩文件末尾追加文件-u:更新原压缩包中的文件这些参数是根据需要在压缩或解压文件时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的原创 2020-06-19 19:23:07 · 167 阅读 · 0 评论 -
xshell等远程软件关闭后,让服务保持正常运行
文章链接:https://codemouse.online/archives/2020-03-03110650nohup 命令用途:不挂断地运行命令。语法:nohup Command [ Arg … ] [ & ]描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。解原创 2020-06-19 19:22:00 · 698 阅读 · 0 评论 -
setsockopt与getsockopt的参数解析与使用
文章链接:https://codemouse.online/archives/2020-03-02-111858对socket设置和获取代码声明#include <sys/types.h>#include <sys/socket.h>int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sock, int level, i原创 2020-06-19 19:20:53 · 299 阅读 · 0 评论 -
如何伪装自己的程序名字
文章链接:https://codemouse.online/archives/2020-02-29-144838如何伪装自己的程序名字在linux的c语言程序中,主函数也有参数,写法如下void main(int argc, char *argv[]){}ps -A读取的参数就是在argv[0]中,只需要修改这部分的内容,名字就变了strncpy(argv[0],“名字”,strlen(argv[0]));这时候查看ps -A,会发现,程序名字和自己设定的名字一样了如果将名字改成系原创 2020-06-19 19:16:36 · 814 阅读 · 0 评论 -
获取控制台输出信息(管道的使用)
文章链接:https://codemouse.online/archives/2020-02-29-101702获取控制台输出信息将管道重定向到标准输入输出中,将输出的字符放到字符串变量中,这样可以传输给别人,改造一下就可以变成一个shell#include<stdio.h>#include<sys/types.h>#include <fcntl.h>#include<unistd.h>int main(){ char buf[1024原创 2020-06-16 23:13:43 · 642 阅读 · 0 评论 -
linux关机命令 shutdown的使用
文章链接:https://codemouse.online/archives/9867565423关机命令 shutdownubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令。shutdown –help 可以查看shutdown命令如何使用,当然也可以使用man shutdown命令。shutdown -h now 现在立即关机shutdown -r now 现在立即重启shutdown -r +3 三分钟后重原创 2020-06-16 23:04:33 · 458 阅读 · 0 评论 -
设置ubuntu默认启动级别(命令行or图形界面)
文章链接:https://codemouse.online/archives/653578466ubuntu 14版本使用 Ctrl+Alt+t 打开命令行界面关闭桌面sudo service lightdm stop如果想恢复桌面sudo service lightdm startstartx编辑文件 /etc/init/lightdm.conf,在第12行附近,原句“ and runlevel[!06]” 改为“ and runlevel[!026]”即可,之后如果想切换到图形界面,原创 2020-06-16 23:03:16 · 1184 阅读 · 0 评论 -
信号的各类函数的作用
文章链接:https://codemouse.online/archives/87654335678信号信号集合变量申请sigset_t newmask,oldmask;将信号集合设置为空int sigemptyset(sigset_t *set);信号集合添加新的信号int sigaddset(sigset_t *set, int signum);从阻塞信号集合变量中删除单一信号int sigdelset(sigset_t *set, int signum);将参数原创 2020-06-16 23:01:48 · 292 阅读 · 0 评论 -
将fd设置为非阻塞
文章链接:https://codemouse.online/archives/765434567890设置非阻塞#include<stdio.h>#include<sys/types.h>#include <fcntl.h>#include<unistd.h>int setnonblocking(int fd){ int old_option = fcntl(fd, F_GETFL); int new_option = old_o原创 2020-06-15 17:23:02 · 987 阅读 · 0 评论 -
网络编程之IO复用epoll框架
文章链接:https://codemouse.online/archives/2020-02-24153745epoll结构体的定义:struct epoll_event { __uint32_t events; /* epoll event */ epoll_data_t data; /* User data variable */};typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __ui原创 2020-06-15 17:21:58 · 163 阅读 · 0 评论 -
AIO编程方法
文章链接:https://codemouse.online/archives/9876543aio概述aio异步读写是在Linux内核2.6之后才正式纳入其标准。之所以会增加此模块,是因为众所周知我们计算机CPU的执行速度远大于I/O读写的执行速度,如果我们用传统的阻塞式或非阻塞式来操作I/O的话,那么我们在同一个程序中(不用多线程或多进程)就不能同时操作俩个以上的文件I/O,每次只能对一个文件进行I/O操作,很明显这样效率很低下(因为CPU速度远大于I/O操作的速度,所以当执行I/O时,CPU其实还原创 2020-06-15 17:20:33 · 489 阅读 · 0 评论 -
linux信号操作函数
文章链接:https://codemouse.online/archives/28468468信号安装void (*signal(int sig, void (*func)(int)))(int)int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(原创 2020-06-15 17:18:47 · 170 阅读 · 0 评论 -
makefile通用版
文章链接:https://codemouse.online/archives/354864644651理解层次#通配符#包含头文件原则#第二层 变量#第三层 隐含规则#第四层 自动变量#KaTeX parse error: Expected 'EOF', got '#' at position 10: ^:代表依赖文件#̲@ :目标文件#$< : 代表第一个依赖文件#第五层 使用函数编译一个目标LIB=-lpthreadPROG = testSRC = $(wildcar原创 2020-06-15 17:17:43 · 204 阅读 · 0 评论 -
Linux下的tar压缩解压缩命令详解
文章链接:https://codemouse.online/archives/68648684684tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使原创 2020-06-15 17:16:46 · 146 阅读 · 0 评论 -
ubuntu国内源更换
文章链接:https://codemouse.online/archives/68486645操作更新下载源sudo gedit /etc/apt/sources.list以前的删除干净 全删除ubuntu 14.04更新源163源deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ trusty-security mai原创 2020-06-15 17:15:55 · 358 阅读 · 0 评论 -
Ubuntu 16.04中安装tftp
文章链接:https://codemouse.online/archives/4565866879安装$ apt-get install tftp-hpa tftpd-hpa建立目录$ mkdir /tftpboot # 这是建立tftp传输目录。$ sudo chmod 0777 /tftpboot$ sudo touch test.txt # test.txt文件最好输入内容以便区分配置vim /etc/default/tftpd-hpaTFTP_USERNAME=“tftp”T原创 2020-06-15 17:14:53 · 130 阅读 · 0 评论 -
dup与dup2的使用
文章链接:https://codemouse.online/archives/56487986413dup与dup2的使用dup用最小的一个没有被占用的文件描述符作为描述符dup(fd)dup2 把oldfd拷贝给newfd,使newfd也指向oldfd的内容dup2(oldfd,newfd)将申请的文件fd,重定向到stdin上,将输入自动化int fd = open(“input.txt”,O_RDWR);close(0);dup2(fd,0);...原创 2020-06-15 17:13:26 · 180 阅读 · 0 评论 -
linux中netstat查看端口
文章链接:https://codemouse.online/archives/645646564986netstat命令各个参数说明如下:-a:列出所有网络状态,包括 Socket 程序;-c秒数:指定每隔几秒刷新一次网络状态;-n:使用 IP 地址和端口号显示,不使用域名与服务名;-p:显示 PID 和程序名;-t:显示使用 TCP 协议端口的连接状况;-u:显示使用 UDP 协议端口的连接状况;-I:仅显示监听状态的连接;-r:显示路由表;使用查看所有的tcp端口netsta原创 2020-06-15 17:10:54 · 351 阅读 · 0 评论 -
高性能服务器---线程池的实现
线程常用函数创建线程函数———pthread_create函数#include <pthread.h>int pthread_create(pthread_t * thread, const pthread_arrt_t* attr,void*(*start_routine)(void *), void* arg);参数说明:(1)thread参数是新线程的标识符,为一个整型。(2)attr参数用于设置新线程的属性。给传递NULL表示设置为默认线程属性。(3)start_rou原创 2020-06-14 23:05:44 · 188 阅读 · 0 评论 -
互斥锁,条件等待,读写锁,自旋锁,原子操作,CAS操作
互斥锁(mutex)用在执行长的代码块效率较高,如果只是执行一条少的指令,速度不如自旋锁和原子锁。如果被锁住,线程回去休眠等待,不占用系统资源。由于共享区域执行时间长,所以速度快。API:#include <pthread.h>//动态初始化:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);//静态初始化:pthread_mutex原创 2020-06-14 23:04:36 · 478 阅读 · 0 评论 -
linux信号作用解析
查看支持的信号列表运行如下命令:codemouse@codemouse:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIP...原创 2020-03-16 18:34:53 · 425 阅读 · 0 评论
分享