linux基础
Lawrence_121
千里之行,始于足下
展开
-
Linux操作系统概述
一、Linux在各领域发展的现状与趋势1、Linux与开源软件Linux是一种自由和开放源代码的类Unix操作系统。该操作系统的内核由林纳斯.托瓦斯在91年首次发布。 2、Linux在服务器领域的发展 根据权威部门统计,目前Linux在服务器领域已经占据75%市场份额。 3、Linux在桌面领域的发展 国内麒麟Linux、红旗Linux、深度Linux。特别是Ubuntu Linu...原创 2018-06-21 08:42:15 · 1050 阅读 · 0 评论 -
Linux c实现音乐播放器(madplay)
/* 项目需求: 1.实现音乐基本功能:播放,暂停及继续,下一首,上一首,退出。 2.自动生成歌曲列表文件。(重定向) 3. 实现单曲循环。 思路: 1.由于学了fork(),exec函数,想到在进程里创建一个子进程来播放音乐。 2.暂停及继续,...原创 2018-08-17 09:29:05 · 22811 阅读 · 43 评论 -
多线程详解
为什么引入线程以及使用多线程的好处? 1.运行一个进程中的多个线程,它们之间使用相同的地址空间,线程间彼此间切换所需要的时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30倍左右。 2.提高应用程序响应。使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程。 3.使多CPU系统更加有效。操作系统会保...原创 2018-08-20 18:48:31 · 207 阅读 · 1 评论 -
1-POSIX异步IO(aiocb)
1. 引言异步 IO 就异步 IO 嘛,为什么还要加个 POSIX。如同进程间通信一样,有很多版本,有 System V 的函数,也有 POSIX 定义的函数,他们只是使用不同的函数完成相同的功能而已。在这里,同样的,除了 POSIX 异步 IO 以外,还有 System V 异步 IO、BSD 异步 IO. 但是本系列的博客,只讲 POSIX 异步IO,它对应的是 aio 开头的一系列函...转载 2018-09-01 22:39:04 · 494 阅读 · 0 评论 -
2-POSIX 异步IO(异步操作状态)
当你使用 aio_read 或 aio_write 等函数发起了异步读或写时,内核就自己去干活了,假设你目前还不知道异步通知的方法,你就只能不断的询问内核:“你读完没?”,正如同前面的那段程序:// 不断的检查异步读的状态,如果返回 EINPROGRESS,说明异步读还没完成// 轮询检查状态是一种很笨的方式,其实可以让操作系统用信号的方式来通知,或者让操作系统完成读后主动创...转载 2018-09-02 08:28:04 · 353 阅读 · 0 评论 -
3-POSIX异步IO(等待异步操作)
不知道你是否还记得线程中的 pthread_join 函数,它可以等待指定的线程完成结束后才会返回。同样的,在异步 IO 中,也有一个函数,但是它不是 aio_join,而是 aio_suspend,它会一直等待,直到指定的异步 IO 操作完成才返回。1. aio_suspendint aio_suspend(const struct aiocb * const aiocb_list[]...转载 2018-09-02 08:54:56 · 384 阅读 · 0 评论 -
4-POSIX 异步IO(批量请求)
POSIX 提供了函数 lio_listio 可以让我们一次性发起多个异步 IO 请求。1. lio_listio(1) 函数原型int lio_listio(int mode, struct aiocb *const aiocb_list[], int nitems, struct sigevent *sevp);(2) 函数参数modemode 有两个可选值:LIO_W...转载 2018-09-02 09:15:54 · 738 阅读 · 0 评论 -
5-POSIX 异步IO(异步通知)
到这里,终于可以采用异步的方式进行通知我们的程序异步操作完成了,在前面我们一直使用很笨很笨的方式,使用 while 循环和 aio_error 函数不断的去测试异步操作有没有完成。1. aiocb 的成员 aio_sigeventstruct aiocb { // ... struct sigevent aio_sigevent; /* 通知方法 */ // ...转载 2018-09-02 16:39:11 · 596 阅读 · 0 评论 -
linux下解压命令大全
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.t...转载 2018-09-10 10:30:45 · 186 阅读 · 0 评论 -
vim 复制/剪切/粘贴/撤销操作
转自:https://blog.csdn.net/qidi_huang/article/details/52179279【复制】 1. 常用复制命令: yy 复制游标所在行整行 2yy或y2y 复制 2 行 y^ 复制至行首,或y0 y$ 复制至行尾 yw 复制一个word...转载 2018-12-13 17:08:41 · 205 阅读 · 0 评论 -
vim批量缩进
:10,100>第10行至第100行缩进:20,80<第20行至第80行反缩进原创 2018-12-21 16:09:02 · 559 阅读 · 0 评论 -
Linux下getopt()函数的简单使用
我们的主角----getopt()函数。getopt()函数的出处就是unistd.h头文件(哈哈),写代码的时候千万不要忘记把他老人家include上。再来看一下这家伙的原型:int getopt(int argc,char * const argv[ ],const char * optstring);前两个参数大家不会陌生,没错,就是老大main函数的两个参数!老大传进...转载 2019-03-16 10:14:47 · 165 阅读 · 0 评论 -
stat()函数:获取文件状态
相关函数:fstat, lstat, chmod, chown, readlink, utime头文件:#include<sys/stat.h> #include<uninstd.h>定义函数:int stat(const char * file_name, struct stat *buf);函数说明:stat()用来将参数file_name 所指的文件状态...转载 2019-03-17 14:45:04 · 433 阅读 · 0 评论 -
fgets与feof 判断文件结尾总结
fgets 是读取文件中的一行,当读文件过程中发生错误或者读到文件尾时,返回NULL,所以不能使用fgets==NULL来判断是否到了文件尾,需要结合feof(NULL) 才能确定是否到了文件尾while(!feof(fp)){ fgets(temp,100,fp); Operation(temp);} 这种判断是否到了文件尾的方式在存在错误的,因为...转载 2019-03-13 11:02:18 · 3540 阅读 · 3 评论 -
C++静态库与动态库(Linux)
目录目标什么是库静态库创建与使用静态库动态库创建与使用动态库动态库的显式调用附件:Linux下库相关命令总结目标 这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什...转载 2019-04-06 11:36:53 · 815 阅读 · 0 评论 -
sigaction函数讲解
sigaction函数修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数)int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 返回值:成功:0;失败:-1。参数:act:传入参数,新的处理方式;oldact:传出参数,旧的处理方式。struct siga...原创 2019-04-20 15:35:15 · 1247 阅读 · 0 评论 -
madplay安装及使用
安装:一. 准备: 1.madplay-0.15.2b.tar.gz 2.libmad-0.15.1b.tar.gz 3 libid3tag-0.15.1b.tar.gz 下载路径:链接:https://pan.baidu.com/s/1bme1ydfejhnMsZSYF4Cyxw 密码:16hm二 .安装步骤: 1.将这些压缩包放到/u...原创 2018-08-16 15:21:35 · 3567 阅读 · 10 评论 -
exec和system函数
exec函数: 概念: 提供一个在进程中启动另一个程序执行的方法,用新程序取代原调用进程的内存空间,当进程认为自己不能再为系统和用户做出任何贡献时,调用exec函数族让自己重生,如果一个进程想执行另一个程序,调用fork()创建新进程,然后调用exec,这样就实现了通过执行应用程序而产生一个新进程。 函数: ...原创 2018-08-13 17:44:59 · 911 阅读 · 1 评论 -
管道、共享内存、消息队列实战
无名管道: int pipe(int fd[2]); 返回值:如果系统调用成功,返回0。如果系统调用失败返回- 1: errno = ENFILE (没有空闲的文件描述符) EMFILE (系统文件表已满) EFAULT (fd数组无效)#include"lib.h" //封装的头文件int ...原创 2018-08-14 19:46:20 · 354 阅读 · 1 评论 -
ubuntu环境下从零开始建立,编译,运行一个c程序的步骤
1、编译软件 gcc,一般ubuntu系统会自带的,如果没有的话需要安装。1.查找ubuntu系统是否有gcc软件,输入指令 which gcc查看gcc的版本 gcc --version 然后就可以确定系统自带gcc编译器了2.编辑软件vim,首先需要安装vim,输入指令 sudo apt-get install vim 由于我已经安装了vim,因此不会显示进度条3.在当前目录下新建一个文件夹...原创 2018-06-21 08:55:05 · 25859 阅读 · 4 评论 -
Linux操作系统Shell常见命令
常见命令:ls------显示文件或目录 使用权限(所有使用者) -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all)clear--清除缓冲mkdir------创建目录 -p 创建目录,若无父目录,则创建p(parent)cd------切换目录pwd------查看当前工...原创 2018-06-24 15:39:32 · 3119 阅读 · 2 评论 -
vim编辑器的使用与gedit编辑器简单介绍
一.vimvim有三种模式:命令模式,插入模式,退出模式vim file ##对file进行编辑打开file后默认进入到 命令模式 1.命令模式 1)设定 vim/etc/vimrc :setnu|nonu ####行号的显示 :setmouse=a ####设定鼠标可以操作光标位置 :help ...转载 2018-06-24 15:46:02 · 2214 阅读 · 0 评论 -
GDB调试总结一
GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义...原创 2018-06-05 20:41:05 · 343 阅读 · 0 评论 -
makefile总结
$*:不包括扩展名的目标文件名称$+:所有的依赖文件$<:第一个依赖文件的名称$@:目标文件$^:所有的依赖文件*.c所有的.c文件 简单的Makefilecc=gccobj= main.o LinkList.oedit:$(obj) $(cc) $(obj) -o edit.PHONY:cleanclean: rm edi...原创 2018-05-12 17:40:35 · 151 阅读 · 0 评论 -
Makefile详解
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makef...转载 2018-06-24 16:45:33 · 224 阅读 · 0 评论 -
ubuntu 快速下载
由于官网服务器在国外,下载速度奇慢,所以我们可以利用阿里云镜像下载ubuntu ubuntu 14.04: http://mirrors.aliyun.com/ubuntu-releases/14.04/ ubuntu 16.04: http://mirrors.aliyun.com/ubuntu-releases/16.04/ ubuntu 18.04: http://mirrors.aliyu...转载 2018-07-11 17:19:08 · 1608 阅读 · 0 评论 -
如何让虚拟机的Ubuntu上网
我的环境:unbuntu16.04 特别注意:如果你使用的虚拟机和Ubuntu不一样,现象可能不一样,请具体情况具体分析。一、为什么要让虚拟机中的Ubuntu上网?想在线安装软件,下载git源码包,或者要用浏览器浏览网页二、虚拟机中的Ubuntu有几种上网方式?通常有2种,NAT、桥接三、NAT上网怎么用? NAT方式—-让虚拟机内的系统上网的最快速的方式。如果你仅仅是想让虚拟机内的Ubunt...转载 2018-07-11 19:12:28 · 1836 阅读 · 0 评论 -
Ubuntu16.04安装中文输入法
简述Ubuntu16.04安装完后,和12.04以及14.04都不一样,并没有中文输入功能。于是搜索一些安装中文输入法的方法。 开始安装了ibus pinyin输入法,但是系统重启之后发现有些时候不稳定,无法切入到中文输入。最后还是换用搜狗输入法了,用下来目前都很好用。ibus输入法Chinese语言包安装首先需要给Ubuntu16.04安装Chinese语言包支持。 如上图点击其中的Instal...转载 2018-07-11 19:51:36 · 1411 阅读 · 0 评论 -
物理机通过Xshell连接不上虚拟机的解决方案
环境说明:SSH工具:Xshell虚拟机:VMwareLinux系统:Ubuntu-16.04-desktop操作步骤Ubuntu默认自带了ssh-client可以远程连接Linuxssh username@host由于没有ssh-server,所以无法被连接,可以如下命令验证是否已经安装ssh-serverps -e|grep ssh如果没有显示sshd,则说明未安装ssh-server安装ss...转载 2018-07-11 20:00:47 · 619 阅读 · 0 评论 -
VIM常用快捷键
一、移动光标h,j,k,l 左,下,上,右ctrl-e 移动页面ctrl-f 下翻一页ctrl-b 上翻一页ctrl-u 上翻半页ctrl-d 下翻半页w 跳到下一个字首,按标点或单词分割W 跳到下一个字首,长跳,如end-of-line被认为是一个字e 跳到下一个字尾E 跳到下一个字尾,长跳b 跳到上一个字B 跳到上一个字,长跳0 跳至行首,不管有无缩进,就是跳到第...转载 2018-08-03 17:29:27 · 221 阅读 · 0 评论 -
学生信息管理系统
需求分析: 1.分权限:学生和老师 2.学生可以查询成绩,查看自己的单科排名,查看全部学生的信息 3.学生不可以添加,修改,删除自己的成绩,只有老师可以,老师拥有所有权限。 4.可以按照科目分数段查询 5.对一些的信息进行格式处理,如编号为四位,且不能重复,姓名为字符,不能超过2...原创 2018-08-09 08:36:31 · 742 阅读 · 2 评论 -
标准IO跟系统IO
对于操作系统而言,I/O操作可以分为两类,一类是带缓存的IO,又称为标准IO(C标准库中提供了标准IO库,即stdio),它实现了跨平台的用户缓存解决方案。另一类是Unix/Linux下的文件IO,又称直接IO,即文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输。一.标准IO: 标准IO在系统调用的上一层多加了一个缓冲区,也因此引入了...原创 2018-08-09 17:45:11 · 2723 阅读 · 2 评论 -
fcntl()和lockf()
这两个函数的作用是给文件加锁,fcntl是系统调用,而lockf是库函数。lockf实际是fcntl的简单版,所以lockf和fcntl的底层实现是一样的。 函数原型: #include <unistd.h> int lockf(int fd,int cmd, off_t len) cmd的取值为:...原创 2018-08-10 10:32:37 · 611 阅读 · 1 评论 -
进程的创建和消亡
概念: 进程:是操作系统进行资源分配和高度的独立单位,是程序在计算机上的一次执行过程。 程序:是存放在磁盘文件中的可执行文件。区别: 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。 进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。...原创 2018-08-11 17:32:50 · 751 阅读 · 1 评论 -
管道,消息队列,共享内存之间的区别和联系
进程间通信的目的: 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 资源共享:多个进...转载 2018-08-14 18:30:00 · 2227 阅读 · 1 评论 -
pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析
1.原理假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0。Int n = 0 ; 消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n== 0,那么 A 将一直等待。 还有一个生产者线程 B,B 进入临界区,修改 n 的值,使得 n >0,当 n > 0 时,B 通知等待 n &...转载 2019-04-20 15:50:57 · 263 阅读 · 0 评论