
Linux
海马HiMark
这个作者很懒,什么都没留下…
展开
-
Linux大三搜索命令locate,grep,find
locate:可以搜索文件和目录的名称,但是不能搜索文件的内容。grep:在文件中搜索数据find:根据指定条件对文本进行搜索locate搜索文件名数据库 -i 不区分大小写 locate -n 3 test 查看前三个结果 locate test | less 结果分屏显示grep在文本文件中搜索匹配的模式 grep hater * 查找所有使用hater字符串的...原创 2019-01-17 08:37:46 · 456 阅读 · 0 评论 -
TCP为什么是三次握手和四次挥手
为什么建立连接是三次握手断开连接是四次挥手? 三次握手的流程和四次挥手的流程是什么?三次握手与四次回收分别对应TCP连接与断开过程tcp报文格式 标志位含义ACK:确认序号有效。SYN:发起一个新连接。FIN:释放一个连接。三次握手的过程所谓三次握手,即建立TCP连接,需要客户端和服务端总共发送至少三个包确认连接的建立。流程如下 第一次握手Clien...原创 2018-08-10 11:17:13 · 48218 阅读 · 4 评论 -
TCP服务器的单进程版本,多进程版本,多线程版本。
所需API如下: 1 创建socket文件描述符(TCP/UDP, 客户端+服务器) int socket(int domain, int type, int protocol);•对于IPv4, family参数指定为AF_INET •对于TCP协议,type参数指定为SOCK_STREAM,表示面向字节流的传输协议 •protocol参数指定为0即可2...原创 2018-07-28 22:13:59 · 771 阅读 · 0 评论 -
VIM的多行注释
多行注释:进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来按大写字母I,再插入注释符,例如//按esc键就会全部注释了取消多行注释:进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列按字母j,或者k选中注释符号按d键就可全部取消注释...原创 2018-07-06 20:30:02 · 182 阅读 · 0 评论 -
网络编程 UDP协议的编写(简易版)
UDP协议udp协议传输的特点:无连接不可靠面向数据报传输层协议根据UDP协议编写程序使客户端与服务器进行通信socket 网络中的进程是通过socket来通信的,Linux中一切皆文件,即socket也是一种特殊的文件。sockaddr结构struct sockaddr : 16位地址类型, 14字节地址数据 , (泛型接口) struct ...原创 2018-06-28 17:22:58 · 1745 阅读 · 0 评论 -
软链接与硬链接的区别
链接:即相当于在windows底下的快捷方式硬链接硬链接的创建ls 最左侧的一列是文件的inode值,类似于成指针,指向物理硬盘的一个区域, 硬链接与源文件的inode相同,所以两个文件指向同一个区域。修改硬链接文件的内容 发现修改硬链接文件内容后,原文件内容也随之改变 即硬链接与原文件是同一个文件。软连接(符号链接)创建软连接 软连接与原文件的in...原创 2018-06-19 10:33:47 · 327 阅读 · 0 评论 -
客户端与服务端通信(Server&Client)的消息队列实现
消息队列 提供从一个进程向另一哥进程发送一块数据的方法 每个数据块都被认为有一个类型,接收者进程收到的数据块可以有不同类型值 消息队列的最大长度,总字节数,消息队列的数都有上限comm.h#pragma once#include<stdio.h>#include<sys/types.h>#include<sys/ipc.h&g...原创 2018-05-15 19:32:06 · 3520 阅读 · 0 评论 -
客户端与服务端通信(client&server)的管道实现
管道特点: 只能用于具有共同祖先的进程之间进行通信 管道提供流式服务 一般而言进程退出,管道释放 一般而言内核会对管道操作进行同步与互斥 管道是半双工,数据只能向一个方向流动,双方通信需建立两个管道服务端serverpipe.c#include<stdio.h>#include<sys/types.h>#include...原创 2018-05-15 16:59:31 · 2472 阅读 · 0 评论 -
Linux多线程编程一(系统编程)
线程控制创建线程int pthread_create(pthread_t *thread,const pthread_attr_t *attr, \ void*(*start_routine)(void*),void *arg);第一个参数:返回线程id 第二个参数:设置线程属性默认NULL 第三个参数:函数地址,线程启动后执行的函数 第四个参数:传给线程启动函数的参数...原创 2018-08-03 07:39:52 · 372 阅读 · 0 评论 -
线程池
线程池原创 2018-08-12 11:06:48 · 116 阅读 · 0 评论 -
查看文件的命令总结cat,less,head,tail
查看文件的命令总结cat,less,head,tailcat:一次显示整个文件内容less:分页一次一屏显示文件内容head:显示文件开始部分tail:显示文件结束部分catcat 在标准输出上查看文件cat file1 file2 将文件拼接至标准输出设备cat file1 file2>file3 将文件拼接后保存到其他文件cat -n file1 file2>f...原创 2019-01-17 07:43:10 · 333 阅读 · 0 评论 -
多进程多线程的区别和选择(总结)
多进程多线程的区别和选择(总结)关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际...转载 2018-09-22 10:02:53 · 13045 阅读 · 0 评论 -
信号在内核的表示
信号在内核中的表示 信号递达:执行信号的处理动作 信号未决:信号从产生到递达之间的状态进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意:阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的: 信号的发送过程1...原创 2018-09-14 19:53:28 · 294 阅读 · 0 评论 -
实现一个不能被继承的特殊类。
1、实现一个不能被继承的类?1、将类的构造函数设置为私有 2、在父类中给一个静态的函数构造对象1)保证了父类的构造函数在子类中不可见,但是子类的构造函数是要调用父类 的构造函数合成。 2)此时出现一个问题,子类不能构造出对象,但是这个类也不能构造出对象了,因此提供一个静态的公有函数来构造对象2、如何实现一个只能在堆上生成对象的类? 可在 栈上生成对象(father f) 堆上...原创 2018-08-25 11:40:11 · 193 阅读 · 0 评论 -
I/O多路转接select/poll/epoll模型
I/O多路转接包含(select/poll/epoll)1、I/O多路转接select系统提供select函数实现多路复用的输入输出模型select系统调用让程序监视多个文件描述符的状态变化,程序会暂停到select这里等待,直到被监视的文件描述符发送了状态变化#include&amp;amp;lt;sys/select.h&amp;amp;gt; //头文件int select (int nfds, ...原创 2018-08-24 14:07:38 · 306 阅读 · 0 评论 -
linux下的守护进程
一、什么是守护进程守护进程的引入现实中许多大小的服务器或者软件必须保证7*24小时无障碍运行,例如百度搜索引擎等,这些一直运行的程序怎么实现的呢? 本质就是守护进程守护进程的定义守护进程是运行在后台的一种特殊进程,独立于控制终端并且周期性的执行某种任务或处理某些突发事件。 Linux的大多数服务器是守护进程实现的,比如Web服务器httpd,Internet服务器inetd。...原创 2018-08-23 20:23:20 · 272 阅读 · 0 评论 -
进程同步之生产者消费者模型
一、概念引入 例如寄信 我(生产者) 邮递员(消费者)我把信件写好 -----相当于生产者生产数据我把信放到邮筒-----相当于把生产者的数据放入到缓冲区邮递员把信从邮筒取出-----相当于消费者把数据从缓冲区取出邮递员把信拿去邮局处理------相当于消费者处理数据...原创 2018-08-17 19:35:52 · 8875 阅读 · 0 评论 -
图解线程池原理与C++实现
什么是线程池?主要解决处理器单元内多个线程执行的问题,可以显著的减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。线程池具体是如何提升服务器性能?1 将线程创建/销毁,分别安排在服务器的启动和结束...原创 2018-08-12 17:15:09 · 11579 阅读 · 1 评论 -
封装fork/wait等操作编写一个process_create函数
利用回调函数封装fork wait execvp 等函数, 编写一个process_create函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>int process_create(int(*func)(), const char *file, char *argv[]){ in...原创 2018-05-15 15:20:04 · 239 阅读 · 0 评论 -
自主myshell的编写
#include&lt;stdio.h&gt;#include&lt;sys/wait.h&gt;#include&lt;unistd.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;int main(){ //初始化数组 char buf[102原创 2018-05-15 13:32:27 · 278 阅读 · 0 评论 -
popen/system, 理解这两个函数和fork的区别.
popen system fork 执行流程 system:在执行期间调用进程会一直等待shell命令执行完成 popen:无须等待shell命令执行完成就返回 (并行执行) popen后需要调用pclose防止子进程变成”僵尸”状态。 fork :执行期间父进程等待子进程的退出码信号处理 system:对SIGCHLD、SIGIN...原创 2018-05-15 10:12:33 · 520 阅读 · 0 评论 -
Linux入门工具Valgrind检测内存泄漏问题
Valgrind 检测内存泄漏和内存越界 测试如下//valgrind()测试如下#include<stdio.h>void fun(){ int *a =malloc((sizeof)int); p[10]=100;}int main(){ fun();printf("finishi\n");}valgrind ./a.out(检测) :可原创 2018-03-02 16:00:39 · 166 阅读 · 0 评论 -
Linux入门GDB调试的简易使用
GDB 的功能介绍 1、可以按照自定义运行程序。 2、可让程序在指定断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查程序。 4、动态的改变程序的执行环境。gdb ./文件名 list n行号 (N行开始) list 函数名 (函数开始) list break (断点信息)gdb(gdb) ...原创 2018-03-02 15:42:06 · 202 阅读 · 0 评论 -
Linux入门gcc编译器的使用简易介绍
gcc 编译器的使用gcc(选项)(参数)-o:指定生成的输出文件;-E:仅执行编译预处理;-S:将C代码转换为汇编代码;-wall:显示警告信息;-c:仅执行编译操作,不进行连接操作。set set ts=4 设置Tab的键入大小:V shift < shift > x 复制 p 粘贴多个文件一起编译gcc testfun.c test.c原创 2018-03-02 15:26:08 · 1072 阅读 · 0 评论 -
Linux中Vim编译器的基本使用规则介绍
vim 编译器的使用vim +文件名 (i进入编辑) (Esc进入命令模式) (:进入末行模式) (w:写入磁盘模式) 写入后自动退回到命令模式 :x退出命令模式 :q!不保存退出原创 2018-03-02 09:03:31 · 217 阅读 · 0 评论 -
Linux入门常用10个基本小命令04
1 unameuname 获取计算机信息2 elf可执行文件名 PE (WINDOWS) ELF (LINUX)3 filefile 查看文件类型-b 列出辨识结果时,不显示文件名称。-c 详细显示指令执行过程,便于排错或分析程序执行的情形。-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名原创 2018-03-01 18:09:45 · 219 阅读 · 0 评论 -
Linux入门常用10个简易小命令 03
1 echo echo > 输出重定向:重新定向输出内容的目标位置>> 追加输例如 echo "this is my time"> myfile echo "this is my time">> myfile2 seq seq strat end 产生从开始到结束的数字序列3 1| 21|2 管道将1的...原创 2018-03-01 17:19:36 · 194 阅读 · 0 评论 -
Linux 入门常用10个简易小命令02
1 Tabtab 自动补全2 ctrl c ctrl z ctrl d 区别ctrl d 表示一个特殊的二进制值,表示 EOF。(指从键盘输入EOF)运行结束ctrl c 终止正在运行的程序。 ctrl z 挂起一个进程.可后续切换出继续执行 fg 切换暂停3 manman man 帮助手册 j向下滚动 k向上滚动 q 退出 1 命令 2原创 2018-03-01 16:43:02 · 240 阅读 · 0 评论 -
【推荐】进程的创建,等待, 终止的实现
进程创建 从已存在的进程中,创建一个具有独立地址空间的新的进程,且新创建的进程为子进程。函数:pid_t fork(void); 1. 子进程中返回0 2. 父进程返回子进程id 3. 出错返回-1 fork之前,父进程独立执行,fork之后,父子两执行流分别执行。 fork之后,谁先执行完全由调度器决定。vfork: 1. 创建子进程...原创 2018-04-08 21:25:18 · 312 阅读 · 0 评论 -
Linux 进度条的实现c语言版本
//proc.c#include<stdio.h> #include<unistd.h>void proc(){ int rate=0; //表示进度走了%多少了 char bar[102]={0}; //0-100 是101个 102设置为空 const char *sta="-\\|/"; //判断进度条是否卡了 while(r原创 2018-03-29 01:53:42 · 376 阅读 · 0 评论 -
Centos6.5 VIM一键配置
vim配置全攻略写在前面折腾有风险, 作死请谨慎.善用虚拟机的快照功能, 能够节省大把的时间. 转载自:https://gitee.com/HGtz2222/EasyVimConfig/blob/master/README.md# 鉴于文章功能强大且易上手转来方便大家的学习,使用的同时尊重原版作者。vim低配版简介该份配置是基于我在2013年左右使用的一套配置,...转载 2018-03-29 09:39:32 · 1853 阅读 · 0 评论 -
进程状态及PCB(task_struct)的介绍
描述进程-PCB 进程信息被放在进程控制块(PCB)的数据结构中, 可以理解为进程属性的集合。组织进程 所有运行在系统里的进程以task_struct链表的形式存在内核里task_struct内容分类标识符:描述进程的唯一标识符,区别其他进程。 状态: 任务状态,退出码,退出信号等 优先级:相对于其他进程的优先级 程序计数器:程序中即将被执行的下一...原创 2018-05-15 09:21:58 · 1046 阅读 · 0 评论 -
进程的调度算法
时间片轮转调度算法 给每个进程固定的执行时间,根据到达的先后顺序, 在单位时间片内执行,执行完成后调度下一个进程执行, 不考虑进程等待时间和执行时间,属于抢占式调度。优点:兼顾长短作业 缺点:平均等待时间较长,上下文切换费时。 适用于分时系统先来先服务调度算法 根据进程到达的先后顺序执行, ...原创 2018-05-15 09:07:00 · 340 阅读 · 0 评论 -
Linux入门 【孤儿进程】模拟实现
孤儿进程的产生,危害,及其模拟实现。孤儿进程 父进程先退出,子进程就称为孤儿进程 。 孤儿进程被1号init进程领养,当然由init进程回收。孤儿进程危害 每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。因此孤儿进程并不会有什么危害。孤儿进程的模拟实现...原创 2018-05-02 17:29:50 · 320 阅读 · 0 评论 -
Linux入门【僵尸进程】的模拟实现
僵尸进程 当子进程退出,并且父进程没有读取到子进程的返回状态码,就会产生僵尸进程。 僵尸进程的产生原因 a. 子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它 b. 父进程没有调用wait()或waitpid()函数来等待子进程的结束 c. 网络原因有时会引起僵尸进程;僵尸进程的危害 僵尸状态(Z)不退出则需要一种用数原创 2018-05-02 17:09:02 · 823 阅读 · 0 评论 -
yum安装与rpm安装的区别
主要的区别在于: rpm :只能安装已经下载到本地机器上的rpm包,无法解决软件包的依赖关系。 yum:在线下载并安装rpm包,能更新系统,能自动处理包与包之间的依赖问题。yumYUM被称为 Yellow dog Updater, Modified,是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。YUM使用Python语言写成。YUM客户端基于RPM包进行管理,可以原创 2018-03-29 10:59:44 · 4702 阅读 · 0 评论 -
Linux入门 安装的常用方式(源码,rpm,yum)介绍
源码包源码包一般是(tar.gz、tar Z、tgz或tar.bz2)为后缀名源码安装(make install)阶段: 1 tar zvf x.tar.gz # 解压 2 ./configure [arg] # 配置 3 make # 编译 4 make install # 安装 源码卸载 1 make uninst原创 2018-03-29 10:50:35 · 200 阅读 · 0 评论 -
Linux 常用编辑器优缺点对比
1 、VimVim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。2 、EclipseEclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,你可以完全胜任以下编程语言的工作——Python, R,原创 2018-03-29 09:49:46 · 4722 阅读 · 0 评论 -
Linux入门10个常用简易小命令01
1 ifconfigifconfig -a eth0 查看eth0端口的网络ip信息2 su 一般用户与root用户的切换 $ su rootPassword:exit : 退出账户3 ls ls 查看目录下面的内容 -a (所有文件) -l 列出文件的详细信息 -d 将目录象文件一样显示 -o 显示文件的除组信息...原创 2018-03-01 16:11:48 · 1347 阅读 · 0 评论