1. POSIX接口:POSIX是一种标准,它定义了 *** 作系统应该如何与应用程序进行交互。POSIX接口是Linux系统中最稳定的接口,它可以让应用程序在不同的Linux发行版之间进行跨平台移植。
2. System V接口:System V接口是一种稳定的接口,它定义了Linux系统中的标准函数库,可以让应用程序在不同的Linux发行版之间进行跨平台移植。
3. X/Open接口:X/Open接口是一种稳定的接口,它定义了Linux系统中的标准函数库,可以让应用程序在不同的Linux发行版之间进行跨平台移植。
4. BSD接口:BSD接口是一种稳定的接口,它定义了Linux系统中
Linux 系统核心支持十多种文件系统类型:jfs,ReiserFS,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,Vfat,NTFS,Hpfs,Nfs,smb,sysv,proc 等. \x0d\x0a下面是主要分类:\x0d\x0a一, extext 是第一个专门为 Linux 的文件系统类型,叫做扩展文件系统.\x0d\x0a二, ext2 ext2 是为解决 ext 文件系统的缺陷而设计的可扩展的高性能的文件系统.又被称为 二级扩展文件系统\x0d\x0a三, ext3ext3 是由开放资源社区开发的日志文件系统,. ext3 被设计成是 ext2 的升级版本。\x0d\x0a四, jsfjsf 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。\x0d\x0a五,ReiserFSReiserFS 基于平 衡树结构的 、ReiserFS 文件系统在网上公布.ReiserFS 3.6.x(作为 Linux 2.4 一部分 的版本),设计成员相信最好的文件系统是那些能够有助于创建独立的共享环境或者命名空间的文件系统。\x0d\x0a六,Xfs xfs 是一种非常优秀的日志文件系统,它是 SGI 公司设计的.xfs 被称为业界最先进 的,最具可升级性的文件系统技术.它是一个全 64 位,快速,稳固的日志文件系统,\x0d\x0a其他文件系统简介:\x0d\x0aMinix:Llnux 支持的第一个文件系统,对用户有很多限制而且性能低下\x0d\x0aXia:Minix 文件系统修正后的版本.在一定程度上解决了文件名和文件系统大小的\x0d\x0aMsdos:msdos 是在 Dos,Windows 和某些 OS/2 *** 作系统上使用的一种文件系 统,其名称采用"8+3"的形式,即 8 个字符的文件名加上 3 个字符的扩展名. \x0d\x0aumsdos:Linux 下的扩展 msdos 文件系统驱动,支持长文件名,所有者,允许 权限,连接和设备文件.允许一个普通的 msdo s 文件系统用于 Linux,而且无须为它建 立单独的分区. \x0d\x0aiso9660:名. 标准 CDROM 文件系统,通用的 Rock Ridge 增强系统,允许长文件 Vfat:vfat 是 Windows9x 和 Windows NT/2000 下使用的一种 Dos 文件系统, 其在 Dos 文件系统的基础上增加了对长文件名的支持. \x0d\x0aNfs:Sun 公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易 于从所有这些计算机上存取文件. \x0d\x0aHpfs: High Performance File System(HPFS) 高性能文件系统(HPFS) HPFS 是 Microsoft 的 LAN Manager 中的文件系统,同时也是 IBM 的 LAN Server 和 OS/2 的文件系统.HPFS 能访问较大的硬盘驱动器,提供更多的组织特性并改善了文件 系统的安全特性. \x0d\x0aSmb:smb 是一种支持 Windows for workgroups,Windows NT 和 Lan Man ager 的基于 SMB 协议的网络 *** 作系统. \x0d\x0aSysv:sysv 文件系统实际上是 System V/Coherent 在 Linux 平台上的文件系统. \x0d\x0aNcpfs:ncpfs 是一种 Novell NetWare 使用的 NCP 协议的网络 *** 作系统. \x0d\x0aProc:proc 是 Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据 结构的界面. NTFS:微软 Windows NT 内核的系列 *** 作系统支持的,一个特别为网络和磁盘配 额,文件加密等管理安全特性设计的磁盘格式.管道用于有学园关系的进程之间。
管道的pipe 系统调用实际上就是创建出来两个文件描述符。
当父进P1程创建出 fd[2] 时,子进程P2 会继承父进程的所有,所以也会得到pipe 的 2个 文件描述符。
所以毫无瓜葛的两个进程,一定不会访问到彼此的pipe。无法用管道进行通信。
管道一般是单工的。f[0]读,f[1]写
管道也可以适用于 兄弟进程(只要有血缘即可)。由于管道是单工的,当两个进程之间需要双向通信,则需要两跟管道。
执行
ctrl-c(2号信号) + SIGUSR1 信号 绑了一个新函数。则 ctrl-c 无效。
查看进程的信号
号信号被捕获。
将2号信号忽略掉
9号信号 kill 和19号信号 stop 不能乱搞,只能用缺省。
其它信号甚至段信号也都可以捕获。
改变程序的执行现场,修改PC指针,有些像goto,只不过返回非0值
运行结果
making segment fault
after segment fault
程序不会死。
如果不忽略 page fault
则会产生 core dump.
不停的给data 赋值,同时每隔1s会有信号进来,打印 data的值。
理论上打印出来的结果同时为0,同时为1
但并非如此,是 0,1,交替随机的。
signal 异步的,随时都可以进来,所以打印出来的结果,并不是我想要的。
信号对于应用程序来说,很像中断对于内核,都是访问临界区数据
信号被屏蔽,延后执行。
写多线程的程序时,不要以为只有线程之间有竞争,其实信号也会有竞争
system v 的IPC 年代有些久远。
有血缘关系的进程 key_t 都是相同的。
Key 是私有key IPV PRIVATE
可能用消息队列,可能用共享内存,可能用信号量进行通讯。
利用 _pathname 路径,约定好一条路径。和tcp/ip地址很像,来生成一个key_t key, 用msg_get shm_get 得到共享内存or 信号量。
int id 可以理解为文件描述符 fd。
其中Sys V 的共享内存 最为常用。
一定要检查路径,如果仅仅有2个进程,你没有创建路径,两者都是 -1(相当于大家约定好了),那当然能通信拉。但更多的进程出现,则会有问题。
一定要检查返回值
依然依靠key,但是api 实在是太挫了。P&V *** 作都是 semop. (posix 的 ipc跟为简洁)
POSIX 共享内存当然也需要一个名字,但并不是路径。
无论读进程还是写进程,都需要传入相同的名字。
如果是unbuntu 会在以下路径生成文件
其实 2和3 是1 的符号链接。 只要保证是一个就能互相通信
关键点,mmap 内存的属性修改为 private 后,产生写时copy,虚拟地址一样,但是物理地址已经不同了
当然 如果子进程修改了程序背景,执行了 exec,那么完全不一样了,直接修改了内存逻辑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)