E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
《Unix环境高级编程》
linux进程控制(一)--
unix环境高级编程
读书笔记
1.进程PID和特殊的3个进程 每一个进程在系统中都有一个唯一的标识,这个标识叫做进程标识符,或者叫 PID(processidentity)。我们可以通过调用 getpid 函数来获取一个进程的PID,也可以调用getppid函数来获取当前进程的父进程PID。在 linux 系统中,有三个特殊的进程,它们的进程 PID 分别为0,1,2。0号进程是系统进程,它存在与内核当中,而不是
xiaocainiaoshangxiao
·
2014-01-03 11:00
linux
进程
fork
exec
unix高级编程
[置顶] 小议Linux中的僵死进程
在读《
unix环境高级编程
》时,发现忽然对僵死进程的处理机制很感兴趣,经过查阅资料弄清楚了其中的原理,在这里做一个记录。
xiaocainiaoshangxiao
·
2014-01-02 21:00
linux
init
僵死进程
unix高级编程
[置顶] unix进程的环境--
unix环境高级编程
读书笔记
1.进程的启动 进程总是从 main 函数开始执行的,main函数的函数原型如下:intmain(intargc,char*argv[]);当内核启动 c 程序时,使用一个 exec 函数。这个 exec 函数就是调用 main 函数之前的一个启动例程。可执行程序文件,将此启动例程的地址设置为程序的起始地址,这个工作是由连接编辑程序(即编译器)设定的,这个连接编辑程
xiaocainiaoshangxiao
·
2013-12-31 11:00
linux
main
存储空间
unix高级编程
进程执行
unix环境高级编程
-undefined reference to 'pthread_create'
笔者一直在学习
unix环境高级编程
。第十一章为线程编程。第一个程序就是打印线程ID。
天外飞鱼
·
2013-12-30 14:00
c
线程
pthread
[置顶] linux系统数据文件和信息--
unix环境高级编程
读书笔记
linux系统中的数据文件有很多,在这一章里介绍的主要内容是和系统有关的一系列文件,包括passwd,shadow,group,utmp,wtmp以及一些系统的相关信息和时间的相关操作。1.passwd文件(即口令文件) 口令文件就是存在于目录/etc/passwd文件,它用来存储系统中的用户名,密码,用户ID,所属组ID,注释,起始工作目录和默认的shell。密码在早期是记录在这个文
xiaocainiaoshangxiao
·
2013-12-30 11:00
linux
passwd
数据文件
time
unix高级编程
Unix环境高级编程
apue.h文件问题,与运行第一个程序
《
Unix环境高级编程
》非常详细的介绍了在UNix\linux环境下用C编程的重要问题,但是第一章开始却没有介绍如何正确的配置作者设定的开发环境。特别是找不到apue.h文件。
xueyushenzhou
·
2013-12-22 20:00
编程
linux
unix
Unix环境高级编程
apue.h
[置顶] 标准IO库--
unix环境高级编程
读书笔记
标准IO库是C语言提供的一个库,不光存在于linux中,在windows中也是有的。标准IO库和文件IO的不同是,标准IO库是对文件IO(即系统调用)的封装,并且在用户层添加了一些缓冲区。 文件IO的所有操作都是针对文件描述符进行的,而标准IO则使用文件指针。当打开或创建一个文件时,标准IO使得文件与一个流相结合。例如,用fopen打开一个文件,则返回一个FILE结构体的指针,所有的
xiaocainiaoshangxiao
·
2013-12-20 17:00
linux
缓存
格式化输出
流操作
标准IO
[置顶] 文件和目录(二)--
unix环境高级编程
读书笔记
在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中。对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中block的大小是有关系的,符号链接的长度是它所指向的文件名字的长度。 文件的截短可以在使用open函数时,用O_TRUNC标记,这样将会在打开文件时将文件的内容清空。linux专门为我们提供
xiaocainiaoshangxiao
·
2013-12-19 20:00
文件
目录
文件系统
iNode
unix高级编程
[置顶] 文件和目录(一)--
unix环境高级编程
普通文件和目录linux中最多的两类文件,linux中一共有七种类型的文件,如下:1.普通文件 2.目录 3.字符特殊设备 4.块特殊设备 5.FIFO,又叫命名管道 6.Socket,即套接字 7.符号链接获取一个文件的详细信息可以使用stat函数组,stat函数组包括三个函数,它们的函数原型如下:intstat(constchar*pathname,structstat*buf); i
xiaocainiaoshangxiao
·
2013-12-18 20:00
权限
文件
目录
umask
unix高级编程
[置顶] 重写dup2函数
在
unix环境高级编程
的第三章中有一道题目是这样的:重写dup2函数,不能使用fnctl函数,要有规范的容错处理刚开始没有什么思路,后来在网上查了一下,发现大多数的处理都是,一直调用dup直到得到我们所想要的文件描述符为止
xiaocainiaoshangxiao
·
2013-12-16 21:00
linux
dup2
unix高级编程
重写dup2
[置顶] 文件io(二)--
unix环境高级编程
笔记
在linux中,打开的文件组织结构如下:与打开的文件相关的有三个数据结构,就是上图中的三部分。 在linux中,有一个进程表,每一个进程在进程表中有一个表项。每一个进程表项中都维护着一张打开文件的描述符表,每一个文件描述符占用了一个表项。只要文件被打开,就都会在这张表中存在一个文件描述符,而不管该描述符是否是该进程打开的。与文件描述符相关联的是文件描述符标志和文件表项指针。文件表项指
xiaocainiaoshangxiao
·
2013-12-16 17:00
linux
文件系统
原子操作
fcntl
unix高级编程
[置顶] 文件io(一)--
unix环境高级编程
读书笔记
unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open、close、read、write以及lseek。这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓存的操作的区别。不带缓存的io是相对于带缓存的io的来说的,带缓存的io有哪些呢。在后面的fwrite、fread函数等标准io操作都是带缓存的io。说了这么多还是没有说清楚带缓存和不带缓存的
xiaocainiaoshangxiao
·
2013-12-15 21:00
linux
缓存
文件操作
文件IO
unix高级编程
条件变量pthread_cond_t怎么用
最近看《
UNIX环境高级编程
》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白[cpp]viewplaincopy#include
Benthy2
·
2013-12-15 16:00
linux
线程
条件变量
《
UNIX环境高级编程
》笔记--sigsuspend函数
更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞,使用这种技术可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后pause等待以前被阻塞的信号发生,将如何呢?假定信号是SIGINT,实现这一点的一种不正确的方法是:sigset_tnewmask,oldmask; sigemptyset(&newmask); sigaddset(&newmask,SIGINT); i
TODD911
·
2013-12-15 10:00
《
UNIX环境高级编程
》笔记--sigsetjmp和siglongjmp函数
setjmp和longjmp函数用于非局部跳转,在信号处理程序中经常调用longjmp函数以返回到程序的主循环中,而不是从该处理程序返回。但是调用longjmp有一个问题,当捕捉到一个信号时,进入进行处理函数,此时当前信号被自动加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断该信号处理程序。如果用longjmp跳出信号处理程序,那么对此进程的信号屏蔽字会发生什么呢?POSIX.1并没有说明s
TODD911
·
2013-12-14 14:00
【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的《
Unix环境高级编程
》,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻的感觉。
·
2013-12-12 18:00
linux
正在看的一些书(值得推荐)
其实最近无意间看到这几本书,《
UNIX环境高级编程
》、《深入理解Linux内核》、《Linux设备驱动程序》、《人月神话》。
GULINHAI12
·
2013-12-12 16:00
linux
unix
平台
linux内核
Linux设备驱动程序
《
UNIX环境高级编程
》笔记--sigaction函数
sigaction函数的功能是检查或修改指定信号相关联的处理动作,此函数取代UNIX早期版本使用的signal函数。#include intsigaction(intsigno,conststructsigaction*restrictact,structsigaction*restrictoact); //若成功则返回0,出错则返回-1.参数signo是要检测或修改其具体动作的信号编号。若act
TODD911
·
2013-12-10 21:00
《Linux程序设计》 -> 《Linux高级程序设计》 -> 《
Unix环境高级编程
》
这是csdnlinux版主写的:《Linux程序设计》->《Linux高级程序设计》-《
Unix环境高级编程
》 可以说这个顺序代表了一般Linux程序猿的学习道路,《Linux程序设计》内容全面,易于入手
wusuopuBUPT
·
2013-12-10 16:00
读书有感
《
UNIX环境高级编程
》W.RichardStevensStephenA.Rago著 《深入LINUX内核》DanielP.Bovet&MarcoCesati著陈莉君等译 《UNIX系统编程》KeyA.RobbinsStevenRobbins
qingen1
·
2013-12-09 10:00
《
UNIX环境高级编程
》笔记--信号集
1.信号集基本操作我们需要有一个能表示多个信号--信号集(signalset)的数据类型。POSIX.1定义了数据类型sigset_t以包含一个信号集,并且定义了一下五个处理信号处理信号集函数。#include intsigemptyset(sigset_t*set);//清除set中所有的信号 intsigfillset(sigset_t*set);//使set包含所有的信号 intsigadd
TODD911
·
2013-12-08 19:00
I/O多路转接 ---
UNIX环境高级编程
I/O多路转接技术:先构造一张有关描述符的列表,然后调用一个函数,知道这些描述符中的一个已准备好进行I/O时,给函数才返回。在返回时,它告诉进程哪些描述符已准备好可以进行I/O。 poll、select、pselect这三个函数使我们能够执行I/O多路转接。1.select和pselect函数 I/O多路转接的标准函数,还有一个标准函数poll函数,就这两个
u010670794
·
2013-12-08 18:00
IO
select
poll
pselect
高编
《
UNIX环境高级编程
》笔记--可靠信号
在产生信号时,内核通常在进程表中设置某一种形式的标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。在信号产生和递送之间的时间间隔内,称信号是未决的。进程可以选用信号递送阻塞。如果为进程产生了一个选择为阻塞的信号,而且对该进程的动作是默认动作或捕捉该信号,则为该进程将次信号保持为未决状态,直到该进程(1)对此信号解除了阻塞,或者(2)将次信号的动作更改为忽略。内核在递送一个原来被阻塞的信号
TODD911
·
2013-12-06 15:00
《
UNIX环境高级编程
》笔记--中断的系统调用
早期的UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,该系统调用就被终端不再继续执行。该系统调用返回出错,其errno被设置为EINTR。为了支持这种特性,将系统调用分成两类:低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用:1.在读某些类型的文件(管道,终端设备以及网络设备)时,如果数据并不存在则可能会使调用者永远阻塞。2.在写这些类
TODD911
·
2013-12-04 16:00
UNIX环境高级编程
——第一个程序
开始接触Linux了,在网上查了一大堆资料,都说《
Unix环境高级编程
》是Linux界的“圣经”,那我就从这本书开始学吧。
cdj0311
·
2013-12-04 14:00
linux
Unix环境高级编程
《
UNIX环境高级编程
》笔记--信号及其处理函数signal
1.信号概念信号是软件中断,很多比较重要的应用程序都需要处理信号。信号提供了一种处理异步事件的方法。在有文件中,这些信号被定义为正整数。不存在信号为0的信号。很多条件可以产生信号:1.当用户按某些终端键时,引发终端产生的信号。在终端上按ctrl+c键,通常产生中断信号(SIGINT)。2.硬件异常产生信号:除数为0,无效的内存引用等等。这些条件由硬件检测到,并将其通知内核,然后内核为该条件发生时正
TODD911
·
2013-12-03 15:00
网络编程书籍推荐
分别是《TCP/IP详解》三卷本,《用TCP/IP进行网际互连》三卷本,《TCP/IP指南》+《IPv6》四卷本其中TCP/IP详解的作者还写了另外2本经典著作,《
Unix环境高级编程
》,《Unix网络编程
zhoulv2000
·
2013-12-02 13:00
linux
网络协议
kernel
网络编程
linux内核
《
UNIX环境高级编程
》apue.h 头文件的问题
初学《
UNIX环境高级编程
》的朋友都会遇到一个问题,运行里面的实例时就出现问题,提示"错误:apue.h:没有那个文件或目录".apue.h是作者自定义的一个头文件,包括程序所需的常用头文件及出错处理函数
280441589
·
2013-12-01 14:00
linux
unix
ubuntu
实例
开源社区
《
UNIX环境高级编程
》笔记--孤儿进程组
POSIX.1将孤儿进程组定义为:该组中每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员。一个进程组不是孤儿进程组的条件是:该组中有一个进程,其父进程在属于同一会话中的另一个组中。下面对孤儿进程组的产生进行检验:1.在一个具有作业控制的shell中,执行一个程序,该程序fork了一个子进程,其进程结构如下:2.父进程休眠5秒钟,这是一种让子进程在父进程终止前运行的一种权宜之计。3.
TODD911
·
2013-12-01 13:00
《
UNIX环境高级编程
》笔记--作业控制
作业控制允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问该终端,以及哪些作业在后台运行,作业控制要求下面三种形式的支持:1.支持作业控制的shell。2.内核中的终端驱动程序必须支持作业控制。3.内核必须提供对某些作业控制信号的支持。我们可以键入一些特殊字符来影响前台作业:1.中断字符(ctrl+c)产生SIGINT。2.退出字符(ctrl+\)产生SIGQUIT。3.挂起字符(c
TODD911
·
2013-12-01 11:00
fcntl系统调用
最近看起了《linuxC编程实战》文件操作的部分,看到fcntl函数才发现,之前看过的很多东西不是忘了就是没有理解,所以结合着Stevens大叔的《
UNIX环境高级编程
》有了更多的了解。
vmezr
·
2013-11-30 09:00
linux
《
UNIX环境高级编程
》笔记--tcgetpgrp,tcsetpgrp和tcgetsid函数
需要有一种方法来通知内核哪一个进程组是前台进程,这样,终端设备驱动程序就能了解将终端输入和终端产生的信号送到何处。#include pid_ttcgetpgrp(intfiledes);//返回值:若成功则返回前台进程组的进程组ID,出错则返回-1. inttcsetpgrp(intfiledes,pid_tpgrpid);//返回值:成功则返回0,出错则返回-1.函数tcgetpgrp返回前台进
TODD911
·
2013-11-29 09:00
《
UNIX环境高级编程
》笔记--控制终端
会话和进程组有一些其他特性:1.一个会话可以有一个控制终端(controllingterminal),通常会话的第一个进程打开一个终端(终端设备或伪终端设备)后,该终端就成为该会话的控制终端。2.建立与控制终端连接的会话首进程被称为控制进程。(controllingprocess)3.一个会话中的几个进程组可被分成一个前台进程组以及一个或者多个后台进程组。4.如果一个会话有一个控制终端,则它有一个
TODD911
·
2013-11-28 16:00
《
UNIX环境高级编程
》笔记--会话
会话(session)是一个或者多个进程组的集合。可以具有下图所有的安排,其中,一个会话中有3个进程组。上图的安排可能由以下形式的shell命令形成的:proc1|proc2&proc3|proc4|proc5进程调用setsid函数建立一个新会话。#include pid_tsetsid(void);//若成功则返回进程组ID,出错则返回-1.1.如果调用此函数的进程不是一个进程组组长,则此函数
TODD911
·
2013-11-26 20:00
《
UNIX环境高级编程
》笔记--进程组
每个进程都属于一个进程组。进程组通常是与同一个作业相关联的,可以接受来自同一个终端的各种信号。每个进程组都有一个唯一的进程组ID。进程组ID类似于进程ID,可以存放在pid_t数据类型中。函数getpgrp返回调用进程的进程组ID。#include pid_tgetpgrp(void);//返回值:调用进程的进程组ID。每个进程都可以有一个组长进程,组长进程的标识是:进程组ID等于其进程ID。实践
TODD911
·
2013-11-25 16:00
《
UNIX环境高级编程
》笔记--进程时间
我们可以测量进程的三种时间:墙上时钟时间,用户CPU时间和系统CPU时间。任一进程都可以调用times函数以获得它自己以及终止子进程的上述值。#include clock_ttimes(structtms*buf);//若成功则返回流逝的墙上时钟时间(单位:时钟滴答数),若出错则返回-1.函数中buf的结构如下:structtms{ clock_ttms_utimes;//usercputime
TODD911
·
2013-11-24 19:00
《
UNIX环境高级编程
》笔记--system函数
1.system函数的用法system函数能够执行函数参数中的命令。函数的定义如下:#include intsystem(constchar*cmdstring);当cmdstring为NULL:如果shell可用则返回非0值,否则返回0.因为system函数在其实现中调用了fork,exec和waitopid,分解开来相当于执行了:1.fork 生成一个子进程。2.在子进程执行execl("/b
TODD911
·
2013-11-24 14:00
《
UNIX环境高级编程
》笔记--解释器文件
所有的UNIX系统都支持解释器文件,这种文件是文本文件,其起始行的形式是:#!pathname[optional-argument]常见的解释器文件以下列行开始:#!/bin/shpathname通常是绝对路径名,对它不进行什么特殊的处理。内核调用exec函数的进程实际执行的并不是该解释器文件,而是该解释器文件的第一行中pathname所指定的文件。一定要将解释器文件(文本文件,它以#!开头)和解
TODD911
·
2013-11-24 11:00
《
UNIX环境高级编程
》笔记--解释器文件
所有的UNIX系统都支持解释器文件,这种文件是文本文件,其起始行的形式是:#!pathname[optional-argument]常见的解释器文件以下列行开始:#!/bin/shpathname通常是绝对路径名,对它不进行什么特殊的处理。内核调用exec函数的进程实际执行的并不是该解释器文件,而是该解释器文件的第一行中pathname所指定的文件。一定要将解释器文件(文本文件,它以#!开头)和解
TODD911
·
2013-11-24 11:00
UNIX-LINUX编程书籍
Linux应用开发 Unix网络编程(第1,2卷)
Unix环境高级编程
Linux系统编程 Unix/Linux编程实践教程 Linu
oolala
·
2013-11-22 16:00
linux
UNIX-LINUX编程书籍
阅读更多排名不分先后:1.C语言:高质量程序设计指南C语言接口与实现C语言解惑C专家编程C陷阱与缺陷C语言参考手册2.Linux应用开发Unix网络编程(第1,2卷)
Unix环境高级编程
Linux系统编程
oolala
·
2013-11-22 16:00
UNIX-LINUX编程书籍
阅读更多排名不分先后:1.C语言:高质量程序设计指南C语言接口与实现C语言解惑C专家编程C陷阱与缺陷C语言参考手册2.Linux应用开发Unix网络编程(第1,2卷)
Unix环境高级编程
Linux系统编程
oolala
·
2013-11-22 16:00
Unix环境高级编程
笔记:12、高级IO
1、非阻塞IO 系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用 1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞 2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。 3)在某种条件发生之前,打开某些类型的文件会被阻塞 4)对已经加上强制性记录锁的文件进行读、写 5)某些进
活的很快乐
·
2013-11-19 20:00
Unix环境高级编程
笔记:12、高级IO
阅读更多1、非阻塞IO系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。3)在某种条件发生之前,打开某些类型的文件会被阻塞4)对已经加上强制性记录锁的文件进行读、写5)某些进程间通信函数非阻
oolala
·
2013-11-19 19:00
Unix环境高级编程
笔记:12、高级IO
1、非阻塞IO 系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用 1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞 2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。 &n
oolala
·
2013-11-19 19:00
unix
Unix环境高级编程
笔记:12、高级IO
阅读更多1、非阻塞IO系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。3)在某种条件发生之前,打开某些类型的文件会被阻塞4)对已经加上强制性记录锁的文件进行读、写5)某些进程间通信函数非阻
oolala
·
2013-11-19 19:00
Unix环境高级编程
笔记:13、守护进程
阅读更多1守护进程守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为没的控制终端,所以它们是在后台运行的。2、守护进程特征父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动内核进程是特殊的,通用存在于系统的整个生命周期。它们以超级用户特权运行,无控制终端,无命令行。进程1通常是init,它是一个系统守护进程,负责启
oolala
·
2013-11-19 16:00
Unix环境高级编程
笔记 :13、守护进程
1守护进程 守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。 因为没的控制终端,所以它们是在后台运行的。 2、守护进程特征 父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动 内核进程是特殊的,通用存在于系统的整个生命周期。它们以超级用户特权运行,无控制终端,无命令行。 进程1通常是init,它是一个系统
活的很快乐
·
2013-11-19 16:00
Unix环境高级编程
笔记:13、守护进程
1 守护进程 守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。 因为没的控制终端,所以它们是在后台运行的。 2、守护进程特征 父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动 &n
oolala
·
2013-11-19 16:00
unix
Unix环境高级编程
笔记:13、守护进程
阅读更多1守护进程守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为没的控制终端,所以它们是在后台运行的。2、守护进程特征父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动内核进程是特殊的,通用存在于系统的整个生命周期。它们以超级用户特权运行,无控制终端,无命令行。进程1通常是init,它是一个系统守护进程,负责启
oolala
·
2013-11-19 16:00
上一页
16
17
18
19
20
21
22
23
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他