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