【Linux学习笔记】
virgofarm
这个作者很懒,什么都没留下…
展开
-
基础I/O--软硬链接和动静态库
三:软硬链接1.硬链接:让多个文件名对应同一个inode 创建file的硬链接文件:ln file name 2.软连接:有自己的inode,软连接创建的name文件放的是如何找到file(即放的是file的路径,相当于windows下的快捷方式) 创建file的软连接文件:ln -s file name 注:删除软链接和硬链接文件都不会影响源文件。四:静态库和...原创 2018-05-17 12:48:04 · 238 阅读 · 0 评论 -
Linux--线程
一:线程1.线程的相关概念:线程是比进程粒度更细的执行流 **理解:**a.每一个线程的数据代码都是目标进程的子集 b.线程于线程数据和代码大部分都共享 c.线程的创建和释放成本非常低 d.线程的调度成本很低 (2)线程是在进程内部运行的执行流 (3)Linux下没有真正的线程,是用进程模拟线程(操作系统没有专门为线程创建对应的结构体) (4)Linux下的线程叫轻量级进程...原创 2018-06-09 20:56:11 · 153 阅读 · 0 评论 -
Linux--线程互斥量与条件变量
一:.互斥量(mutex)1.基本概念在线程之间,因为线程组内所有线程共享进程的地址空间,所以对于每个线程来说,它的绝大多数资源都是与其他线程共享的 ,所以在多线程程序中,极有可能因为多个线程同时访问临界资源,而造成数据的“二义”性(不一致)问题,所以这里就引入了同步与互斥机制用来保护临界资源。 造成这种原因可能因为以下几点:if语句半段条件为真后,代码可能并发切换...原创 2018-06-10 21:01:12 · 240 阅读 · 0 评论 -
Linux--多进程与多线程版TCP服务器
一:多进程版#include <string.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include原创 2018-06-19 09:50:45 · 249 阅读 · 0 评论 -
使用gdb调试多进程多线程代码
gdb简介GDB是GUN开源组织发布的一个强大的UNIX下的程序调试工具。或许,平时大家更加习惯图形界面的调试,比如VS上的IDE调试;但是如果我们在UNIX或Linux下做软件,我们呢就更加需要熟练GDB这个调试工具。GDB调试使用的是DEBUG版本的,而使用gcc或者g++默认生成的可执行文件为release版本,所以在生成可执行文件时,我们需要在命令的尾部加上 -g,这样就可以生成的...原创 2018-06-19 18:31:55 · 353 阅读 · 0 评论 -
Linux--深入解析HTTP协议
什么是HTTP协议,HTTP协议有什么作用?首先HTTP协议属于应用层协议,应用层的协议就是我们 程序员自己定的,但是,如果每次都要我们程序员自己定协议,又麻烦而且容易出错(自己什么水平自己应该有点数( ̄_ ̄|||)),最重要的是有大佬已经定义了一些现成的(HTTP,DNS等),所以大多时候我们都是直接拿来用,而应用层的作用就是双方达成某种约定,一端按照约定的协议发送数据,另一端按照约定来解...原创 2018-06-27 16:41:41 · 1598 阅读 · 0 评论 -
使用c语言实现线程池以及线程池原理
线程池介绍线程池允许一个线程可以多次复用,且每次复用的线程内部的消息处理可以不相同,将创建与销毁的开销省去而不必来一个请求开一个线程;简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此...原创 2018-07-11 01:38:06 · 9429 阅读 · 1 评论 -
centos7 打开关闭查看防火墙
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。启动一个服务:systemctl start firewalld.service 关闭一个服务:systemctl stop firewalld.service 重启一个服务:systemctl restart firewalld.service 显示一个服务的状态:s...原创 2018-07-05 12:27:23 · 1158 阅读 · 0 评论 -
Linux下使用telnet抓取HTTP报头信息
首先,先再自己终端上输入telnet,如果报错,就可能是因为没有下载该工具,手动下载(需要在root用户下执行):yum install telnet输入完telnet www.baidu.com(随便一个网址) 80(默认端口号)后,会是下面这种情况: 先ctrl+] 出现下面这种情况: 先回车,再输入HTTP请求,这里为了简单只输入请求行和空行(GET / HTTP/1.0...原创 2018-07-05 13:03:55 · 985 阅读 · 0 评论 -
运行git push时出错,提示Permission denied (publickey)
本文转载自博客园博主“王老头”的文章《Permission denied(publickey). fatal: Could not read from remote repository.》 错误: 在终端(terminal)下 &nb...转载 2018-07-18 08:50:19 · 1076 阅读 · 0 评论 -
windows下用来抓取HTTP报头的小工具wfetch
下载地址: http://www.pc0359.cn/downinfo/63466.html#download 上面附有安装教程,安装完成后打开,页面如下: 界面中的第一行就是HTTP请求的请求行,填写后,Go!就会返回HTTP响应,非常简单!...原创 2018-07-06 11:26:14 · 1218 阅读 · 0 评论 -
基于自主HTTP服务器的项目流程介绍
实现功能:支持 GET 请求 和 POST 请求,GET请求传参可以运行cgi程序从而在数据库中查找到文件路径,查找成功后,通过html将文件路径编译为超链接返回回给用户,用户可以点击链接访问本地文件,POST请求可以实现让用户从浏览器上传照片到服务器,根据照片特定的命名格式存储到服务器,并将路径插入到数据库。GitHub:https://github.com/wallmamami/htt...原创 2018-07-19 15:44:45 · 567 阅读 · 0 评论 -
Linux--深入解析TCP协议
在谈TCP协议之前,我们有必要先了解UDP协议,UDP协议与TCP协议一样,都是属于传输层协议,那么我们就来看看他们之间有什么区别:可靠传输vs不可靠传输:TCP传输属于可靠性传输,那么它就一定会有许多机制来保证传输的可靠性,即需要的开销就更多;而UDP协议不保证可靠,并不是说它传输的数据有错误它也不会去管,而是通过16位校验和检测数据是否出错,如果有错,就会直接丢掉。但是,并不会返回任何错...原创 2018-07-20 13:44:02 · 481 阅读 · 0 评论 -
select、poll、epoll、同步、异步之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的(可...转载 2018-07-26 12:07:39 · 1286 阅读 · 0 评论 -
Linux--深入解析IP协议
IP协议属于网络层协议,它是网络层最终要的协议,没有之一!首先我们先从IP协议的报头格式看起 IP协议报头格式 下面我们一个一个分析这些字段的意思:4位版本号:最常见的就是IPV4和IPV6了4位首部长度:表示IP协议首部最大长度为15*4(字节)=60(字节)8为服务类型:这里不多做介绍16为总长度:表示IP数据报整体占多少个字节(包含首部和有效载荷)16位标识:第二行是用...原创 2018-07-21 16:05:08 · 316 阅读 · 0 评论 -
当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/  作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTT...转载 2018-07-23 09:28:28 · 255 阅读 · 0 评论 -
vmstat/iostat/strace/lsof等命令介绍【转载】
vmstatvmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。 https://blog.csdn.net/mine_song/article/det...转载 2018-08-15 18:52:08 · 318 阅读 · 0 评论 -
Linux中结构体task_struct字段分析
task_struct:是Linux内核的一种数据结构。它放在RAM(运行内存)里并包含着进程的信息。每个进程都把自己的信息放在task_struct数据结构里。task_struct字段分析如下:task_struct //进程描述符Struct task_struct{1、支持对称多处理...转载 2018-06-08 17:41:59 · 164 阅读 · 0 评论 -
简单版UDP服务器和TCP服务器
UDP服务器代码如下:#include <arpa/inet.h> #include <netine...原创 2018-06-14 23:04:37 · 849 阅读 · 1 评论 -
程序与进程
一:程序与进程概念程序:程序就是放在硬盘中的文件,是为了实现特定任务的一系列指令的有序集合。 进程: 从用户角度: 进程就是加载到内存上了,是程序的一次动态执行过程。(因为时钟中断、分时系统的技术,cpu可以在没有执行完当前进程的情况下,执行其他进程)。从操作系统角度: 1.进程是系统分配cpu、内存、时间片等系统资源的基本单位。 2.也是系统分配资源的最小单位。 3.每个进程...原创 2018-05-04 17:36:56 · 847 阅读 · 0 评论 -
Linux文件系统详解
最近在做磁盘性能优化,需要结合文件系统原理去思考优化方向,因此借此机会进一步加深了对文件系统的认识。在看这篇文章之前,建议先看下前面一篇关于磁盘工作原理的解读。下面简单总结一些要点分享出来:一、文件系统层次分析由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层用户层:最上面用户层就是我...转载 2018-05-11 11:18:05 · 140 阅读 · 0 评论 -
基础I/O--文件描述符
一:文件描述符1.文件I/O操作函数系统调用:int open(const char *pathname, int flags, mode_t mode); 第一个参数为文件名,第二个参数为按照什么方式打开,第三个是如果文件不存在要创建文件文件的权限,可以省略。 ssize_t write(int fd, const void *buf, size_t count);///...原创 2018-05-11 15:36:48 · 547 阅读 · 0 评论 -
基础I/O--文件系统
二:文件系统(以ext4为例) 每行7列,代表的意思分别是:模式、硬链接数、文件所有者、组、大小、最后修改时间、文件名。 ll -i 查看文件inode stat可以看到更详细的信息: 因为磁盘是很大的,而像现实生活中一样,我们可以将一个大的东西分为很多的小的区域,这样方便管理,因为你只要能用一种措施管理好一个分区,其他分区也可以采取同样的措施来管理好,这样磁盘上就有了区的概念...原创 2018-05-11 15:45:12 · 439 阅读 · 0 评论 -
进程间通信--管道
一:在开始之前,我们先搞明白这几个问题。1.通信的目的?让两个或多个进程实现数据传输、资源共享、通知事件、进程控制2.进程间为什么不能直接通信?在我们学完进程后,都知道,每个进程是独立的,都有自己的PCB,有自己独立的虚拟地址空间,就连父子进程也是数据写时拷贝,更别说其他进程了,因为在每个进程看来,自己享有所有的内存资源,所以两个资源是不可能直接通信的。所以,我们就必须让两个或多个...原创 2018-05-19 17:09:47 · 286 阅读 · 2 评论 -
Linux进程间通信的几种方式总结
进程间通信概述进程通信的目的数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 多个进程想要操作共享数据,一个进程对共享数据通知事 一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享 多个...转载 2018-05-19 18:14:36 · 202 阅读 · 0 评论 -
Linux进程间通信--消息队列
基本概念消息队列就是由操作系统维护的消息链表,存放于内核中并由消息队列标识符标识,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程可以读取队列中的消息,消息队列的生命周期不随进程随内核。消息队列与管道的比较相同点: 管道和消息队列都是进程间通信的方式。不同点:1.管道只能承载无格式字节流,而消息队列可以指定消息的类型。2.管道的生命周期随进程,而消息队列的生命周...原创 2018-05-20 17:30:04 · 249 阅读 · 0 评论 -
Linux进程间通信--共享内存
共享内存是什么?共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进...原创 2018-05-22 15:30:46 · 177 阅读 · 0 评论 -
进程控制
1.进程创建: (1)分配新的内存块和内核数据结构给子进程 (2)将父进程部分数据结构内容拷贝至子进程 (3)添加子进程到系统进程列表当中 (4)fork返回,开始调度器调度创建子进程除了fork还有vfork: pid_t vfork(void);(1)vfork用于创建一个子进程,而子进程和父进...原创 2018-05-16 08:18:43 · 157 阅读 · 0 评论 -
Linux--POSIX信号量与读写锁
一:POSIX信号量:1.基本概念POSIX信号量和SystemV信号量作用相同,都是来实现同步或者互斥机制,本质也是计数器,通常用它来表示他所保护的临界资源的资源数目。2.相关接口初始化信号量:int sem_init(sem_t *sem, int pshared, unsigned int value);//第二个参数0表示线程间共享,非零表示进程间共享。...原创 2018-06-11 18:38:53 · 861 阅读 · 0 评论 -
Linux进程间通信--信号量
什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个进程访问代码的临界区域。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。信号量的本质是计数器,信号量里面记录了临界资源的数目,有多少数目,信号量的值就为多少。信号量是一...原创 2018-05-24 12:04:11 · 613 阅读 · 0 评论 -
Linux--进程间关系与守护进程
一:进程间关系:1.进程组:组就是一个或多个进程的集合,进程组中会有一个组长进程,每个进程组有唯一的进程组ID,进程组ID与组长进程ID相同。 注:某个进程组只要有一个进程存在,该进程组就存在,与其组长进程是否存在没有关系。 这里的PGID就是进程组ID, ./a.out &可以将其放在后台运行2.作业作业也是一个或者多个进程的集合,但是它与进程组的概念...原创 2018-06-12 10:28:35 · 175 阅读 · 0 评论 -
Linux--信号
一:信号1.基本概念信号是操作系统通知某个进程有异常或有某种事件发生的通知机制。 通知机制:是以通知事件发生为目的。 通信机制:是以传输数据为目的。 kill -l查看信号,编号为1-31为普通信号,34-64为实时信号。我们现在只研究普通信号 1.信号产生的方式由硬件组合键产生(ctrl+c(2号信号)、ctrl+(3号信号))–只能发给前台进程。由硬件异常产生(...原创 2018-05-29 11:56:40 · 289 阅读 · 0 评论 -
Linux--网络基础(一)
一:计算机网络背景1.局域网在局域网内,所有的主机之间交互的信息都是可以被监听的。(网卡可以被设置为混杂模式,这时它可以“抓到”局域网所有的数据)在局域网内,两台主机是可以直接通信的(网卡序列号MAC地址,全球唯一)局域网中,两台或两台以上的主机同时向网线发送数据,就会发生数据干扰的问题,把这种问题叫局域网内的数据发生了碰撞,该网线叫局域网的碰撞域。交换机:交换机是工作在数据链...原创 2018-06-13 12:51:36 · 192 阅读 · 0 评论 -
Centos vim配置及插件YouCompleteMe代码补全的安装vimplus
Linux下的编译器vimvim是Linux下自带而且非常强大的编译器,但是它与一些集成的IDE相 常简单并且可以随手配置出自己喜欢的风格,对于初学者当然还是建议 用原味的,要做到熟悉vim的一些基本快捷键。最难受到就是一些,用了 有一段时间,自己想有一个可以的开发环境,那么你就可以用那些大牛 写好的安装过程,...转载 2018-05-31 18:55:51 · 1593 阅读 · 0 评论 -
Linux--网络编程套接字
一:IP地址1.基本概念:IP地址是在IP协议中,用来标识网络中不同主机的地址IP协议有两个版本,IPv4和IPv6,对于IPv4,IP地址是一个4字节,32位的整数(能表示2^32个主机);对于IPv6,IP地址是一个16字节,128位的整数。像192.168.0.1这种IP地址的表示方法,叫做点分十进制字符串风格。注: IP地址可以标识网络上所有主机中的唯一一个主机。 ...原创 2018-06-14 18:26:19 · 204 阅读 · 0 评论 -
GCC中的弱符号与强符号
GCC中的弱符号与强符号我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:1 b.o:(.data+0x0): multiple definition of `global'2 a...转载 2019-03-20 14:06:57 · 393 阅读 · 0 评论