林语堂ux基础第一章 概述

第一章 概述

1.1 前言

本章钻探系统的概念,从硬件、操作系统角度更是深厚的接头总计机体系,并飞速浏览Yutangux系统提供的劳动。

1.2 系统整合

 图片 1

 

1.3 操作系统和应用程序

操作系统这一个词语有二意性,有时候指内核,有时候指内核和种类工具软件的整合。

 

 图片 2

 

 

操作系统是治本连串硬件的软件。操作系统是直接运行在裸机之上。其余应用软件运行在操作系统之上。

操作系统本身提供操作接口,协理用户通过该接口来操作
系统,可是系统自身提供的职能,不足于完毕用户必要时,则要求成本应用程序来拓展系统成效。

发行版:
今非昔比的铺面利用林玉堂ux内核,加上自己开发的系统工具软件,一起揭橥的林玉堂ux操作系统版本。

1.4 启动和登陆

图片 3

配备文件:
/etc/profile:系统启动时被执行
~/.bashrc:用户登陆时会调用

1.5 文件

文本是一个主要的定义,一般定义为信息的汇集。总结机做为音讯处理的机械,文件是电脑处理的对象。

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

数量的集合叫做文件。
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 用户、组、文件权限

Yutangux是多用户系统,支持四个用户同时登陆系统。
为了安全起见,需求对系统的权力加于规范。

1.9 信号

信号是进程通讯的一种手段,某个过程收到信号,该信号可能出自内核、来自其它进程或者来自用户操作。例如:当用户按下ctrl+c时,其实是给前台进程发送了一个信号。

1.10 系统调用和库函数

学学林玉堂ux系统开发接口时,程序员也须要学习一般常用的第三方库,来进行程序员的编程能力。

 

图片 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 让进度有例外的职能

 

相关文章