Linux
文章平均质量分 74
阿敢
这个作者很懒,什么都没留下…
展开
-
实现自主shell
本文将编写一个程序,当程序跑起来时,可以输入linux下的相关命令,然后程序也会返回相应命令的结果。具体实现代码如下:#include <stdio.h>#include <unistd.h>#include <string.h>#include <ctype.h> //isspaceint main(){ char ...原创 2019-08-09 15:45:12 · 240 阅读 · 0 评论 -
netstat工具,pidof命令
1. netstat工具(1)功能: 用以查看网络状态的工具(2)语法: netstat [选项](3)常用选项: 1)-n:拒绝显示别名,能显示为数字的全部转化为数字 2)-l:列出所有当前处于监听状态的服务 3)-p:显示建立相关链接的程序名 4)-t(tcp):仅显示TCP相关选项 5)-u(udp):仅显示UDP相关选项 6)...原创 2018-06-19 19:18:37 · 488 阅读 · 0 评论 -
守护进程
守护进程也被称为精灵进程,它具有以下特点: (1)是运行在后台的一种特殊进程; (2)它独立于控制终端,所以不能与用户进行直接交互; (3)它周期性地执行某种任务或等待处理某些发生的事件; (4)它不受用户登录注销的影响,一直在运行着;其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止; (5)Linux下大多数服务器就是用守护进程...原创 2018-06-03 14:34:18 · 193 阅读 · 0 评论 -
TCP/IP五层模型——传输层(端口号、UDP协议)
应用层:负责数据能够从发送端传输到接收端一. 再谈端口号 我们知道端口号标识了一台主机上进行通信的一个的应用程序。原创 2018-06-19 20:23:14 · 2454 阅读 · 0 评论 -
进程组、作业、会话
进程组、作业、会话一. 进程组 我们知道,一个程序运行起来会变成一个进程,每个进程都有一个进程ID,但是除了这个ID,每个进程还属于一个进程组。进程组,顾名思义,是一个或多个进程的集合。每个进程组有一个唯一的进程组ID,且每个进程组都可以有一个组长ID。组长ID的标识是:进程组ID等于其进程ID,组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要进程组中有一个进程存在,该进...原创 2018-05-24 23:01:32 · 461 阅读 · 0 评论 -
生产者与消费者模型
生产者与消费者模型本文主要是继文章线程的同步与互斥,继续研究的线程同步问题。一. 背景知识 生产者与消费者模型是一个著名的同步问题,它是基于等待/通知机制实现的。它描述的是:有一块缓冲区作为公共区域,生产者生产完产品放入该区域,消费者消费是从区域中拿走产品。它比较注意的是要实现以下几点:(1)生产者生产时,消费者不能消费(2)消费者消费时,生产者不能生产(3)缓冲区空时,消费者不能消...原创 2018-05-23 17:12:32 · 597 阅读 · 0 评论 -
TCP/IP五层模型——应用层(HTTP协议、简单的HTTP服务器)
关于TCP/IP模型的简单介绍,在TCP/IP五层模型一文中有简单介绍,本文主要详细介绍其中的应用层相关内容。首先介绍一个定义: 应用层协议:在网络版加法计算器一文中,我们介绍的实现网络版本的加法计算器有两种方法。其实无论是哪种方法,只要能够保证,一端发送时构造的数据,另一端能够正确的解析,就是ok的,这种约定就是应用层协议。一. HTTP协议——超文本传输协议 程序员们自己编...原创 2018-06-05 11:04:16 · 3999 阅读 · 0 评论 -
实现网络版加法计算器
有关TCP/IP五层模型,在之前的TCP/IP模型博客中有做简单介绍,下面我们将详细介绍应用层。一. 再谈“协议” 我们知道,协议就是一种“约定”。套接字实现的网络通信的接口,在读写数据时,都是按照“字符串”的方式来发送和接收的,那如果我们要传输一些“结构化的数据”,该怎么办呢? 这里我们就要提出两个概念:(1)序列化:将结构体等类型转化为...原创 2018-06-03 15:26:22 · 865 阅读 · 0 评论 -
线程同步与互斥——互斥量、条件变量、POSIX信号量
线程的互斥与同步一. 互斥量(mutex)——实现互斥 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程的栈空间内,这种情况,变量归属单个线程,其他线程都无法获得这种变量。但有时候,很多变量需要在线程间共享,这样的变量叫做共享变量。我们可以通过数据间的共享,完成线程之间的交互。 但是,多个线程并发的操作共享变量,会带来问题,比如下面这样://售票系统 ...原创 2018-05-22 17:26:22 · 406 阅读 · 0 评论 -
TCP/IP五层模型——传输层(TCP协议——协议段格式、特点)
1. TCP协议端格式其中:(1)16位源端口号:标识报文从哪个进程来(2)16位目的端口号:标识报文要发给哪个进程(3)32位序号/32位确认序号:可以保证请求和应答;按序到达;重传机制;批量的高效率发送。因为TCP进行的全双工通信,即双发都可以发送和接收数据,因此需要一个序号和确认序号对(在后面文章中的确认应答及超时重传机制中详细介绍)(4)4位首部长度:表示该TCP报文的头部有多少个4字节(...原创 2018-06-19 22:02:42 · 1137 阅读 · 0 评论 -
TCP/IP五层模型——传输层(TCP的连接管理机制——三次握手、四次挥手)
在上一篇博客中,我们介绍了TCP协议的协议端格式以及特点。。我们知道TCP是具有可靠性的,其中本文要介绍的TCP的连接管理机制就是保证可靠的一个机制。 在正常情况下,TCP要经过三次握手建立连接、四次挥手断开连接。1. 连接管理机制的具体过程 下图则是TCP三次握手、四次挥手的具体实现过程:2. 为什么要进行三次握手建立连接?为什么不是两次?四次?更多次...原创 2018-07-15 11:08:02 · 1386 阅读 · 0 评论 -
TCP提高可靠性&性能的一些机制
一. 确认应答(ACK)机制原创 2018-07-27 11:23:50 · 616 阅读 · 0 评论 -
练习使用linux下env,set,export等环境变量相关的函数及命令
1、env功能:显示所有环境变量2、echo $NAME(NAME为环境变量名)功能:查看环境变量内容3、测试PATH(放系统搜索可执行程序的路径)创建一个简单的C程序:编译执行:注意:这里可执行文件名不能用test,因为在后面实现不加路径执行时,会与系统中的命令冲突,从而执行不了。我们可以知道,ls不仅是命令也是程序。./test与ls同样为二进制命令,但...原创 2019-08-09 14:29:17 · 413 阅读 · 0 评论 -
TCP/IP五层模型——数据链路层
数据链路层主要功能是:两个设备(同一数据链路节点)之间的数据帧的传送与识别。一.认识以太网1.相关概念(1)"以太网" 不是一种具体的网络,而是一种技术标准。它既包含了数据链路层的内容,也包含一部分物理层的内容。(2)以太网是当前应用最广泛的局域网技术,与之并列的还有令牌环网,无线LAN等。(3)以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等。2.以...原创 2018-08-09 09:43:06 · 1155 阅读 · 0 评论 -
IP协议——NAT技术
在之前介绍网络层时,我们有提到过对于IPv4协议来讲,IP地址不够的问题。NAT(网络地址转)技术则是当前解决IP地址不够用的重要手段,它是路由器的一个重要功能。1.NAT技术的作用(1)NAT可以将私有IP对外通信时转化为全局IP,即NAT就是将私有IP与全局IP相互转化的技术(2)很多家庭,学校,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器设置全局IP(3)全局I...原创 2018-08-09 17:04:52 · 1763 阅读 · 0 评论 -
网络层——ICMP协议
举例来讲,一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否通畅;但是IP协议并不提供可靠传输,所以IP协议并不会通知传输层是否丢包及丢包的原因。所以才有了ICMP协议的存在。ICMP协议即Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机与路由器间传递控制消息。这里的控制消息指的是:网络是否通畅、主机是否可达、路由是否可用等网络本身的消息。1....原创 2018-08-09 15:50:38 · 1273 阅读 · 0 评论 -
应用层——DNS域名解析协议
TCP/IP中我们使用IP地址+端口号来确定网络上的某一主机的某一程序,但是IP地址不方便记忆。所以产生了一个叫做主机名的东西,它是一个字符串。我们使用hosts文件来描述主机名与IP地址的对应关系,这样只要我们知道主机名就可以找到网络上对应的主机。 但是,我们也知道,在局域网中的主机的IP地址会随着网络变化而变化,同一主机在不同时间连不同的局域网,被分配到的IP地址...原创 2018-08-09 11:41:40 · 872 阅读 · 0 评论 -
ARP协议——地址解析协议
zhi先要强调的是ARP协议不是一个单纯的数据链路层协议,而是介于数据链路层与网络层间的协议。1.ARP协议的作用ARP协议建立了主机的IP地址到MAC地址的映射关系。(1)在网络通信时,源主机知道目的主机的IP地址与端口号,但是不知道目的主机的硬件地址(2)而数据包是要先被网卡接收才会去处理上层协议。当主机的硬件地址与接数据包的目的主机的硬件地址不符合,则数据包会被直接丢弃(...原创 2018-08-09 11:09:46 · 722 阅读 · 0 评论 -
TCP/IP五层模型——网络层
网络层的主要功能就是在复杂的网络环境中确定一个合适的路径。一. IP协议1.基本概念(1)主机:配有IP地址,但是不进行路由控制的设备;(2)路由器:配有IP地址,又能进行路由控制;(3)节点:是主机和路由器的统称。 这里的路由控制指的是路由控制器根据控制表转发数据包,它根据要转发的数据包中的目的IP地址与控制表对比得出下一个要转发去的路由器。2.协议头格式...原创 2018-07-27 19:21:16 · 635 阅读 · 0 评论 -
TCP的面向字节流&粘包问题&异常情况
一. TCP面向字节流 创建一个TCP的socket,要同时在内核中创建一个发送缓冲区和接收缓冲区。1.调用write时,数据会先写入发送缓冲区;2.如果发送的数据字节数太长,就会被拆分成多个TCP的数据包发出;如若发送的字节数太短,就会在缓冲区等待,等到缓冲区长度差不多了,或者其他合适的时机才会发送出去;3.接收数据时,数据也是从网卡驱动程序到达内核的接收缓冲区;4...原创 2018-07-27 12:03:26 · 642 阅读 · 0 评论 -
可重入函数,竞态条件与sigsuspend函数,SIGCHLD信号
Linux信号-可重入函数&竞态条件与sigsuspend函数&SIGCHLD信号一. 可重入函数1. 定义的简单介绍 当main函数在调用一个函数如insert函数还未返回时,由于信号中断在执行信号的自定义行为时,再次调用insert函数,这就叫重入。如果insert函数访问的是一个全局链表,有可能因为重入导致结果错乱,这样的函数就叫不可重入函数。反之,如果inse...原创 2018-04-30 15:24:23 · 264 阅读 · 0 评论 -
线程ID与进程ID
进程ID和线程ID1. 内核标识的线程ID-LWP,在系统级别有效 在Linux下,目前的线程实现是Native POSIX Thread Libaray,简称NPTL。在这种实现下,线程又被称为轻量级进程。每一个用户态的线程,在内核中都对应一个调度实体,也拥有自己的进程描述符(task_struct结构体)。 没有线程之前,一个进程对应内核中一个进程描述符,对应一个进...原创 2018-05-20 15:26:58 · 2903 阅读 · 0 评论 -
UDP套接字(网络)编程
简单的UDP网络编程一. UDP协议初识 UDP协议又叫用户数据报协议,是传输层的一种协议。根据该协议在进行数据传输时,两台主机之间不需要相互连接,直接根据对方的IP地址和端口号进行数据传送。所以不用花费时间去连接主机,因此根据该协议进行传输时,速度会相对TCP协议快一点;但同时数据传送错误的概率相对TCP协议会较高;而且基于UDP协议进行数据传输,传输的基本单位是数据报,即源主机一...原创 2018-05-16 17:06:02 · 1342 阅读 · 0 评论 -
线程创建,线程等待,线分离,线程终止
Linux-线程的控制一.原创 2018-05-20 10:05:39 · 332 阅读 · 0 评论 -
线程概念、线程与进程的区别
Linux-线程概念/线程控制一. 线程概念 1.在一个程序中的一个执行路线就叫做线程。更准确的定义是:线程是一个在进程内部运行的比进程更细致的执行流。且在Linux下没有真正的线程,因为线程与进程的结构相似,所以我们拿进程来模拟线程。 在Linux中,目前线程的实现时Native POSIX Thread Libary简称NPTL。在这种实现下,每个用户级线程对应一个...原创 2018-04-30 18:00:00 · 606 阅读 · 0 评论 -
gdb调试多进程、多线程程序
以下文章转载自:https://blog.csdn.net/snow_5288/article/details/72982594一,gdb的基础知识1>介绍: gdb是Linux环境下的代码调试工具。 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出:ctrl + d 或 quit 5>调试过程中的常用命令: l...转载 2018-04-30 16:48:11 · 170 阅读 · 0 评论 -
Linux进程间通信-共享内存 &信号量
一、共享内存1、简单介绍(1)共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递不再涉及内核,即进程不再通过执行进入内核的系统调用来传递彼此的数据。(2)共享内存的生命周期随内核。(3)注意:共享内存未提供任何保护资源,即共享内存自身没有同步与互斥机制,但它是临界资源,所以我们需要利用其它机制来保证数据的正确性,Linux下就可以用信号量达...原创 2018-04-25 16:50:37 · 2085 阅读 · 0 评论 -
Linux进程间通信 -管道&消息队列
进程间通信的目的: (1)数据传输:一个进程需要将它的数据发送给另一个进程; (2)资源共享:多个进程之间需要共享同样的资源;(3)通知事件:一个进程需要向另一个进程发送消息,通知它(它们)发生了某些事(比如子进程终止时要通知父进程); (4)进程控制:有些进程希望完全控制另一个进程的执行,能够及时知道它的状态改变。进程间通信(IPC)分类:(1)...原创 2018-04-23 15:09:54 · 483 阅读 · 0 评论 -
Linux基础IO-系统调用接口open/read函数等&文件系统&软硬链接&静/动态库
一、练习open/read/write/close等文件相关系统调用接口,纵向对比fd和FILE结构体1、open函数(1)函数原型(2)函数功能用于打开或创建文件,在打开或创建文件可以指定文件的属性及用户的权限等。若目标文件不存在,需要创建文件时,使用三个参数的open函数,否则,使用两个参数的open。(3)参数1)pathname : 要打开或创建的目标文件...原创 2018-04-07 10:11:34 · 640 阅读 · 0 评论 -
Linux进程控制-进程创建/终止/等待&封装fork/wait&函数popen/system
一、进程创建, 终止,等待(使用代码实现)1、进程创建(1)fork函数创建进程fork调用格式如下:#include <unistd.h>pid_t pid = fork();返回值:子进程返回0,父进程返回子进程的pid,创建失败返回-1编写代码创建进程如下:#include <stdio.h>#include <unist...原创 2018-04-06 11:17:27 · 1246 阅读 · 0 评论 -
Linux进程调度&僵尸进程&孤儿进程
一、调研进程的调度算法进程调度:首先,进程调度在操作系统来讲是一种资源分配。因为系统的资源有限,但是可能有多个进程都在同时进行都需要资源,这时操作系统就要按照一定的规则来进行进程调度以此来合理分配资源。1、调度程序(1)调度程序负责各个进程为分配处理器。Linux中无法停止当前正在运行的进程,只能被动地由调度程序将其选择为运行进程,或是切换为等待状态;(2)Linux的进程调度由s...原创 2018-03-24 12:10:42 · 317 阅读 · 0 评论 -
Xshell评估过期的解决办法
本文转载自:点击打开链接之前提示xshell5升级,所以导致提示评估过期无法使用,然后在网上下载破解版的还是不行,最后终于找到了解决办法:1、登录网景官网的下载页面:https://www.netsarang.com/download/down_form.html?code=522,页面截图如下:2、不要看到英文一脸懵逼,直接在页面中有红色*号的地方输入个人信息,license...转载 2018-05-03 11:01:25 · 897 阅读 · 0 评论 -
封装二元信号量P/V操作成动态&静态库
封装二元信号量P/V操作 因为二元信号量的PV操作和静/动态库的打包使用在我之前的文章都有详细写过(链接附在下面,有需要可以戳进去查看),所以这里不再重复,直接给大家看图和结果。二元信号量的P/V操作实现静/动态库的打包使用一. 二元信号量封装成静态库 先将PV操作封装为静态库 测试使用:二. 二元信号量封装成动态库 ...原创 2018-04-25 17:15:33 · 293 阅读 · 0 评论 -
Linux-进程同步与互斥&生产消费者原理
进程同步与互斥&生产消费者原理一. 进程互斥与同步 进程互斥与同步机制的主要任务是:对多个相关进程在执行次序上进行协调,使并发执行的诸进程间能按照一定的规则(或时序)共享系统资源,并能很好的相互合作,从而使程序能够正确执行。 在多个进程共享资源或为完成某一任务而相互合作时,可能存在以下两种形式的制约关系:(1)间接相互制约关系(互斥) 多个程序并发...转载 2018-04-25 17:26:31 · 803 阅读 · 0 评论 -
网络编程-IP地址、端口号、网络字节序
IP地址、端口号、网络字节序本文中部分名词可见:协议、TCP/IP模型、数据包封装与分用一.IP地址1. 简单认识 IP协议有两个版本:IPv4和IPv6。 (1)IP地址在IP协议中,用来标识网络中不同主机的地址。 (2)对于IPv4来讲,IP地址是一个4字节,32位的整数;对于IPv6来讲,IP地址是一个16字节,128位的整数。 (3)我们常用...原创 2018-05-13 19:13:27 · 808 阅读 · 0 评论 -
网络编程-协议、TCP/IP五层模型、封装与分用
网络编程一 协议、TCP/IP五层模型一.协议1.定义 我们可以把协议看作是一种约定。比如说,收假时从家里来学校,你的父母让你安全到学校时给他打个电话报平安。等我们到学校了,给他们打个电话,说一句到学校了。这种约定就可以看作是“协议”。对于两台想要互相通信的主机来讲,只是约定好协议就可以了吗?答案是,不是的。两台主机间不仅要约定好协议,更要双方都按照协议方式履行协议才可以。 ...原创 2018-05-13 18:01:33 · 840 阅读 · 0 评论 -
调试的-g选项,readlf命令,
1. 为什么调试的时候需要在编译选项中加上 '-g' 选项 默认编译生成的可执行文件是无法使用 gdb 来跟踪或调试的,因为可执行程序中没有可供 gdb 调试使用的特殊信息,为了将必要的调试信息整合到可执行文件中,我们便需要用到 -g 选项,这样生成的可执行程序,倘若出现问题,便可以使用 gdb 找出问题具体出现的位置,便于问题的解决。 “-g”标志是对程序进行调试性编...原创 2018-05-18 17:58:02 · 2129 阅读 · 0 评论 -
Linux信号-信号集&信号屏蔽字&捕捉信号
阻塞信号&捕捉信号一. 阻塞信号1. 信号的常见其他概念 实际执行信号的处理动作(3种)称为信号递达; 信号从产生到递达之间的状态,叫做信号未决; 进程可以选择阻塞某个信号; 被阻塞的信号产生时,将保持在未决状态,直至进程取消对该信号的阻塞,才执行递达的动作;注意:阻塞和忽略是不同的。只要信号阻塞就不会被递达;而忽略是信号在递达之后的一种处理方式。2. 在内核中的表...原创 2018-04-29 15:58:17 · 2581 阅读 · 1 评论 -
实现一个彩色进度条
Linux下实现一个彩色进度条实现思想:1. 首先得用字符显示直观上的进度,我们用一个“#”表示1%;2. 然后每增加1%,“#”增加一个,同样在每次打印后加上一个百分制的数,表示进度条到哪了;3.将进度条显示为彩色的实现过程:1. 每增加一个“#”打印一次,我们定义一个数组,每循环一次,打印一次char buf[120] = "#"; for(i...原创 2018-05-17 09:57:48 · 750 阅读 · 0 评论 -
TCP套接字(网络)编程
简单的TCP网络编程本文中用到的内容可在另一篇博客中见到UDP套接字编程一. 初识TCP协议 TCP叫做传输控制协议。它具有以下特点:(1)传输层的协议(2)面向连接:基于TCP进行网络通信时,要先建立连接,建立成功才能通信。而UDP不需要连接可直接通信,所以相对而言,TCP的速度较慢,因为建立和维护连接需要花费资源。(3)可靠传输:相对UDP而言,TCP增加了出错重传等机制,以确保...原创 2018-05-17 08:30:37 · 708 阅读 · 0 评论