linux 入口函数 linux基础知识点

大家好,linux 入口函数相信很多的网友都不是很明白,包括linux基础知识点也是一样,不过没有关系,接下来就来为大家分享关于linux 入口函数和linux基础知识点的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

Linux内核中select,poll和epoll的区别

在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll

和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的

应用,现在比较出名的nginx就是使用epoll来实现I/O复用支持高并发,目前在高并发的场景下,nginx越来越

收到欢迎。

select:

下面是select的函数接口:

[cpp] view plain copy

int select(int n, fd_set*readfds, fd_set*writefds, fd_set*exceptfds, struct timeval*timeout);

select函数监视的文件描述符分3类,分别是writefds、readfds、和exceptfds。调用后select函数会阻塞,直

到有描述副就绪(有数据可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为

null即可),函数返回。当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。

select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。select的一个缺点在于单个进程

能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的

方式提升这一限制,但是这样也会造成效率的降低。

poll:

[cpp] view plain copy

int poll(struct pollfd*fds, unsigned int nfds, int timeout);

不同与select使用三个位图来表示三个fdset的方式,poll使用一个 pollfd的指针实现。

[cpp] view plain copy

struct pollfd{

int fd;/* file descriptor*/

short events;/* requested events to watch*/

short revents;/* returned events witnessed*/

};

pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。同时,pollfd并没有

最大数量限制(但是数量过大后性能也是会下降)。和select函数一样,poll返回后,需要轮询pollfd来获取

就绪的描述符。

从上面看,select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。事实上,同时连接的

大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。

epoll:

epoll的接口如下:

[cpp] view plain copy

int epoll_create(int size);

int epoll_ctl(int epfd, int op, int fd, struct epoll_event*event);

typedef union epoll_data{

void*ptr;

int fd;

__uint32_t u32;

__uint64_t u64;

} epoll_data_t;

struct epoll_event{

__uint32_t events;/* Epoll events*/

epoll_data_t data;/* User data variable*/

};

int epoll_wait(int epfd, struct epoll_event* events, int maxevents, int timeout);

主要是epoll_create,epoll_ctl和epoll_wait三个函数。epoll_create函数创建epoll文件描述符,参数size并

'不是限制了epoll所能监听的描述符最大个数,只是对内核初始分配内部数据结构的一个建议。返回是epoll描

述符。-1表示创建失败。epoll_ctl控制对指定描述符fd执行op操作,event是与fd关联的监听事件。op操作

有三种:添加EPOLL_CTL_ADD,删除EPOLL_CTL_DEL,修改EPOLL_CTL_MOD。分别添加、删除和

修改对fd的监听事件。epoll_wait等待epfd上的io事件,最多返回maxevents个事件。

在 select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通

过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,

迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。

epoll的优点主要是一下几个方面:

1.监视的描述符数量不受限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,

举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat/proc/sys/fs/file-max察看,一般来说这个

数目和系统内存关系很大。select的最大缺点就是进程打开的fd是有数量限制的。这对于连接数量比较大的

服务器来说根本不能满足。虽然也可以选择多进程的解决方案( Apache就是这样实现的),不过虽然linux上面

创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是

一种完美的方案。

2. IO的效率不会随着监视fd的数量的增长而下降。epoll不同于select和poll轮询的方式,而是通过每个fd定义的

回调函数来实现的。只有就绪的fd才会执行回调函数。

3.支持电平触发和边沿触发(只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取

行动,那么它将不会再次告知,这种方式称为边缘触发)两种方式,理论上边缘触发的性能要更高一些,但是

代码实现相当复杂。

4.mmap加速内核与用户空间的信息传递。epoll是通过内核于用户空间mmap同一块内存,避免了无畏的内存拷贝。

学习linux系统,看那几本书比较好

《鸟哥的Linux私房菜基础学习篇(第三版)》,鸟哥著

一本大而全的LINUX入门指点,主要讲解Linux一些命令,Linux的实际操作及Linux基础理论。很适合Linux初学者学习。

《嵌入式 Linux应用开发完全手册》,韦东山著

这本书综合了常见的嵌入式开发经验技巧,以及常见的嵌入式系统应用,系统移植,调试及异常处理等,内容非常丰富,是中文 Linux领域难得的一本好书。嵌入式处理器种类繁多,韦老师着重讲了目前国内最常用的ARM系统,实用性很强,是国内嵌入式程序员不容错过的一本工具书。

《UNIX环境高级编程》(第2版),史蒂文斯著

《UNIX环境高级编程》是 Unix/ Linux程序员案头必备的一本书籍。可以说,Linux程序员如果没有读过这本书,就好像基督教徒没有读过圣经一样,是很难让人理解的。这本书概括了 Linux编程所需的一切理论框架、主要系统函数、多进程编程、乃至 Linux网络通信。

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》,宋宝华著

随着通信、电子行业的迅速发展,全世界每天都会生产大量芯片,设计大量新电路板,也因此,会有大量设备驱动需要开发。本书主要对驱动编程所涉及Linux内核最底层机理的讲解。也是即Linux设备驱动开发详解第二版畅销后,作者又进行第三版的编著。

《Linux设备驱动程序》,科波特著

《LINUX设备驱动程序》就是网上说的“LDD”,经典之作,必备书籍。国产经典《Linux驱动详细解》也是一本非常不错的书,很实用,书中源代码分析比较多,基于2440的,对linux外围驱动有很全面的讲解。

《深入理解 Linux内核》(第三版),博韦等著

学习 Linux,就要学习 Linux的精华。而 Linux的精华,则在于 Linux的内核。本书以 Linux 2.6版架构为基础,分门别类地向初学者介绍了 Linux内核的架构、编程思想、以及功能模块。在本书的指导下学习,对于你读懂 Linux操作系统的精华部分,会取得事半功倍的效果。

-------------------

学习linux shell下的编程有什么用?

我是刚开始学linux的,现在开始学了一些shell下的编程,是比较初步的,觉得不是很难,但是不知道学了到底能在那些方面运用?有谁能给指点一下

工作或者读书等)需要学习linux的人,需要系统的学习一下,最好有一本好的书来学习。

linux是世界各地的黑客们写出来的开源系统,对于热爱学习计算机技术(算法、数据结构、编程、操作系统……)的人来说,linux是一个天堂。

我个人就是完全因为兴趣而捣鼓linux,和工作不沾边。

有几种不同的学习:

a)使用->需要学习linux的一些历史、各种命令、桌面的操作、shell的知识

b)编程->学习linux的接口

c)系统管理->学习一些管理员需要掌握的命令

d)内核、源码->先要学好操作系统原理,然后慢慢钻研。

linux是一个很奇怪的东西,因为你知道的越多,你的问题就越多。

如果你将来用的上,那么学习linux自然有用。

如果用不上,学习linux的作用在于折腾你的精力、开拓你的思维、视野、提高自学能力。从你付出的机会成本的角度来说,学习linux不合算,因为你应该把有限的时间用来学习对你更重要的东西,而不是不沾边的linux。

除非把linux当作一种爱好。所谓“衣带渐宽终不悔,为伊消得人憔悴”。自然是另一番感受。

当你用shell编写个自己能用上的脚本你就知道有用拉

而且还老有成就感拉

比如你需要搜索全盘文件,把大写名字改为小写,这样的程序用几行shell就能写,但是无论C还是其它语言都非常麻烦,手工修改就更麻烦。

明白shell程序设计的用处吗,任何一种语言都有他自己的适用领域

-------------------

linux shell学习

分类:读书笔记

首先恭喜你,看了这个文章,推荐两本书,Linux shell脚本攻略, shell脚本学习指南 ^_^。

shell脚本学习指南大概很多人都看过,但是看完之后对于shell能干什么,可能并不十分清楚,而linux shell脚本攻略则以一个个任务的形式,用脚本解决。而且有详细的解释。相当于cookbook。包含了各个方面,基础的,网络的,系统管理的。但是对于基础知识的介绍,可能需要读者查看相关书籍,所以shell脚本学习指南可以拿来翻翻。

以下是个人的一点粗浅认识,不一定对。

关于shell

lilnux与windows不同之处在于提供了很多工具。而且多个命令之间用管道|连接,可以实现一系列任务,这在windows应用程序界限很明显的地方是很难实现的。

linux的shell提供了很多工具。工具就相当于函数,但是与我们编程语言的函数不同在于,并不需要写一个入口函数来调用它,而多个工具可以一起使用。

find,sed,awk,grep等命令都可以称为工具。

find查找

grep也是查找

sed可以实现一些替换等

awk相当与编程语言,在awk''包含里面进行简单编码,实现相应的功能

还有很多工具,具体要查看书籍。

而一行一行的命令不适合批处理,不适应管理自动化。所以需要脚本。

脚本就是把一堆命令写在一起。在#!/bin/bash指明这是个脚本。具体参见书籍。

关于linux shell脚本攻略

前面几章介绍基础知识,以及应用。后面的对于网路的操作,引入了curl,wget,利用了服务提供商的rss feed。其它的与前面的编程一样,都是文本替换啥的。(这里显示出shell的好用之处,不必专门写一个程序来操作,不用自己写很多函数,且多个操作结合方便,灵活)。后面介绍了归档,压缩,加密工具。最后两章是一些系统运维的知识,查看系统磁盘状态,查看进程使用cpu的情况等等。要用的时候细看。

看了很久了,有点忘记了,以后看书,再详细记录一些知识点。现在都忘光了。提供一个方向罢。

p130 pattern用于匹配字符串

\1代表匹配到的第一个子串后向引用

对结果进行分组,利于后向引用

p26使用反引用或者$()来存储命令,如cmd_output=$(ls| cat-n)或者 cmd_output=`ls| cat-n`

linux下编译ffmpeg时关于configure的问题.

你准备工作没做好吧!!

先编译安装Yasm。

然后编译安装H.264(也就是x264)。

再编译安装AAC audio encoder(fdk-aac)。

编译安装libmp3lame(MP3 audio encoder)。

编译安装libopus(Opus audio decoder and encoder)。

编译安装libvpx(VP8/VP9 video encoder and decoder)。

做后编译安装ffmpeg。

其中1-6你可以选择编译安装,也可以使用源直接安装。安装后了再编译安装ffmpeg

你使用 sudo ldconfig-p|grep libx264看看你的libx264是否正确安装.

你编译安装x264的时候可以使用2中方式都安装。

cd../x264

./configure--enable-shared

make

make install

最后

cd../x264

make distclean

./configure--enable-static

make

make install

阅读剩余
THE END