fifo规则
1.从FIFO中读取数据:
约定:如果一个进程为了从FIFO中读取数据而阻塞打开了FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作。
(1)如果有进程写打开FIFO,且当前FIFO为空,则对于设置了阻塞标志的读操作来说,将一直阻塞下去,直到有数据可以读时才继续执行;对于没有设置阻塞标志的读操作来说,则返回0个字节,当前errno值为EAGAIN,提醒以后再试。
(2)对于设置了阻塞标志的读操作来说,造成阻塞的原因有两种:一、当前FIFO内有数据,但有其它进程在读这些数据;二、FIFO本身为空。
解阻塞的原因是:FIFO中有新的数据写入,不论写入数据量的大小,也不论读操作请求多少数据量,只要有数据写入即可。
(3)读打开的阻塞标志只对本进程第一个读操作施加作用,如果本进程中有多个读操作序列,则在第一个读操作被唤醒并完成读操作后,其它将要执行的读操作将不再阻塞,即使在执行读操作时,FIFO中没有数据也一样(此时,读操作返回0)。
(4)如果没有进程写打开FIFO,则设置了阻塞标志的读操作会阻塞。
(5)如果FIFO中有数据,则设置了阻塞标志的读操作不会因为FIFO中的字节数少于请求的字节数而阻塞,此时,读操作会返回FIFO中现有的数据量。
2.从FIFO中写入数据:
约定:如果一个进程为了向FIFO中写入数据而阻塞打开FIFO,那么称该进程内的写操作为设置了阻塞标志的写操作。
FIFO的长度是需要考虑的一个很重要因素。系统对任一时刻在一个FIFO中可以存在的数据长度是有限制的。它由#define PIPE_BUF定义,在头文件limits.h中。在Linux和许多其他类UNIX系统中,它的值通常是4096字节,Red Hat Fedora9下是4096,但在某些系统中它可能会小到512字节。
虽然对于只有一个FIFO写进程和一个FIFO的读进程而言,这个限制并不重要,但只使用一个FIFO并允许多个不同进程向一个FIFO读进程发送请求的情况是很常见的。如果几个不同的程序尝试同时向FIFO写数据,能否保证来自不同程序的数据块不相互交错就非常关键了à也就是说,每个写操作必须“原子化”。
mysql连接命令
连接mysql服务器的命令是"mysql -h 主机名 -u 用户名 -p"。
因为mysql是一种关系型数据库管理系统,需要借助mysql命令来进行操作,连接mysql服务器的命令中,"-h"是指定主机名,"-u"是指定用户名,"-p"是提示输入密码,只有输入正确的密码才能成功连接mysql服务器。
此外,还可以通过在连接命令中指定端口号,来连接指定的mysql服务器端口,如"mysql -h 主机名 -P 端口号 -u 用户名 -p"。
如何在android面试中说清楚android中binder机制的实现过程
1 写一个service,application 通过createservice 2 运行时一般是根据uid,文件系统权限跟linux一样 3 可以,知道class名字 或者知道具体manifest怎么写的 4 looper是线程,循环来处理message queue的message,而handler对发送message的相关方法的一个类。
5 binder机制,pipe 不太清楚,socket是通过套接字来发送内容进行ipc,binder的话 是用共享内存,servicemanager作为service的管理者 6 surfaceflinger 是对窗口进行管理, 7 bionic是glic的精简版本