linux
林夕水心
这个作者很懒,什么都没留下…
展开
-
linux学习笔记1(基本命令)
1.命令终端的一些快捷键快捷键:ctrl+P(按照之前的命令记录从最新记录开始依次重现命令)快捷键:ctrl+N(与上一命令相反)快捷键:ctrl+B(向后移动光标)快捷键:ctrl+F(向前移动光标)快捷键:ctrl+A(将光标移到最开头)快捷键:ctrl+E(将光标移到最末尾)快捷键:ctrl+H(删除光标前面的字符)快捷键:ctrl+D(删除光标后面的字符)注...原创 2019-01-08 14:38:40 · 503 阅读 · 0 评论 -
linux学习笔记2(vim使用)
1.光标的移动H:左移 J:下移 K:上移 L:右移2.光标移动到当前行的行首:0光标移动到当前行的尾部:$(shift+4)3.光标移动到当前文件的头部:gg光标移动到当前文件的尾部:G(shift+g)光标移动到文件的20行位置:20+G4.在命令模式下删除光标后面的字符:x(也就是被光标覆盖的字符)删除光标前面的字符:X(shift+x)(也就...原创 2019-01-23 20:00:12 · 117 阅读 · 0 评论 -
linux学习3(C++程序编译及makefile编写)
1.最基本的编译过程此时有一个a.cpp文件,文件中内容如下:#include <iostream>using namespace std;int main(){ cout<<"hello world"<<endl; return 0;}第一步:预处理,将所有的#include头文件以及宏定义替换成其真正的内容,输入命令...原创 2019-01-24 12:21:48 · 3096 阅读 · 1 评论 -
linux学习笔记4(静态库和动态库建立)附windows动态库建立
静态库建立和使用步骤现在有四个cpp文件,四个文件分别存放了加减乘除四种运算的函数,并且有一个头文件如下#include <iostream>using namespace std;int add(int, int);int sub(int, int);int mul(int, int);int div(int, int);第一步:将四个cpp文件转换成二进...原创 2019-01-24 21:52:29 · 175 阅读 · 0 评论 -
linux学习笔记5 进程
1.创建进程函数fork()函数原型:pid_t fork(void)//pid_t是代表进程id的数据类型该函数会产生两个进程,一个是父进程,一个是子进程,其中两个进程都有返回值。其中父进程的返回值是子进程的id;子进程的返回值是0;2.创建单个进程#include <iostream>#include <unistd.h>#include ...原创 2019-02-14 22:32:54 · 238 阅读 · 0 评论 -
linux学习笔记6 进程间通信(IPC)
进程间的通信主要有:管道,信号,消息队列,信号量,共享内存,socket,eventfd线程间的通信主要有:管道pipe,socketpair,条件变量和eventfd1.管道方式通信(pipe)个人理解是在内核开辟一块公共区域,将需要传递的信息放在里面进行通信,这块区域就像管道一样,但是管道只适用于有血缘关系的进程之间通信,并且一个父进程下只会建立一个管道,所有父子进程都能够与这一管...原创 2019-02-21 10:50:35 · 261 阅读 · 0 评论 -
linux学习笔记7 信号
信号是linux系统中一种常用的通信机制,A给B发送信号,B在收到信号之前执行自己的代码,收到信号后,不管执行什么程序,都暂停运行,去处理信号,处理完毕后再继续执行原来的程序,是一种软中断。Linux常规信号一览表1) SIGHUP:当用户退出shell时,由该shell启动的所有进程将收到这个信号,默认动作为终止进程2) SIGINT:当用户按下了<Ctrl+C>组合键...原创 2019-02-26 14:57:47 · 672 阅读 · 0 评论 -
linux学习笔记8 线程
1.创建线程函数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);参数描述:thread是线程id,是传出参数,只需要提供一个地址即可attr是线程属性,一般为NULLstart_routine是线程执行的函...原创 2019-02-27 22:51:13 · 137 阅读 · 0 评论 -
linux学习笔记9 锁
1.互斥锁主要包括上锁,解锁,测试锁三种功能锁的初始化:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;也可以用函数初始化:pthread_mutex_init(&mutex,NULL);销毁锁:pthread_mutex_destroy(pthread_mutex_t *mutex)上锁:int pthread_mu...原创 2019-02-28 12:09:13 · 182 阅读 · 0 评论 -
Linux学习笔记10 条件变量
与互斥锁配合使用,可以达到如下效果——完成某个条件以后,指定线程才会继续执行。生产者与消费者模型程序举例:生产者生产商品,消费者消费商品,如果没有商品了,消费者就要阻塞,等待商品生产出来。主要函数如下:(注意其中的restrict关键词是告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化...原创 2019-02-28 21:30:31 · 167 阅读 · 0 评论 -
Linux学习笔记10 客户端服务端编程
socket APIsocket函数#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol);domain:AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用IP...原创 2019-03-08 20:31:16 · 244 阅读 · 0 评论 -
linux学习笔记11 多进程服务端编程
#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <ctype.h>#include <arpa/inet.h>#include <stdlib.h>#include.原创 2019-03-09 21:29:11 · 153 阅读 · 0 评论 -
linux学习笔记12 多线程服务器编程
#include <sys/types.h>#include <sys/wait.h>#include <errno.h>#include <pthread.h>#include <fcntl.h>using namespace std;struct s_info{ struct sockaddr_in addr_c...原创 2019-03-10 13:42:03 · 203 阅读 · 0 评论 -
Linux学习笔记13 select函数的IO多路转接服务器
select函数可以让单进程单线程去处理多个客户端。其原理是将与每个客户端通信的文件描述符和接收客户端的文件描述符制成一张文件描述符表,文件描述符一般是非负整数,文件描述符的值就是在这个文件描述符表的位置,比如fd=6,就是在这张表的第六位就代表了fd,循环使用select函数去检测文件描述符表中的文件描述符对应的缓冲区,是否存在缓冲数据,如果有,就把该文件描述符所在位置1。然后进程在根据更改...原创 2019-03-11 10:27:58 · 158 阅读 · 0 评论 -
linux学习笔记14 epoll函数
epoll函数的原理和select函数类似,但是select是创建了一个文件描述符表,而epoll函数是创建了一个树用来存放文件描述符和需要检测的状态,并且在返回时不仅仅返回需要处理的文件描述符个数,还可以返回所有的文件描述符。epoll接口总共3个:int epoll_create(int size);//该函数生成一个专用的文件描述符,也就是epoll的根节点int size:e...原创 2019-03-11 14:38:31 · 492 阅读 · 0 评论 -
Linux学习笔记15 udp通信
udp通信相比与tcp通信,不再需要三次握手和四次挥手,对应到程序上就不需要服务器去accept和客户端connectudp通信服务端#include <sys/types.h> #include <arpa/inet.h>#include <string.h>#include <stdlib.h>#include <u...原创 2019-03-12 09:28:24 · 129 阅读 · 0 评论 -
linux学习笔记16 本地套接字进程间通信
本地套接字通信服务器端#include <iostream>#include <sys/types.h> #include <sys/socket.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/un...原创 2019-03-12 11:23:54 · 273 阅读 · 0 评论 -
linux在编译时动态库找不到的问题
如果已经确认有动态库的情况下,那主要是因为动态库不在默认路径下,需要给系统指定库的路径或者把库放到默认路径下第一种方法就是把库放到默认路径下第二三种方法就是把库的路径加入默认路径还有一种方法就是在输入编译命令时手动输入路径,用-l参数加路径。...原创 2019-03-12 16:51:35 · 1862 阅读 · 5 评论 -
libevent库简单使用
创建一个事件处理框架并显示系统中可以用那些io转接函数,以及现在使用的是哪种,并消除该事件#include <iostream>#include <event2/event.h>using namespace std;int main(){ struct event_base* base = NULL; base = event_base_...原创 2019-03-12 21:07:53 · 344 阅读 · 0 评论 -
linux学习笔记17 linux共享内存使用
共享内存的使用也是IPC的一种方式,这种方式数据拷贝次数较少,效率较高。其原理也是在内存中开辟一块公共访问的区域,可以让各个进程连接读写。共享内存的API函数主要有以下四个int shmget(key_t key, size_t size, int shmflg);创建或加入共享内存 key_t key:16进制 非0数据。 0x1111 ----我理解为是共享内...原创 2019-04-12 11:07:28 · 200 阅读 · 0 评论 -
ubuntu+windows双系统安装问题
总共安装了三次,都是根据这个教程来安装的:https://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html其中会遇到一个问题,如下图所示:原因是windows是采用传统的legacy启动方式,而U盘启动采用的是UEFI的启动方式,所以很可能强行安装了的话,windows会启动不了,所以应该进入BIOS界面,把启动方式调成le...原创 2019-08-20 19:25:20 · 102 阅读 · 0 评论 -
linux中线程的pid,线程的tid和线程pid以及__thread
在linux系统中,每个进程有一个pid(进程ID),获取函数:getpid(),系统内唯一,除了和自己的主线程一样每个线程有一个tid(线程ID),获取函数:pthread_self(),所在进程内唯一,有可能两个进程中都有同样一个tid每个线程有一个pid(不知道叫什么),获取函数:syscall(SYS_gettid),系统内唯一,除了主线程和自己的进程一样,其他子线程都是唯一的...原创 2019-09-06 19:59:01 · 4035 阅读 · 0 评论 -
linux线程特定函数个人理解
线程特定函数有以下三个int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *));void *pthread_getspecific(pthread_key_t key); int pthread_setspecific(pthread_key_t key, const void *value);...原创 2019-09-09 10:46:41 · 137 阅读 · 0 评论 -
linux中IO函数(仅限于读写)的总结
首先要明白linux中IO函数实现的底层原理:以最常用的read和write为例,来讲解。read从原理上理解就是把对应文件描述符在内核缓存中的值复制到进程空间中write则是把一系列值从进程空间中复制到对应的文件描述符的内核缓冲区中在网上经常有两个概念需要明确:内核缓冲区:这是系统内核自己设置的缓冲区,不管使用什么IO函数,都是存在的,read和write也有内核缓冲区进...原创 2019-09-23 15:41:32 · 502 阅读 · 0 评论