![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
雪碧柠七
这个作者很懒,什么都没留下…
展开
-
Linux vim的简单配置及Linux下实现进度条
vim的简单配置初学linux对vim做了简单的配置,配置代码如下:set nu set ts=4 set ai inoremap ' ''<ESC>iinoremap " ""<ESC>iinoremap ( ()<ESC>iinoremap [ []<ESC>iimap { {<CR>}<ESC原创 2018-03-18 19:54:31 · 317 阅读 · 0 评论 -
Linux 如何实现信号屏蔽
所需信号集操作函数#include<signal.h>int sigemptyset(sigset_t *set);//初始化set所指向的信号集,使其所有信号对应bit清零int sigfillset(sigset_t *set);//初始化set所指向的信号集,使其所有的对应bit置位int sigaddset(sigset_t *set,int signo);//在该信号集...原创 2018-05-12 17:44:34 · 2260 阅读 · 0 评论 -
Linux 编写简易shell,支持输入输出重定向
引用前面写过的代码:https://blog.csdn.net/ihaha233/article/details/79833397将void do_execute(void)替换为新写的void do_shell()即可实现。下面先看代码:#include <unistd.h>#include <sys/wait.h>#include <stdio.h>#...原创 2018-05-12 22:44:06 · 794 阅读 · 1 评论 -
Linux 线程浅析
什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是一个进程内部的控制序列。一切进程至少都有一个执行线程。进程和线程进程是承担分配资源的基本单位,线程是调度的基本单位。Linux下线程是轻量级进程。也就是说,Linux下是用进程模拟线程的。每一个用户态线程,在内核中都对应一个调度实体,也拥有自己的进程描述符。 POSIX线程库与线程有关的函数构成了一个完整的系列,...原创 2018-05-13 16:36:56 · 306 阅读 · 0 评论 -
Linux 线程同步与互斥
为什么线程需要同步与互斥机制⼤部分情况,线程使⽤的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程⽆法获得这种变量。但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。多个线程并发的操作共享变量,会带来⼀些问题。 假设两个线程读写相同变量时,线程A读取变量然后给这个变量赋予一个新的值,但写操作需要两...原创 2018-05-13 21:11:47 · 132 阅读 · 0 评论 -
Linux 死锁
什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁产生的原因及四个必要条件产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够...转载 2018-05-14 09:15:03 · 213 阅读 · 0 评论 -
Linux 进程组/作业/会话
进程组 每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。 组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终...原创 2018-05-14 13:55:15 · 220 阅读 · 0 评论 -
Linux 守护进程
认识守护进程 守护进程也成为精灵进程,是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待某些发生地事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程所实现的。 Linux系统启动时会启动很多系统服务进程。这些服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登陆或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程(守护进...原创 2018-05-14 15:26:05 · 503 阅读 · 0 评论 -
Linux gdb调试多进程
gdbgdb是Linux下的调试工具,如果需要调试,则要在编译时加上-g选项,否则无法调试。gdb常用指令:gcc/g++ -g test.c/test.cpp ———-调试前先对源文件进行编译,注意一定要加 -g。 gdb a.out ——— a.out为可已经编译好的可执行文件(当然如果存在语法错误是肯定不能进入gdb调试的)。 list/l 行号 ——- 显示源代码,从指定行号处开始显示,每...原创 2018-05-14 23:20:17 · 1930 阅读 · 0 评论 -
Linux gdb调试多线程
gdb调试多线程gdb调试多线程的方法和调试多进程相差不多,我们先写一段多线程代码以供测试:#include <stdio.h>#include <pthread.h>void* rout1(void* arg){ printf("I am %s!\n",(char*)arg); return (void*)0;}void* rout2(void* ar...原创 2018-05-15 00:09:33 · 2294 阅读 · 0 评论 -
Linux 信号的基本概念及信号捕捉过程
信号的基本概念Linux中信号有64个,常见信号有31个,用kill -l即可查看: 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中定义#define SIGINT 2。所以,使用kill命令时既可以 kill -SIGINT 9527 也可以是 kill -2 9527 其中9527为进程ID。信号处理的常见方式1.忽略此信号2.执行该信号的默认处理过程3...原创 2018-05-12 16:46:14 · 479 阅读 · 0 评论 -
Linux gdb的安装过程
安装gdb的过程很简单,具体步骤如下:step1:首先检查系统中有没有安装过,有的话用一下命令卸载gdb旧版本step2:安装Texinfo文档系统这个要先切换到rootstep3: 在网址:http://ftp.gnu.org/gnu/gdb下载gdb源码包将源码包放在自己可以找到的位置step4:打开Download目录,用tar -zxvf 命令解压缩你下载的源码包step5:.用以下命令生...转载 2018-05-12 15:32:54 · 5144 阅读 · 0 评论 -
Linux 将二元信号量P/V操作,封装成动态/静态库,并分别使用并测试
P,V操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。 ftok函数,先不去了解它的作用来先说说为什么要用它,共享内存,消息队列,信号量他们三个都是找一个中间介质来进行通信的,这种介质多的是。就是怎么区分开来,就像唯一一个身份证来区分人一样。只要唯一就行,就想起来了文件的设备编号和节点,它是唯一的,但是直接用它来做识别好像不太好,不过可以用它来产生一个号。ft...原创 2018-04-26 23:34:55 · 610 阅读 · 0 评论 -
Linux 进程
基本概念狭义定义:进程是正在运行的程序的实例。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。task_struct在Linux中描述进程的结构体叫做task_struck。task_struck是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。...原创 2018-03-18 21:42:32 · 113 阅读 · 0 评论 -
Linux 编写简单的add/sub/mul/div函数,并打包成动/静态库,并分别使用。
以下为add/sub/mul/div代码:add.c#include "add.h"int add(int a,int b){ return a+b;}add.h#pragma once#include <stdio.h>int add(int a,int b); sub.c#include "sub.h"int sub(int a,int b){ ...原创 2018-03-25 17:19:06 · 1474 阅读 · 0 评论 -
Linux 进程创建, 等待, 终止
fork函数在linux中fork函数是非常重要的函数,它从已经存在的进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程id,出错返回-1。当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程。下...原创 2018-04-05 16:45:31 · 188 阅读 · 0 评论 -
Linux 了解open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体
熟悉open/read/write/close等文件相关系统调用接口1、open函数#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int open(const char *pathname,int flags);int open(const char *pathname,int fl...转载 2018-04-12 18:45:25 · 265 阅读 · 0 评论 -
Linux 调研popen/system, 理解这两个函数和fork的区别.
转载地址:https://blog.csdn.net/liuxingen/article/details/470575391. system()和popen()简介在linux中我们可以通过system()来执行一个shell命令,popen()也是执行shell命令并且通过管道和shell命令进行通信。 system()、popen()给我们处理了fork、exec、waitpid等一系列的处理...转载 2018-04-06 13:15:01 · 395 阅读 · 0 评论 -
Linux 编写一个简易的shell
下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。循环过程如下:1.获取命令行2.解析命令行3.建立一个子进程(fork)4.替换子进程(execvp)5.父进程等待子进程退出(wait)#include <unistd.h&...原创 2018-04-06 14:53:47 · 504 阅读 · 0 评论 -
Linux 进程间通信(管道,消息队列,共享内存)
进程间通信分类管道匿名管道pipe命名管道System V IPCSystem V 消息队列System V 共享内存System V 信号量POSIX IPC消息队列共享内存信号量互斥量条件变量读写锁管道匿名管道#include <unistd.h>功能:创建匿名管道原型int pipe(int fd[2]);参数fd:文件描述符数组,其中fd[0]表⽰读端, fd[1]表...原创 2018-04-25 17:23:41 · 344 阅读 · 0 评论 -
Linux 网络基础
计算机网络背景独立模式:计算机间相互独立网络互连:多台计算机连接在一起,完成数据共享局域LAN:计算机数量更多了,通过交换机和路由器连接在一起广域网:将远隔千里的计算机都连在一起所谓“局域网”与“广域网”只是一个相对的概念,比如中国范围的广域网也可看做是一个比较大的局域网网络协议OSI七层模型 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放...原创 2018-05-10 22:08:09 · 118 阅读 · 0 评论 -
Linux 同步与互斥原理,了解生产者与消费者关系
临界资源各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。每个进程中访问临界资源的那段代码称为临界区。显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻...原创 2018-04-26 17:03:17 · 341 阅读 · 0 评论 -
网络基础 UDP/TCP协议
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性...转载 2018-05-15 09:18:28 · 204 阅读 · 0 评论