Linux
文章平均质量分 72
♚陌上花开
这个作者很懒,什么都没留下…
展开
-
生产者消费者问题
生产者/消费者问题,也被称作问题。可以描述为∶两个或者更多的线程共享同一个缓冲区,其中一个或多个线程作为"生产者"会不断地向缓冲区中添加数据,另一个或者多个线程作为"消费者"从缓冲区中取走数据。生产者/消费者模型关注的是以下几点:1.生产者和消费者必须2.缓冲区空时,消费者不能读取数据;缓冲区满时,生产者不能添加数据因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这样生产者和消费者的代码发生变化,都不会对对方产生影响。...原创 2022-08-02 18:53:02 · 495 阅读 · 1 评论 -
进程间通信( IPC):消息队列
进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信通过ipcs查看消息队列 消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性。但使用消息队列并未解决我们在使用命名管道时遇到的一些问题,比如管道满时的阻塞问题。 消息队列提供了一种在两个不相关的进程之间传递数据的相当简单且有效的方法。与命名管道相比,消息队列的优势在于,它独立于发送和接收进程而存在,这消除了在同步命名原创 2022-07-09 16:43:49 · 567 阅读 · 0 评论 -
进程间通信(IPC):共享内存
进程间通信(IPC):共享内存。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了 数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供同步机制,所以我们通常需要用其他的机制.........原创 2022-07-05 15:33:29 · 464 阅读 · 0 评论 -
进程间通信(IPC):信号量
进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信像现实生活中的红绿灯,用来控制资源的使用信号量:特殊的变量(一般为正数),代表可用资源的数目减一 : 代表获取资源(p操作)加一 : 代表释放资源(v操作)(例如商场试衣间是可用资源,若有人使用,可用资源减一,有人出来,可用资源加一)信号量变为0的时候,代表没有资源可用,再使用资源会阻塞pv操作是一个原子操作,就是不可分割的操作信号量的值如果只取0,1 ,将其称为原创 2022-06-19 15:51:36 · 491 阅读 · 0 评论 -
进程间通信(IPC):管道
进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信管道分为有名管道和无名管道使用 | , bash 可以自动创建一个有名管道还是可以使用open(打开管道,分配的空间在内存中)read(读取数据) write(写入数据)close(关闭管道)eg:文件a和文件b,文件a负责向管道中写数据,文件b负责读数据a.c文件b.c文件a,b文件单独执行时会被阻塞住 管道必须在两个进程间执行,单个进程是没法执行的原创 2022-06-17 21:03:12 · 239 阅读 · 0 评论 -
gdb调试
gdb 调试程序编译程序的时候需要后面加上-g,将调试信息添加在可执行文件中eg:编译mybash文件不加调试信息前加上调试信息后,可执行文件变大 eg:一般只显示10行,一般从主函数位置开始显示显示行数附近的代码显示此函数附近的代码 此时上一次命令是 l 显示代码......原创 2022-06-17 10:20:47 · 127 阅读 · 0 评论 -
信号
信号:通知进程产生了某种事件信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的文件调用在“signal.h”头文件中有声明。信号其实就是一个软件中断。可以通过signal()修改对信号的响应方式。信号一般有三种响应方式:1)默认响应;2)忽略响应;3)自定义响应。通过 kill 发送响应。int kill(pid_t pid, int sig);命令kill 就是对系统调用kill 的封装,命令kill就是通过系统调用kill给程序发送一个信号.原创 2022-05-21 21:50:10 · 248 阅读 · 0 评论 -
进程替换和malloc
一、进程替换方式:1>使用exec系列库函数#include <unistd.h>extern char **environ;int execl(const char *pathname, const char *arg, .../* (char *) NULL */);int execlp(const char *file, const char *arg, .../* (char *) NULL */);int execle(const char *pathn原创 2022-05-19 09:27:01 · 193 阅读 · 0 评论 -
Linux vim中如何不带行号复制大段代码
目录1>只可以在vim复制2>可以复制到外界的1>只可以在vim复制末行模式下 使用命令 v 进入可视模式此时使用 “上下左右键”,选中想要复制的部分,在vim中可以看到选中的文本变颜色,就像在windows系统下的shift键加上鼠标左键的效果一样命令 y 复制,p粘贴2>可以复制到外界的按照常规复制,结果如下 1 #include<stdio.h> 2 #include<stdlib.h..原创 2022-05-18 13:25:37 · 2455 阅读 · 5 评论 -
文件描述符,Linux操作系统文件的系统调用 open read write close
fork——父进程打开的文件fork复制到子进程中,子进程也可以访问。c 语言使用 fopen(),打开一个文件,文件类型为 FILE*fclose()关闭文件。Linux通过操作系统的子模块——文件系统来管理文件通过文件id号来管理文件,每个文件的ID号是唯一的一、 openc语言中使用fopen打开文件,fopen是库函数。Linux 通过open打开文件,是一种系统调用,在内核中实现。fopen->open(),fopen底层调用open包含头文件#inc原创 2022-05-17 17:53:58 · 1410 阅读 · 0 评论 -
僵死进程,孤儿进程
一、僵死进程 1 #include<stdlib.h> 2 #include<unistd.h> 3 #include<stdio.h> 4 int main() 5 { 6 int n=0; 7 char *s = NULL; 8 9 pid_t id = fork(); 10 if(id == -1) 11 { 12 exit(1); 13 }原创 2022-05-11 14:20:41 · 230 阅读 · 0 评论 -
Linux:printf
linux中常用头文件:#include<stdlib.h>此头文件包含函数exit(0); 用来退出当前进程,windows上习惯用return 0;使用return 0;系统会帮忙调用exit(0);#include<unistd.h>包含了Linux常用的函数调用以及系统声明头文件存放于/usr/include中printf中\n的用处有以下main.c文件此时printf函数输出内容具有换行符,sleep3s后结束程序...原创 2022-05-09 16:49:23 · 1698 阅读 · 0 评论 -
库文件的生成和使用
一、库文件库是一组预先编译好的函数方法的集合Linux上库文件的存放位置: /lib和/usr/lib库分为两种:静态库和共享库Linux上静态库标识(libxxx.a),共享库(libxxx.so)Windows上静态库标识(.lib),共享库(.dll)二、静态库的生成和使用1)静态库的生成这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明如何生成静态库?第一步:将静态库需要的".c"文件进行编译,生成"".o"文件原创 2022-05-06 15:00:48 · 1072 阅读 · 1 评论 -
makefile和make
一、make的安装输入命令:sudo apt install make需要密码,根据提示输入密码即可。二、makefile和make命令的介绍makefile文件:Linux上的项目工程管理工具,可以实现自动化编译。主要用于项目工程里源文件过多,makefile文件可以根据类型,功能,模块,将这些源文件分好到不同目录里,makefile文件里面就可以定义一系列的规则来指定哪一些文件先需要进行编译,文件需要重新编译,甚至更复杂的操作,makefile文件就像一个shell脚本一样,可以一系原创 2022-05-05 18:47:34 · 2512 阅读 · 5 评论 -
编译与调试
gcc主要处理c语言中的.c文件c语言 .c文件如果想要直接去运行,首先需要将源文件变成可执行文件这个过程可以细分为四个过程:预编译,编译、汇编、链接gcc分步编译:(1)预编译gcc -E main.c -o main.i(-o :out输出,输出想要得到的文件(自己命名),不加-o,生成一个默认的文件)(2)编译gcc -S main.i -o main.s(3)汇编gcc -c main.s -o ...原创 2022-04-28 17:26:36 · 598 阅读 · 0 评论 -
gcc ,g++,gdb的安装
1.gcc的安装sudo apt install gcc2.g++的安装sudo apt install g++3.gdb的安装sudo apt install gdb原创 2022-04-14 20:19:46 · 387 阅读 · 0 评论 -
文件查看命令和用户管理命令
cat1.用于查看文件数据cat a.txt2.合并文件cat a.txt b.txt > c.txt3.向文件中写入数据cat > d.txt ,这样写入数据有一点需要注意:cat > d.txt 输入数据时,会先将d.txt中的数据清空。...原创 2022-04-13 22:30:00 · 253 阅读 · 0 评论 -
进程管理命令
进程:一个正在执行(运行)的程序(动态的)程序:由一条条的指令构成进程由操作系统管理pcb 进程控制块(存放进程的属性信息) struct task_struct;int pid 进程的唯一标识 进程的id号进程由三种状态: 就绪 运行 阻塞一、ps 查看进程 bash 命令解释器which 查看程序所在ps 默认只显示当前终端中的进程(ppid 父进程id,父进程产生子进程)ps -f 查看更多进程ps -e 查看所有进程ps -...原创 2021-11-14 00:15:55 · 2700 阅读 · 1 评论 -
Ubuntu 安装Tools
点击光盘,里面有个VMwareTools的文件,将文件拖入下载中单击右键,选择在终端中打开.pl可执行文件原创 2021-11-06 14:31:24 · 6334 阅读 · 0 评论 -
Ubuntu简述
这里是在Vmware虚拟机中安装linux 系统,所以需要先安装vmware软件,然后再安装Linux系统。所需安装文件:Vmware下载地址: https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.htmlubuntu官网下载地址: https://ubuntu.com/download/desktop可以在终端里输入命令:一、目录结构 Linux 系统的目录结构是.原创 2021-11-06 16:27:58 · 1056 阅读 · 0 评论 -
Ubuntu安装vim,gcc
一、安装vimUbuntu安装好之后都自带vi(文本编辑器),但现在的vim更好用。安装软件需要管理员权限,先进入管理员页面这个有点慢,安装过程不要乱点,也不要关闭 ,系统安装软件的时候会上锁,防止几个用户同时进行安装,乱点打开关闭会导致系统上锁,出现各种乱七八糟的错误,安装需在有网的情况进行,如何判断是否有网及没网怎么办,见(2条消息) Ubuntu网络设置_swint_er的博客-CSDN博客二、安装gcc同样,要进入管理员界面才可以安装安装什么软件基本都是 apt i.原创 2021-10-04 15:57:17 · 787 阅读 · 0 评论 -
Ubuntu网络设置
1.如何判断虚拟机是否连上网最简单的方法就是打开虚拟机中的浏览器,搜索,可以正常使用表示连上网了。2.虚拟机连不上外界的网怎么办1>如图右键选择设置2>点击网络适配器,选择桥接模式,一般桥接模式就可以了,若不行,就改为NAT模式,这两种模式互相换。看图标,此状态表示网络已连接!...原创 2021-10-03 19:23:15 · 258 阅读 · 0 评论