Linux基础第一章 概述

第一章 概述

1.1 前言

本章研讨系统的概念,从硬件、操作系统角度更是深厚的精晓计算机连串,并急迅浏览Linux系统提供的劳务。

1.2 系统一整合合

 图片 1

 

1.3 操作系统和应用程序

操作系统这几个词语有二意性,临时候指内核,不常候指内核和系统工具软件的整合。

 

 图片 2

 

 

操作系统是管理连串硬件的软件。操作系统是直接运维在裸机之上。其余应用程式运维在操作系统之上。

操作系统自己提供操作接口,支持用户通过该接口来操作
系统,可是系统自己提供的效应,不足于完毕用户需求时,则需求支付应用程序来举行系统成效。

发行版:
分歧的小卖部使用Linux内核,加上本身支付的系统工具软件,一齐公布的Linux操作系统版本。

1.4 运行和登录

图片 3

配置文件:
/etc/profile:系统运营时被推行
~/.bashrc:用户登录时会调用

1.5 文件

文本是贰个主要的定义,一般定义为消息的集结。Computer做为音讯管理的机械,文件是Computer管理的靶子。

在Unix和Linux系统中,泛化了文件的定义,设备也被架空成文件对象来举办操作。

数据的汇集叫做文件。
IT行当管理音信:转变,传输,存款和储蓄

1.6 程序、进程

图片 4

1.7 错误管理

系统调用在诚如景色下回去整数,并且0表示成功,小于0代表战败。当系统调用重回退步时,能够通过errno获得错误嘛,通过strerror获取错误阐述,可能直接通过perror在正儿八经错误文件中,输出错误音信。

 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
// 通过open再次回到的整数,在linux中有个特别的名字
// 叫文件讲述符 file description 简称fd

int fd = open(“a.txt”, O_WRONLY|O_CREAT|O_EXCL, 0777);
if(fd < 0)//表示文件打开失利
{
perror(“open”);
return 0;
}

// 把指针放到文件伊始
lseek(fd, 0, SEEK_SET);

// 对文件实行操作
write(fd, “hello”, 5);

// 关闭文件,假诺不关门,内部存款和储蓄器会泄漏
// 当进度退出时,未关门的文本会自行关闭
close(fd);

}

1.8 用户、组、文件权限

Linux是多用户系统,协助三个用户同期登入系统。
为了安全起见,须要对系统的权限加于标准。

1.9 信号

功率信号是进度通信的一种手腕,有个别进度收到频域信号,该时域信号恐怕来自内核、来自别的进度大概来自用户操作。举个例子:当用户按下ctrl+c时,其实是给前台进度发送了一个信号。

1.10 系统调用和库函数

学习Linux系统开辟接口时,程序猿也亟需上学一般常用的第三方库,来实行程序猿的编制程序技巧。

 

图片 5

User Space和Kernel
Space是操作系统一编写程中常用的定义,表示最近的代码在用户空间如故基本空间运维,对于不一样的运营空间,CPU对内部存款和储蓄器的管理格局稍有不一致,在讲进度虚拟地址空间时再涉及该概念。

系统调用指操作系统内核提供的机能,它提供了接口给用户空间代码调用。例如open/read/write/close等,都是属于Linux系统操作接口,而fopen/fread/fwrite/fclose是属于C标准提供的接口,在Linux下,fopen其实底层调用了open。

安插文件:
/etc/profile:系统运转时被实践
~/.bashrc:用户登录时会调用

文件操作

头文件:sys/types.h  sys/stat.h
 fcntl.h  例:int fd=open(“文件路线”,mode);
 mode决定了对文本的操作办法
  第多少个参数可有可无,对文件权限进行管理,   因umask存在,制造文件权限要与上000 000 010的反,导致用户权限开头无法有写的权杖

mode选项

解释

O_RDONLY

读方式打开(与后面俩个互斥)

O_WRONLY

写方式打开

O_RDWR

读写方式打开

O_CREAT

创建文件,如果文件存在,直接打开

O_TRUNC

截断

O_APPEND

追加

O_EXCL

和O_CREAT一起用,如果文件存在则失败

函数:

perror:对某种错误消息举行打字与印刷

open/creat:展开文件/创制文件
read:读文件
write:写文件
close:关闭文件
lseek:定位文件读写地方
fcntl:修改文件属性
sysconf:读取系统布署
dup/dup2:复制文件讲述符
sync/fsync/fsyncdata:同步文件数量
mmap/munmap:文件映射
mkstemp:获得不时文件路线

命令

touch:修改文件的拜访时间,创设文件
cat:访问文件内容
vim:编辑
ulimit:彰显一些范围消息(文件讲述符最大值、栈的上空尺寸)
umask:文件制造的权杖掩码
getconf:对应sysconf

dd:能够拷贝块设备,然而要sudo权限  例  dd if=地点 of=文件名  bs=一遍多少k cout=拷贝次数

Wc:计算文件的行数  单词个数
字节数

unlink:删除软链接

 

信号

是决定进程通讯的一种办法,作用高,开销低

时域信号管理情势:掩盖、忽略、默许管理

掩码:延迟数字信号的拍卖  运用数字信号集合   

覆盖不可信功率信号,数十次发送,只管理三次  掩盖:可信赖时限信号  管理多次

进程

fork()创建

线程

鼠标键盘都以只读的字符文件夹设备,所以能够接纳函数举办监察
 一般在/dev/input/mic 文件下边  注意权限问题 鼠标键盘读取数据,是俩个经过,注意进度的堵塞难点 能够应用字进度和父进度实行拍卖

线程的始建 

 pthread_created(1,2,3,4)
//1:线程的id  2:线程的的习性  3:新线程的函数名字, 4:新线程的特性    要链接  -lpthread  库   

留意子线程是专项主线程的,主线程截至,子线程不能够运行    
那个 pthread_exit(0)主线程结束,子线程未有脱离例外

 

运用pthread_equal  判别线程是还是不是等于,先等重返0  不等于重临非零值

pthread_jion(1,&ret)  阻塞调用 1:线程id  ret:线程重返值

 

pthread_t tid = pthread_self()  获得当前运转进程的id

经过和线程的差异:

经过:分配财富的单位  线程:调治的单位     八线程能够共享全局变量

幸免俩个线程同时操作全局变量,第一个线程运用了锁,前边的线程在外边等,等待解锁后,后边的线程在进入

死锁

连天俩次加锁,加锁后,未有解锁,又继续加锁,会招致死锁。
运用循环锁,能够重复加锁   通过定义锁的天性,变为循环锁
 例:pthread_mutexattr_t attr;  pthread_mutexattr_init(&attr);
 pthread_mutexattr_settype(&attr,
PTHREAD_MUTEX_RECURSIVE);pthread_mutex_init(&mutex,&attr)

加锁后,忘记解锁,也相会世死锁
 C++中接纳析构函数,能够制止忘记解锁,定义三个类

 

读写锁

pthread_rwlock_t mutex;

pthread_rwlock_init(&mutex, NULL);

读/写锁定pthread_rwlock_rd/wrlock(&mutex);

解锁:pthread_rwlock_unlock(&mutex);

 

守护进度

护理进度不和终极关联,注意此进度只可以有一个,制造文件记录,推断此程序是不是开启

编制程序规则:

设umask=0;

调用fork,让父进度退出。    让父进度变为init,  如若父进度不脱离,用俩次fork()

调用setuid创设新会话  setsid

重设当前目录/根目录     chdir        

闭馆无需的文件讲述符    运用循环关闭全部文件讲述符

高级IO

贰个历程正是一段指令

IO复用手艺

select的运用

采纳文件讲述符会集  运用fd_set创制文件讲述符群集 文件接口相对很小,跨平台运用

FD_SET(1,2)
将文件讲述符放入文件讲述符集合  1:文件讲述符  2:集合名字

epoll的运用

epollfd  成立文件讲述符群集

epol_ctl将文件讲述出席集结中

非阻塞IO

 

管道

一边读,一边写

无名管道  pipe()创立管道

 

 

mmap  能够兑现存亲子关系进程的文书共享
 效能低,数据写入内存,在从内部存储器中读取数据
 运用shm_open落成文件共享也足以

文件内部存款和储蓄器共享,无法张开通讯

 

经过锁,让进度共享内部存储器进行通信 pthread_mutex_init  须求将锁放在共享内存中  

 

fork  +  exec 让进程有例外的法力

 

相关文章