Linux/操作系统
文章平均质量分 79
sayhello_world
学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux实现进度条小程序
进度条: 进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度等剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。日常生活中,下载,复制等等操作,我们都会见到进度条的身影。 所以今天在cent os环境下的Linux实现一个简单的进度条。原创 2017-02-17 00:17:52 · 2432 阅读 · 0 评论 -
Linux--线程池与进程池及线程池的简单实现
池由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资源的速度要快得多,因原创 2017-06-01 17:16:29 · 10480 阅读 · 7 评论 -
Linux--用shell脚本写一个彩色进度条
进度条分析具体分析请看我以前写的博客: http://blog.youkuaiyun.com/sayhello_world/article/details/55296656和上一个进度条不一样的地方C语言中的printf与shell中的printf shell里的printf,它代表的是一条指令,指令的运行时交互式bash fork子进程,子bash执行指令,当一条指令执行完也就意味着进程结束。 进程结原创 2017-06-29 00:05:40 · 898 阅读 · 0 评论 -
Linux--shell中的命令替换``与$()以及eval命令
“与$()shell命令替换: 命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。shell中命令替换符有两种``与$() 例:date=1echo $(date)DATE=`date`echo $(DATE)两者都起到了同样的效果,都是起到命令替换的作用。 但是,两者还是有细微的不同。 1.``反单引号适用于任何类unix平原创 2017-06-20 12:55:16 · 4191 阅读 · 0 评论 -
Linux--用shell写一个学生成绩管理系统
基本的操作增加删除查询展示全部学生信息vim编辑保存信息的文件遇到的问题1.增加学生信息时 增加学生信息时,我用的echo重定向到文件里,这里开始用的一个>,会导致覆盖。以前的数据没有了。 总结: 重定向符号: >:覆盖型写法 (文件里原来的内容被覆盖)echo "hello world" > myfile>>:添加型写法 (新内容添加在原来内容的后面)echo "he原创 2017-06-30 18:43:01 · 10618 阅读 · 0 评论 -
Linux--高级I/O多路复用之Poll
Pollselect使用三个位图来表示三个fd_set的方式。 而poll是使用一个pollfd的指针实现。 select总结:http://blog.youkuaiyun.com/sayhello_world/article/details/72875077poll函数该函数允许进程指示内核等待多个事件中任何一个发生,并只在有一个或多个事件发生的时候才唤醒。poll函数原型#include <poll.h原创 2017-06-11 14:17:29 · 521 阅读 · 0 评论 -
Linux--高级I/O多路复用之epoll
epollepoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。 epoll由三个系统调用组成,分别是epoll_create,epoll_ctl和epoll_wait。原创 2017-06-11 16:53:40 · 594 阅读 · 0 评论 -
Linux--用shell脚本实现菲波那切数列
用循环方式用循环的方式#! /bin/bash循环first=1second=1last=1if [ $1 -le 2 ];then echo 1fii=3while [ $i -le $1 ] do let last=first+second let first=second let second=last原创 2017-07-08 12:05:09 · 4322 阅读 · 0 评论 -
Linux--crond与crontab详解
crond循环执行的例行性的工作调度是由crond这个系统服务来控制的。 换句话说crond是Linux用来定期执行程序的命令。安装完成系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。crontabcrontab是你要定时执行的服务,你可以编辑/etc/crontab来修改你要的服务。crontab是新建循环型工作调度的原创 2017-07-08 22:05:23 · 671 阅读 · 0 评论 -
Linux--shell脚本中截取字符串
用参数截取字符串假设有一个变量var=http://blog.youkuaiyun.com/sayhello_world 1.# 号截取,删除左边字符,保留右边字符。 echo ${var#*//}其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 :blog.youkuaiyun.com/sayhello_world原创 2017-07-09 11:00:08 · 8196 阅读 · 0 评论 -
一个朴素的基于HTTP协议的项目
1.这个项目是干嘛的?这个项目主要是实现前后端数据的连通。从前端网页收到的数据经过处理一直存储到后台的mysql数据库。2.项目所用到的知识1.什么是HTTP协议: 参考我往期博客: http://blog.youkuaiyun.com/sayhello_world/article/details/750185192.什么是mysql,怎么用? http://blog.youkuaiyun.com/sayhello_原创 2017-07-18 17:39:49 · 1096 阅读 · 0 评论 -
基于UDP的网络群聊系统
为什么用UDP?UDP是一个无连接的,不可靠的协议。 发送端的UDP协议层只把应用层传来的数据封装成端给IP协议层就完成任务了。 如果因为网络故障无法发送到对方,UDP协议层也不会给应用层返回任何错误信息。 那么,为什么用UDP协议? 很明显简单,快捷。 一般UDP协议的应用程序实现都比较简单,只是发送一些对可靠性要求不高的消息。数据的传输方向软件大体架构 主要接口client: se原创 2017-08-01 14:03:05 · 2316 阅读 · 1 评论 -
操作系统--总结几种常见的页面置换算法
什么是页面置换算法?在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。 当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。常见的页面置换算法?理想页面置换算法(OPT)理想页面置换算法(OPT) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的。原创 2017-08-18 14:59:55 · 9973 阅读 · 2 评论 -
Linux下安装及使用mysql
什么是数据库数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方原创 2017-07-18 14:31:10 · 770 阅读 · 0 评论 -
Linux--线程与进程的总结
什么是进程?进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 简单点说:进程就是正在执行的程序。就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文。进程的所有信息被放到进程控制块中(PCB),并由它维护管理相关信息。 在Linux中,这叫做task_struct。 task_struct是原创 2017-08-26 20:49:10 · 647 阅读 · 0 评论 -
Linux--高级I/O多路复用之select
select是做什么的? 系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。select函数原型? 这里有几个参数。 1.参数nfds是需要监视的最大的文件描述符值+1。2.参数rdset,wrset,exset分别对应于需要检测的原创 2017-06-06 09:54:03 · 657 阅读 · 0 评论 -
Linux--重定向dup&&dup2
概述dup和dup2。它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。dup和dup2函数原型: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd);dup:dup()使用最小的未使用的描述符来描述新的描述符。 dup2:dup2()是把ne原创 2017-06-05 23:46:18 · 518 阅读 · 0 评论 -
Linux--信号
信号: 一.什么是信号:用过Windows的都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。 信号是Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它原创 2017-05-07 12:40:48 · 1247 阅读 · 0 评论 -
Linux PCB:task_struct
为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块(PCB)。 在linux系统中,这就是task_struct结构, 所属头文件include\linux\sched.h。每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操原创 2017-02-17 23:23:52 · 1189 阅读 · 0 评论 -
Linux 下常见的进程调度算法
进程调度:在操作系统中调度是指一种资源分配。调度算法是指: 根据系统的资源分配策略所规定的资源分配算法。操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。 那么我们看一下常见的进程调度算法: 1.原创 2017-02-19 11:02:47 · 10802 阅读 · 0 评论 -
Linux下atexit函数以及权限位
1、atexit()函数 函数名: atexit 头文件:#include 功能: 注册终止函数(即main执行结束后调用的函数) 用法: int atexit(void (*func)(void)); 注意:一个进程可以登记32个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数可以登记这些函数。 exit调用终止处理函数的顺序和at原创 2017-02-20 23:47:05 · 1181 阅读 · 0 评论 -
Linux下file_struct
file结构体:struct file结构体定义在include/Linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。原创 2017-02-21 00:18:39 · 2022 阅读 · 0 评论 -
Linux stat三个时间以及export命令用法
首先 要说的是命令stat最后三行的意思 那么 最后三行Access,Modify,Change到底显示的时间是什么意思呢 Access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间 Modify time:表示最后一次修改文件的时间 Chang原创 2016-07-14 10:09:47 · 804 阅读 · 0 评论 -
Linux--进程间通信之消息队列
今天我们来说说进程间通信的另一种方法————消息队列。 1.什么是消息队列?消息队列是操作系统提供的队列,他提供了一种从一个进程向另一个进程发送一个有类型数据块的方法来实现通信。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。 2.进程间通信(IPC)必须要知道的数据结构?1.IPC_Perm他是共有的数据结原创 2017-03-02 21:06:14 · 646 阅读 · 0 评论 -
Linux--进程间通信之匿名管道及命名管道
今天我们来说一下管道: 管道是一种最基本的IPC机制,由pipe函数创建。管道分为匿名管道和命名管道。匿名管道的工作流程:1.父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。2.父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。3.父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道里读,管道是用环形原创 2017-03-02 17:06:43 · 760 阅读 · 0 评论 -
Linux--线程基本概念及线程分离
线程:一.什么是线程(tcb)?线程是在进程地址空间内运行的,强调资源共享(多个线程共享一份地址空间)。Linux下是用进程模拟线程,并无真正的线程。进程是分配资源的基本单位,线程是调度的基本单位。二.线程可以共享和独占?共享的:1. 文件描述符表2. 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)3. 当前工作目录4. 用户i原创 2017-03-28 16:09:42 · 1036 阅读 · 0 评论 -
Linux--进程间通信之信号量
现在已经写了两种进程间通信方式Linux--进程间通信之匿名管道及命名管道:Linux--进程间通信之消息队列:今天我们来说第三种进程间通信方式--信号量。一.什么是信号量?信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,原创 2017-03-11 18:25:29 · 694 阅读 · 0 评论 -
Linux--线程同步与互斥之读写锁
上一篇说了线程条件变量:http://blog.youkuaiyun.com/sayhello_world/article/details/68926011 Linux线程读写锁: 在编写多线程的时候,有一种情况是十分常见的。 那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们原创 2017-04-07 17:00:39 · 722 阅读 · 0 评论 -
Linux--线程同步与互斥之条件变量
上篇博客讲了互斥量问题:http://blog.youkuaiyun.com/sayhello_world/article/details/67637858 就拿生产者-消费者为例,如果两个线程都有互斥锁,但是生产者生产的快,消费者消费的慢,这里我们会发现,消费者一直再消费此时生产者还没有产生东西。这就会导致消费者总是加锁进来再解锁出去。为了让两者同步,这里提出了条件变量。 条件变量是线程可用原创 2017-03-31 15:47:58 · 682 阅读 · 0 评论 -
Linux--死锁产生条件及避免死锁算法
一.什么是死锁?所谓死锁是指在多道程序系统中,一组进程中的每一个进程均无限期的等待被该组进程中的另一个进程所占有且永远不会释放的资源,这种现象称系统处于死锁状态。 二.死锁产生的原因?1.竞争资源,系统产生的资源有限不能满足每个进程的需求。2.多道程序运行时,进程推进顺序不合理。 三.形成死锁四个必要条件?1.互斥使用资源2.请求和保持资源3.不可抢夺资源原创 2017-03-31 16:33:00 · 3671 阅读 · 0 评论 -
Linux--进程间通信之共享内存
1. 什么是共享内存?进程A可以及时看到进程B堆内存中数据的更新。由于多个进程共享一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。有关信号量的更多内容,可以查阅我的前一篇文章:http://blog.youkuaiyun.com/sayhello_world/article/details/614228982. 共享内存优缺点:优点:采用共享内存的一份好处是效原创 2017-03-16 17:02:33 · 701 阅读 · 0 评论 -
Linux--进程组,会话,精灵进程(fork一次与fork两次的区别)
Linux之进程组,作业,会话,精灵进程 1.进程组:每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个原创 2017-05-11 18:45:11 · 1292 阅读 · 0 评论 -
centos内核优化详解
系统内核部分的设置在vim /etc/sysctl.conf1.禁用IPV6net.ipv6.conf.all.disable_ipv6 = 1 # 禁用整个系统所有接口的IPv6net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1 ...原创 2019-05-01 10:34:33 · 961 阅读 · 0 评论
分享