linux
文章平均质量分 81
Amberda
(ˉ▽ ̄~)
展开
-
gdb调试
要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项gdb常用命令:list/l + 行号:显示源代码,接着上次的位置往下列每次10行list/l + 函数名:显示某个函数的源代码r/run:运行程序n/next:单条执行,相当于VS的F10s/step:进入函数调试,相当于VS的F11break/b + 行号:在该行设置断点break + 函数名:在某个函数...原创 2018-09-02 12:48:28 · 411 阅读 · 0 评论 -
网络------利用socket编程实现简单的UDP网络程序
之前已经介绍过socket编程了,并且实现了一个简单TCP网络程序 https://blog.csdn.net/qq_34021920/article/details/80153071 现在再来实现一个简单的UDP程序,来看看需要用到的操作注:UDP同样需要利用socket函数创建套接字,然后利用bind函数进行绑定。在这里就不再做详细介绍(链接戳上面),在这里介绍一下UDP进行数据读...原创 2018-05-05 13:54:14 · 592 阅读 · 0 评论 -
网络------利用socket编程实现简单的TCP网络程序
什么是socket之前我们在谈论进程间通信的时候,说到过一种实现进程间通信的机制,就是socket套接字,那么socket到底是什么呢? 来看看百度百科的解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对socket。socket本质是编程接口(API)在网络中我们利用IP地址+端口号来表示网络中的唯一一个进程,...原创 2018-05-05 13:51:15 · 828 阅读 · 0 评论 -
解析僵尸进程和孤儿进程
大家都知道Linux中的进程分为多种状态,例如: “R (running)”运行状态、 “S (sleeping)”睡眠状态(浅度睡眠)、 “D (disk sleep)”磁盘睡眠状态、 “T (stopped)”停止进程、 “X (dead)”死亡状态、 “Z (zombie)”僵死状态等等。 僵死状态是一个比较特殊的状态:当进程退出并且父进程(使用wait()系统调用)没有读取到...原创 2017-04-29 15:07:30 · 477 阅读 · 0 评论 -
浅谈Linux中的线程
1.线程概念 先来看看百度百科对线程的解释: 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有...原创 2017-06-07 10:23:04 · 334 阅读 · 0 评论 -
共享内存
之前我们已经了解了管道和消息队列:http://blog.csdn.net/qq_34021920/article/details/79596262今天我们再来看一种共享内存共享内存 共享内存顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存...原创 2017-06-08 22:25:40 · 814 阅读 · 0 评论 -
线程死锁
一、死锁概念 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 接下来给大家举一个简...原创 2017-06-15 21:24:52 · 399 阅读 · 0 评论 -
Linux中的线程安全和可重入函数
一、线程安全: 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。例如下面这几个函数就被称为线程不安全函数:(1).不保护共享变量的函数(2).保持跨过多个状态调用的函数(3)...原创 2017-06-27 08:47:45 · 326 阅读 · 0 评论 -
端口分类调研
一、什么是端口: 在 Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同 时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进...原创 2017-07-15 23:28:23 · 276 阅读 · 0 评论 -
浅析TCP协议中URG和PSH的区别与联系
以上为TCP的段格式,今天来主要看看图中URG和PSH 这两个标志位的区别和联系:URG:(紧急标志位)表示本报文段中发送的数据是否包含紧急数据。URG=1时,表示有紧急数据。后面的16位紧急指针字段只有在URG=1时才有效。PSH:(急迫标志位)在一个交互程序中,当客户发送一个命令给服务器时,它设置PSH标志并停下来等待服务器的响应。通过允许客户应用程序通知其TCP设置PSH标志,客户进程通知T...原创 2017-07-20 22:34:35 · 487 阅读 · 0 评论 -
网络------简介OSI及TCP/IP参考模型
OSI七层网络模型称为开放式系统互联参考模型,是计算机网路体系结构发展的产物,它是一个逻辑上的定义和规范,把网络从逻辑上分为了7层.。 来看一张图: 这七层每一层都有相关、相对应的物理设备,比如路由器、交换机等。来从下到上来介绍一下这七层:物理层物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础,物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠...原创 2018-05-06 10:32:49 · 357 阅读 · 0 评论 -
网络-----浅析IP数据报格式及TCP/UDP报文段首部格式
IP数据报的格式先来上张图在解释: 来看看每个字段的具体含义:(只讨论IPV4的情况)1、版本 占4位,指IP协议的版本。通信双方使用IP协议的版本必须一致。例:使用IPV4即填42、首部长度 占4位,顾名思义,这个字段就是标识了IP数据报的首部长度。该字段以4字节为单位,可以表示的最大的数是”1111”,也就是十进制数15,所以IP首部长度最大为60字节(15*4=60)。...原创 2018-05-18 20:52:21 · 5811 阅读 · 2 评论 -
网络-----多进程及多线程版本的TCP网络程序
之前我们已经利用socket编程实现了一个单进程的TCP网络程序(https://blog.csdn.net/qq_34021920/article/details/80153071) 我们再开启一个终端去连接服务器端,可以发现的是第二个客户端不能和服务器正常通信了,除非我们第一个客户端退出之后,第二个客户端才能和服务器正常通信。可以注意到大部分的socket接口都是阻塞型的。实际上除非特别指定...原创 2018-05-06 21:37:30 · 266 阅读 · 0 评论 -
vim常用命令总结
vim有多种模式,但是常用的就是三种模式:命令模式、插入模式、末行模式(还有可视模式) 命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到末行模式下。 插入模式:只有在插入模式下,才可以做文字输入,按ESC键可回到命令行模式。 末行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+冒号,即可进入该模式。在低行模...原创 2018-08-21 16:58:39 · 244 阅读 · 0 评论 -
Linux中的内存分配
不同的语言规定的内存分配是不一样的。 “段”是对一个完整的程序而言,也就是从操作系统的角度看 “区”则是对整个内存而言对于一个程序而言:栈:存放局部变量堆:动态开辟的变量,new malloc开辟出的数据段,也就是全局区/静态区 —— 又可以分为已初始化BSS段和未初始化DATA段,注意的是bss段不给该段的数据分配空间,只是记录数据所需空间的大小只读数据区—-存放字...原创 2018-08-21 16:47:43 · 289 阅读 · 0 评论 -
shell脚本-----命令代换
什么是命令代换命令代换简单来说就是在shell内部嵌套多条命令,一次执行得到结果shell的命令代换有两种方式可以实现:` `:反引号$( ):美元符号加圆括号来看例子: 既然这两种方式都可以进行命令代换,那么它们有什么区别呢?$( )支持命令嵌套使用,而反引号是不行的 这条命令虽然没有什么意义,但是很好的说明了$( )是支持嵌套使用的反引号比较陈...原创 2018-07-07 18:03:59 · 273 阅读 · 0 评论 -
shell脚本----shell的字符串截取
在这里总结一下shell脚本的字符串截取方式以字符串 str=”1:2:3:4:abcd” 为例1. # 截取,删除左边字符,保留右边字符#!/bin/bashstr="1:2:3:4abcd"echo ${str#*:}str为要截取的字符串,#为运算符,*:表示从左边开始删除第一个:及它左边的所有内容 所以结果如下: 2. # # 截取,删除左边字符,保留右边字...原创 2018-07-07 00:38:17 · 7994 阅读 · 0 评论 -
shell脚本----shell基本语法及实现一个简单的进度条
Shell 脚本,是一种为 shell 编写的脚本程序。shell编程和java、Python、PHP编程类似,只要有一个可以编写代码的文本编辑器和一个可以解释并执行代码的解释器就可以了。 来看个简单的shell脚本:...原创 2018-07-06 23:38:12 · 1702 阅读 · 0 评论 -
Linux-----浅析grep工具及正则表达式
grep工具是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep的语法: 在使用grep的时候需要注意以下几点:grep不加引号直接过滤字符串grep在进行模式匹配的时候必须加引号,单引和双引号都可以grep在引用变量的时候必须加双引号来看看grep的选项:-a:不要忽略二进制数据-A #:除了显示符合条件的那一行之外,还显示该行之...原创 2018-07-08 21:49:10 · 351 阅读 · 0 评论 -
网络-----Linux下常见网络命令总结
主要说明Linux环境下命令的使用ping命令1、原理ping 命令是用来测试TCP/IP 网络是否畅通或者测试网络连接速度的命令,对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping就是一个测试程序,如果ping运行正确,大体上就可以排除网络访问层、网卡、Modem的输入输出线路、电缆和路由器等存在的故障,从而缩小问题的范围。 ping命令的原理是根据计算...原创 2018-06-06 12:39:02 · 25296 阅读 · 1 评论 -
网络-----TCP报头中的选项字段
选自《Linux高性能服务器编程》3.2.2TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。典型的TCP头部选项结构如图所示。 选项的第一个字段kind说明选项的类型 有的TCP选项没有后面两个字段,仅包含1字节的kind字段第二个字段length(如果有的话)指...原创 2018-05-20 12:07:53 · 11530 阅读 · 2 评论 -
网络-----浅谈TCP的三次握手和四次挥手
TCP三次握手TCP连接建立的过程被称为三次握手,先来看看三次握手的过程,上张图 1、客户端向服务器发出连接请求报文段,这时TCP报文段首部的同步标志位 SYN=1 ,同时选择一个初始序号 seq=x(图中seq=123)。TCP规定,SYN报文段不能携带数据但要消耗掉一个序号。这时客户端进入SYN_SENT状态——第一次握手2、服务器收到连接请求报文段之后若同意建立连接,就向客户...原创 2018-05-20 10:55:13 · 397 阅读 · 0 评论 -
NAT技术与代理服务器
作为标识TCP/IP网络中每个结点的IP地址,由于它只有32个bit的空间,随着网络的发展,它变得越来越稀有,再加上IP地址地区分配的极端不平衡,已使一些地区比如亚洲部分国家的IP资源很快就会用完,在IPv6还没有普及开来之时,为了解决IP地址的燃眉之急,我们需要一种手段来尽量减少对公网IP的使用,这种手段就是NAT。NAT:(Network Address Transtation)网...原创 2017-07-21 20:11:25 · 578 阅读 · 0 评论 -
ARP脚本及ARP协议
ARP----地址解析协议 地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接受返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一段时间,下次请求时直接查询ARP缓存以节约资源。 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的...原创 2017-07-23 22:54:27 · 405 阅读 · 0 评论 -
进程间通信----共享内存
之前我们已经了解了管道和消息队列:http://blog.csdn.net/qq_34021920/article/details/79596262 今天我们再来看一种进程间通信——–共享内存共享内存共享内存:顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可...原创 2018-03-19 20:14:07 · 217 阅读 · 0 评论 -
进程间通信----消息队列
之前我们已经看过进程间通信的一种方式——–管道了:http://blog.csdn.net/qq_34021920/article/details/79559603 今天我们来再看看进程间通信的另一种方式——–消息队列消息队列消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。消息队列与命名管道有一样的不足...原创 2018-03-18 20:35:15 · 335 阅读 · 0 评论 -
进程间通信---管道
进程间通信一般而言,不同的进程看到的那一份公共资源,是由操作系统提供的,任何一个进程的全局变量在另一个进程中都看不到,所以,进程之间要交换数据就需要通过内核,在内核中开辟一块缓冲区,进程一把数据从用户空间拷贝到缓冲区,进程二再从缓冲区把数据读走,内核提供的这种机制就叫做进程间通信 (IPC)。 进程间通信的目的:数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个...原创 2018-03-15 10:59:10 · 311 阅读 · 0 评论 -
popen、system函数和fork的区别
本文转载自:http://blog.csdn.net/liuxingen/article/details/47057539一、system和popen1. system()和popen()简介在linux中我们可以通过system()来执行一个shell命令,popen()也是执行shell命令并且通过管道和shell命令进行通信。 system()、popen()给我们处理了f转载 2018-01-27 15:54:31 · 3127 阅读 · 0 评论 -
Linux---进程替换及编写一个自己的shell
进程替换用fork创建子进程后,子进程执行的是和父进程相同的一段程序(但有可能执行不同的代码分支),如果想让子进程执行另一个程序该怎么办呢?这时候就有了exec函数。 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的进程ID并未发生改变。 来看看exec函数家族都有哪些函数?...原创 2018-01-27 14:59:21 · 447 阅读 · 0 评论 -
Linux---进程控制
一、进程创建1. fork()函数#include <unistd.h>pid_t fork(void);fork()函数从一个进程中创建一个新进程,新进程为子进程,原来的进程为父进程。 创建成功给父进程返回子进程的id,给子进程返回0。 创建失败则返回-1来看段代码感受一下#include <stdio.h>#include <...原创 2018-01-25 16:37:05 · 288 阅读 · 0 评论 -
Linux---文件描述符fd与FILE结构体
之前在学习C++继承和多态的时候对于三个概念理解的不是很透彻,现在对这三个的概念来总结一下重载 overload重载:简单说就是函数名称相同,但是参数列表不相同的情形,这样的同名不同参数的函数互相称之为重载函数。 重载实际上属于多态的一种,是编译时多态即静态多态 来看看重载的条件相同的范围(成员函数重载)函数名相同参数列表不同在这里解释一下参数列表不同可以是以下...原创 2018-01-31 13:54:19 · 632 阅读 · 0 评论 -
Linux中进程描述符task_struct结构体详解
大家都知道进程吧,那么进程到底是什么呢?进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。初学者经常会把进程和程序搞混,注意,程序并不是进程。实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。我们来看看进程与程序的不同:1.存储位置不同,程序在硬盘上,进程在内存里2.进程除了拥有和程序一样的代码,还有PCB,进程比程序多了...原创 2017-04-15 13:49:35 · 1434 阅读 · 0 评论 -
认识并编写一个Makefile
一、Makefile的产生当一个项目源文件很少的时候,我们可以手动使用gcc命令来进行编译,但是如果当项目发展到一个庞大的规模时,源文件不计其数,其按类型、功能、模块分别放在若干个目录中,再手动敲gcc命令去编译就变得不太可能了。所以呢,在这样的历史背景下,就出现了某个大牛(斯图亚特·费尔德曼),在某年(1977年)某地(贝尔实验室)制作了这样一个软件,它的名字就叫做make。二、Makefile的原创 2017-11-25 14:12:23 · 358 阅读 · 0 评论 -
进程间通信----信号量
继续来看进程间通信的方式——–信号量 (管道、消息队列、共享内存:http://blog.csdn.net/qq_34021920/article/details/79605495)信号量信号量本身是一种计数器,用来衡量临界资源数量的多少。它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件、外部设备)来实现进程间通信。它本⾝身只是一种外部资源的标识。信号量在此过程中负责数据...原创 2018-03-20 16:34:02 · 576 阅读 · 0 评论 -
Linux静态库和动态库
静态库:静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。当然,程序运行的时候将不再需要这种库。 这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,它的优点就显而易见了,即编译后的执行程序不需...原创 2018-03-24 21:45:15 · 156 阅读 · 0 评论 -
Linux----线程(同步与互斥)
在之前接触线程的时候,对它还不算特别了解,所以写出的总结就比较浅浅谈Linux线程 今天在之前博客的基础上在重新总结一下。 就不去解释线程的基本概念了,可以戳上面的链接线程相关函数线程创建#include &lt;pthread.h&gt;int pthread_create(pthread_t *thread, const pthread_attr_t *at...原创 2018-04-08 10:31:43 · 350 阅读 · 0 评论 -
调研TCP定时器
TCP定时器 TCP是提供可靠的传输层,既然传输数据就必须确认从另一方收到了数据,但是数据和确认在传输过程中都有可能丢失,那么这个时候,TCP协议是使用定时器进行实现的,如果定时器溢出时还没有收到确认,就会重传,关键在于超时和重传策略,怎样决定超时的时间间隔和如何确定重传的频率。 TCP定时器的分类:(1)重传定时器(2)坚持定时器(3)保活定时器(4)时间等待定时器接下来具体看看这四种定时器...原创 2017-07-29 19:15:51 · 293 阅读 · 0 评论 -
Linux下g++/gdb的简单安装和vim的配置
Linux下g++/gdb的简单安装和vim的配置首先说明,本片博客所讲的g++和gdb的安装以及vim的配置仅在Centos 6.0 版本上进行了测试,所以,不同的版本可能会出现差异!注: g++/gdb的安装方法给出的都是简单命令下载安装;g++的安装: 现在下载的Centos的版本几乎都会自带gcc和vim,所以我们需要的只是g++而已;如果没有请先...转载 2017-07-30 11:53:49 · 1222 阅读 · 0 评论 -
Linux下编写简易进度条
首先,进入任意一个目录touch一个.c的文件(我的文件名为jdtiao.c)然后vi +文件名进入这个文件打开之后进入插入模式,开始写我们进度条的代码。编辑完成之后保存并退出。然后gcc+文件名 对这个文件进行编译 ls会发现有一个a.out的文件执行./a.out:这样我们的进度条就完成啦!...原创 2017-04-08 21:30:03 · 569 阅读 · 0 评论 -
Linux中的黏滞位
1.粘滞位:(Sticky Bit)粘滞位是一个访问权限标志位,可以用来表示文件和路径。目前只针对目录有效,对于文件已经没有效果了2.黏滞位的作用:粘滞位最常用是应用于路径,当路径被设置粘滞位后,路径下的文件只有owner或root才能重命名或删除文件,如果没有粘滞位,任何用户,不管是不是owner或root,只要有路径写和执行权限,都可以对文件进行删除或者重命名。(粘滞位可以阻止一般用户删除/重...原创 2017-04-03 20:28:56 · 414 阅读 · 0 评论