haskell中大文件的IO:性能问题

我试图用Haskell处理大文件。我想一个字节一个字节地浏览输入文件,并一个字节一个字节地生成输出文件。当然,我需要用大小合理的块(几KB)缓冲IO。我做不到,我需要你的帮助 import System import qualified Data.ByteString.Lazy as BL import Data.Word import Data.List main :: IO () main = do args <- Sys

动态地将Atmel IO引脚从输入更改为输出为三态

我被谷歌d淘汰了。那么,StackOverflow的朋友们,有没有可能将Atmel系列微处理器(如Atmel 165)上的IO引脚从输入更改为输出,或从输出更改为三态,或从输出更改为三态,或从输入更改为三态,以及任何或所有这些都是相反的 平行问题:是否有Atmel程序员/语言支持或不支持切换IO引脚的工具?如果我在谷歌上搜索相关信息,更改pin方向这个主题的名称是否比将输入pin更改为输出pin+Atmel更易于搜索?是的,您可以随时更改pin配置。我从来没有听说过一种语言不允许您切换pin配置

使用IOMeter编写只有一个文件的文件

关于如何从文件中写入模式作为IOmeter的输入,我在网上没有看到任何有用的文档。您应该使用Load Dynamics生成存储工作负载和性能分析。EMC部署了几十台这样的设备,我想您就是在这里工作的。使用Load Dynamicx Enterprise执行此操作是一件小事。如果您在附近找不到任何电器,请联系我们info@loaddynamix.com我们还可以让您与EMC内的其他Load DynamiX用户取得联系。IOMeter不支持自定义模式。 您可以使用FIO代替 请在此处查看操作指南:

Io MPI_文件_WRITE()的使用

我试图理解MPI I/O的一些方面。以下测试代码旨在填充四个进程的本地数组,每个本地数组是更大的10x10数组的一部分,然后输出到一个文件,以便以正确的顺序写入整个数组。您可能会注意到,这四个进程拥有数组的矩形部分,它们一起精确地覆盖了大型数组的域,但它们的边界彼此不“平方”。这是故意的 你会注意到,在实际写作的地方,我有两个选择。第一个生成一个文件,其中填充了一些命中或未命中的正确值,但主要是胡言乱语。第二种选择非常有效。我希望第一个选择也能奏效。关于mpi\u file\u write(),

Io 如何判断O_DIRECT是否正在使用?

我正在运行一个支持O_DIRECT的IO密集型进程。在进程运行时,有没有办法判断是否正在使用O_DIRECT 我尝试了“iostat-x1”,但我不确定哪个字段对我有帮助 谢谢。您必须获得正在运行的进程的pid。一旦你得到pid,你就可以 cat /proc/[pid]/fdinfo/<fd number> 然后用O_DIRECT打开foo1,不使用O_DIRECT打开foo2。下面是节目 #define _GNU_SOURCE #include <stdio.h> #

朱莉娅:IO/文件数据的流式转换

这似乎是一个简单的问题,但我不知道如何在朱莉娅身上做到这一点。我们接收文本文件,但它们的换行符为“\01”或“\00”。文件部分较大(~10 GB),这就是为什么我们要打开文件内容流,将“\01”映射到“\r”,然后继续读取行。类似于(伪代码): 最好使用来自文件、CMD和IOBuffer的输入 我知道我们可以调用一个外部命令来进行转换,但我们使用的是Windows和Linux,我们希望有一种方法可以轻松地在两者上工作 鉴于这是一个具体的用例,我们想知道IO流处理在Julia中通常是如何工作的。

我可以用IO同时写两个文件吗?

我可以使用IO同时写入两个文件吗?谢谢 是的,你可以。我建议大家继续读下去。线程允许多处理,即同时运行两件事情。在这种情况下,您希望同时写入文件,具体取决于您对“同时写入”的要求,在最简单的情况下,您可以打开多个文件并交替写入两个文件: local f1 = io.open('file1.txt', 'w') local f2 = io.open('file2.txt', 'w') f1:write('This will go to first file\n') f2:write('Secon

Io Erlang打印进程ID?

这是一个关于打印连接的进程id的非常简单的问题。例如,在这一个打印出监听?我假设Listen是一个Pid btw {ok, Listen} = gen_tcp:listen(); 您可以使用~p格式说明符使用io:format打印它,该说明符可以打印任何Erlang术语: > io:format("~p~n", [Listen]). #Port<0.605> io:format(“~p~n,[Listen])。 #港口 (Listen实际上不是一个pid,而是一个端口标识

Io NFS装载的共享读/写速度太慢

我有几个NFS共享作为源文件夹挂载,还有几个作为目标文件夹挂载。 文件取自源文件,并将一些更改放在目标文件中。 进行更改本身需要非常短的时间,但是从NFS共享到NFS共享的读/写操作需要非常长的时间,例如,10MB的数据传输大约需要6分钟。 有没有办法加快这个过程 提前感谢客户机调整NFS装载选项可能会显著提高性能。 我发现defaultrsize和wsize太大了,减小它们的值会有所帮助。但是,测试是确定环境中rsize和wsize的最佳值的最佳方法。目前在千兆网络上,我使用的是rsie=26

Io 用Fortran90读取二进制输入

有人用下面的子程序为我生成了一个输出 subroutine write(...) REAL*8 v(a), h(b), f(b) integer iv(b+1), jv(a) write(ium) a, b, c, d, e write(ium) (iv(i),i=1,b+1) write(ium) (jv(i),i=1,a) write(ium) (v(i),i=1,a) write(ium) (f(i),i=1,b) write(ium) (h(i),i=1,b) retur

Io char就绪时从输入端口块读取

我不明白为什么我的代码不起作用。我有一个向量,这个向量在某些位置包含输入端口,在其他位置包含0。当有输入端口时,我想检查是否有可用数据。如果有可用数据,请读取数据并将其排队。如果没有,继续前进 这是我的密码: ;The name of the vector is 'in'. (define (read-ports) (let loop ((idx 0)) (if (not (= idx (vector-length in))) (let ((port (vec

Io 顺序写入文件系统的一致性保证

我的程序(只有1个进程和1个线程)使用普通的旧写入系统调用,将n个连续的数据块顺序写入HDD(常规类型的HDD)上的文件。这就像某种只附加日志文件 在系统崩溃(电源故障,而不是硬盘故障)后,我读回并验证块[I](0

Io 以字节形式读取目录

我正在尝试使用构建一个归档文件,我需要归档整个目录 到目前为止,我可以通过执行以下操作来归档单个文件: io.File File=new io.File(pathToMyFile); List bytes=wait file.readAsBytes(); io.FileStat stats=wait file.stat(); 存档=新存档(); addFile(新的ArchiveFile.noCompress('config.yaml',stats.size,bytes) ..模式=统计模式 .

Io 从lua创建lnk快捷方式(不带lfs)

我想编写一个函数,从我的lua脚本创建一个windows.lnk文件。我在Luafile系统中找到了一个函数。没有图书馆有没有办法做到这一点?(原因:我正在为多个用户编写脚本,如果我们不必在每台机器上安装库,那就太好了。) 我感谢你的帮助 创建快捷方式(一个.lnk文件) 要创建符号链接,只需使用操作系统。执行“mklink…”是否需要符号链接到文件的快捷方式(带有图标)文件?我怀疑“lfs”库能否在Windows上创建快捷方式。 -- your .lnk file local your_sh

Io NVMe SSD上的GFortran非格式化I/O吞吐量

请帮助我了解如何使用(G)Fortran提高顺序、无格式I/O吞吐量,尤其是在使用NVMe SSD时 我写了一个小测试程序,见本文底部。这样做的目的是并行打开一个或多个文件(OpenMP),并将随机数数组写入其中。然后它刷新系统缓存(需要root,否则读测试很可能从内存中读取)打开文件并从中读取。时间以墙时间度量(尝试只包括与I/O相关的时间),性能数字以MiB/s表示。程序循环直到中止 我用于测试的硬件是三星970 Evo Plus 1TB SSD,通过2个PCIe 3.0通道连接。因此,从理

对mmap/dev/mem的权限被拒绝,即使使用CAP_SYS_RAWIO,也可以作为root用户使用

我们有一个x86主板,它有一些GPIO,可以使用MMIO(内存映射输入/输出)访问。I/O区域位于地址0xfd6d0680及其后(仅一页) 当以root用户身份(使用sudo)执行时,程序运行良好。但是当作为普通用户执行时,对mmap()的调用失败。这在正常情况下是正常的,但据我所知,当可执行文件具有CAP_SYS_RAWIO功能时,它应该可以工作: $ ./ipc_gpio out=0 Read board name: 'MX370QD' ERROR: open '/dev/mem' fail

Io 在性能测试期间限制RAM的使用

我必须运行一些性能测试,以了解当系统内存不足且系统开始颠簸时,我的程序是如何工作的。理想情况下,我将能够更改系统使用的RAM数量 我曾试图用有限的物理内存在单用户模式下启动运行Ubuntu 10.10的系统,但使用max_addr=300M、max_addr=314572800或mem=300M的参数,系统没有使用我的交换分区 在仍然使用交换空间的情况下,是否有办法限制整个系统使用的RAM数量 重点是测量每个程序的总运行时间,作为输入大小的函数。我不是要找出性能问题,而是要比较算法,这意味着我需

Io 在哪里可以获得g++;戴软呢帽19

我正在尝试编译我从中下载的xmacro 我在经营Fedora 19 LXDE 问题:我从哪里获得iostream.h?它不见了。我看到一些包包括iostream.h。程序包版本号compat-gcc-34-c++.i686与g++(gcc)4.8.1 20130603不匹配。应该吗 我想当我下载编译器时,应该包括iostream.h 我已经安装了gcc-c++、libx11-devel和libxtxt 问题:我是否得到了正确的C++版本?什么是兼容性GNU编译器集合 $ yum search

Io 从文件或流中读取

我可以像在Java中那样处理文件吗。假设我有一个包含3行的文件,如下所示: This is hello world. This is not hello world. This is a story of a young boy. 现在我如何在我的程序中使用这三行作为字符串呢?首先是一条评论:如果你用Prolog编程,最好像在Prolog中使用文件一样使用文件,而不是像以前用Java那样使用文件 还有一个建议:阅读文档。第一次受伤,但你会学会喜欢它。SWI Prolog在其网站上提供了一

Io 使用OpenMP加速Fortran中的文件写入例程

我有一个派生类型t_data由三个数组组成:速度、位置和加速度 type :: t_data real(kind=REAL64), allocatable :: velocity(:) real(kind=REAL64), allocatable :: position(:) real(kind=REAL64), allocatable :: acceleration(:) end type t_data 我分配这些数组并用信息填充它们。在某些

Io 卡桑德拉没有从ssttable读取数据

使用YCSB和Workload Cread100%测试cassandra。 并且iostat总是用read显示0 配置: 数据在sdb上,24G数据,8G堆大小,默认memtable大小, 禁用行缓存和键缓存 如我所想,统一请求将导致memtable未命中,并在ssttable上查找数据, 因此,data dir iostat不应为零。 8G堆的memtable如何存储所有24G数据 有人碰到同样的问题吗 这里没有魔法。您的请求工作负载不能像您想象的那样随机 我碰巧签出了YCSB的一个副本,Wo

Io 中止来自另一个goroutine的Read()调用

我正在使用IMAP服务器,其中一个操作是升级连接以使用TLS(通过STARTTLS命令)。我们当前的架构有一个goroutine从套接字读取数据,解析命令,然后通过通道发送逻辑命令。另一个goroutine从该通道读取并执行命令。总的来说,这很有效 但是,在执行STARTTLS时,我们需要停止当前正在进行的Read()调用,否则Read()将消耗TLS握手的字节数。我们可以在这两个类之间插入另一个类,但是该类将在Read()调用中被阻塞,我们也有同样的问题。如果网络连接是一个通道,我们可以添加另

Io 什么是主人?[不在互联网上]

我正在阅读一些关于IO设备的文献,我想到了这句话: 。。。主机正在尝试读取数据位 主机和控制器之间的完整交互协议可能很复杂,但基本的握手概念很简单 究竟什么是主机、CPU、驱动程序或其他 最有可能的是,主机和控制器之间的完整交互协议可能很复杂,但基本的握手概念很简单这让我困惑,听起来像是CPU,对吗?

Io 八度dlmread:无法打开文件';myfile.txt';

我有一个txt文件,数据格式为:2104,3399900 I_e int1,int2,int3。我有50行相同的格式 现在我可以把数据放到变量中,比如说,a 我正在使用命令: a = csvread('ex1data2.txt'); %I have tried a = dlmread('ex1data2.txt'); it too does't work 它会产生一个错误: 错误:dlmread:无法打开文件“ex1data.txt”。 我已将包含文件的目录的路径添加到倍频程搜索路径中。 如

Io 将输出写入文件

好吧,我在写我想归档的提取信息时遇到了一个问题。我用一个简单的print语句对此进行了测试,它给出了我想要的确切输出。然而。当我试图将此信息写入文件时,它不会写入任何内容,文件显示为空 输入是一个XML格式的wiki文件,以及与我希望从wiki文件中提取的页面标题相对应的字符串列表。这是代码,其中页面标题是一个类似[‘无政府主义’、‘亚当和夏娃’、…]的列表: new_wiki = open('new_wiki.xml', 'w') soup = BeautifulSoup(wiki) wiki

Io 是否在关闭时将多余的数据写入文件?

如果我将数据写入文件,如下所示: program main implicit none integer :: err real (kind=4), dimension(3) :: buffer buffer(1) = 1.2 buffer(2) = 3.7 buffer(3) = 0.1 open(unit=36, file='test.dat', iostat=err, form='unformatted', action='write', status='

Io FORTRAN WRITE()

在我开始之前,我必须先声明我是FORTRAN的新手。我正在维护一段1978年遗留的代码。它的目的是从文件中读入一些数据值,处理这些值,然后将处理后的值输出到另一个文本文件 给定以下FORTRAN代码: INTEGER NM,STUBS,I,J,K PARAMETER (NM=67,STUBS=43) INTEGER*4 MDS(STUBS,NM) CALL OPEN$A(A$RDWR,'/home/test/data.txt', MAXPATHL

Io 从poll/epoll移植到Libev

我是libev的新手,我很难理解它。我以前使用过select()、poll()和epoll(),它们非常容易理解和实现。我现在想从epoll切换到libev。以下是我目前正在使用epoll进行的操作- short int state[10000]; // stores the events for all fd state[fd] |= current_state // Update state for the fd, current_state could be either

Io Lua:无阻塞地获取键盘输入

我已经开始在Lua上做一个小项目,包括制作一个基于文本的界面,它可以不断更新,并允许键盘输入进行交互 我需要一种获取键盘输入的方法,但我也需要它要么不阻塞,要么有某种超时(最好设置为几分之一秒)。我自己也做过研究,但没有发现对我有用的东西 我需要一些能与Lua5.1.5和Linux一起工作的东西。Windows兼容性会很好,但这不是一项要求,因为我也在做一些需要ANSI终端的事情。正如hyde在我的帖子评论中所说的,我可以使用Lua包装器为ncurses获取输入。除此之外,我还可以将它的特性用于

Io 如果我的条纹计数设置为大于我的条纹数,会发生什么情况

我对Lustre文件系统有疑问。如果我有一个大小为64 GB的文件,并将条带大小设置为1GB,则条带数将变为64。但是,如果我将条纹数设置为128,那么光泽在这种情况下会做什么?如果条纹数设置为128,则128条中使用64条条纹,其余64条条纹将被忽略。Lustre文件系统以循环方式写入数据,这在条带化时是必要的。另外,为了确保其余的条带不会不平衡,我们需要设置一个属性,以便写入从第65条带开始。在考虑这一点时,您可能忽略了OST数量等细节。我将更详细地阐述这一点,因为我已经看到了许多关于条纹的

Io 在Julia中追加或创建HDF5文件

我似乎无法在Julia中以r+模式创建文件 julia> using HDF5 然而: julia> fid = h5open("/tmp/test.h5", "r+") ... ERROR: Cannot access file /tmp/test.h5 ... 这是故意的行为吗?如果是这样的话,在HDF5文件不存在的情况下,什么是正确的附加到HDF5文件并进行创建的方法 我的尝试: julia> fid = h5open("/tmp/test.h5", "w") HDF

Io 将表格记录写入格式化的直接访问文件

我有类似的记录,我正试图创建一个格式化的直接访问文件的基础上相对朱利安日期(这是转换工作正常)。 记录结构为: abc00 20160701 01 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 abc00 20160701 02 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 ...... abc00 20160701 08 -99.0 etc . . . . . .

Io 如何在Common Lisp中写入zip文件?

我可以打开一个zip条目并调整内容,但我不知道如何保存它们 CL-ZIP的配置不理想 规格: 拉链 快速口齿 MacPorts CLISP 2.49 Aquamacs 2.1(Emacs 23.2) Mac OS X 10.6.4 MacBookPro 5,1 ; Removes newlines at the beginning of PRE tags in Sigil-edited ePub files. ; ; See http://code.google.com/p/sigil/issu

Io go websockets eof

我正在尝试制作一个简单的命令转发器,将我的家庭计算机连接到我自己的服务器上,这样我就可以将命令推送到我的服务器上,我的家庭电脑就可以得到它。这些命令对于我的下载程序来说是简单的暂停/恢复。我的设计是,在服务器上,我运行一个hub实例,它创建一个用于传递命令的窗口和一个用于后端将这些命令传递到我的pc的窗口。我用一个通道将这两个“窗口”绑定起来,它们运行一个服务器。当客户端连接并向集线器发送消息时,它会通过一个通道流式传输到后端窗口,然后流式传输到真正的后端(在我的家用电脑上)。当后端响应中心上的

Io 过滤出破裂的管道错误

我收到一个从io.Copy调用返回的错误,我已将套接字(TCPConn)作为目标传递给该调用。预计远程主机在受够了连接后会直接断开连接,而我不会从他们那里收到任何信息 当跌落发生时,我得到以下错误: write tcp 192.168.26.5:21277: broken pipe 但我所拥有的只是一个错误接口。如何区分断管错误和其他类型的错误 if err.Errno == EPIPE... 除了一个错误接口之外,拥有所有接口就足以执行类型断言或类型切换,以显示接口所持有的具体类型。断管错

Io 我如何阅读Rakudo Perl6中的STDIN?

就这么简单,如何在Perl6中读取来自STDIN的输入? 我认为有很多方法可以做到这一点,但我对最惯用的Perl6解决方案感兴趣。Perl6中的标准输入文件描述符是$*in(在Perl5中,*STDINtypeglob将STDIN文件描述符引用为*STDIN{IO}) 从标准输入读取数据的一种方法如下: for lines() { say "Read: ", $_ } 事实上,没有invocant对象的lines()在.lines()中默认为$*In 使用局部变量的替代方法是: for

Io mpi i/o文件缺少随机行

我正在处理MPI I I/O问题。秩0从参数文件读取位置,然后发送到秩1、2、3。所有这些过程(1,2,3)都将根据秩0给出的位置从读取文件中获取文本,并在写入文件中以不同的行写入。当我在一台计算机上运行程序时,一切正常。但当我使用2台计算机时(仍然是4个进程,在服务器上排名0,1,而在客户机上排名1,2),输出文件的一些随机行丢失了!这是我的密码 #include "mpi.h" #include <stdio.h> #include <stdlib.h> #inclu

Io 将两个文件收集到另一个文件

我有两个文件,file1.txt,file2.txt,我想在检查两个文件的行之后在file3.txt中收集它们 例如: file1.txt line 1 T line 2 F line 3 T line 4 T line 5 F line 6 F line 1 T line 2 T line 3 F line 4 T line 5 F line 6 T file1 *******************

Io Python的类比在Common Lisp中被按下了吗?

我正在用CommonLisp制作一个简单的LTK游戏,并希望玩家角色在按下空格键时跳跃。但是,窗口不断更新,因此我不能等待用户输入。我想检查每一帧是否按下空格键。尽管谷歌搜索了很多,我还是找不到用Lisp实现这一点的方法。我只找到了传统的I/O提示,可以停止程序的运行 谢谢您的帮助。您正在使用Tk画布吗?也许可以将事件处理程序绑定到按键 (with-ltk () (let ((canvas (make-canvas nil))) (grid canvas 1 1) (bind

Io 为什么java不能读取rt.jar?

我正在尝试运行一个java程序,该程序使用PrintWriter并调用PrintWriter.format()方法。它在Eclipse中运行良好,但从命令行运行时,我得到以下结果: /usr/java/jdk1.6.0_06/jre/lib/rt.jar: error reading zip file Exception in thread "main" java.lang.NoClassDefFoundError: java/util/Formatter 这是否意味着Java不能从自己的库中

Io scite未在弹出窗口中显示程序输出

我正在Ubuntu 12.04中通过scite运行lua脚本。当我执行io.read程序时。 示例:(每个命令位于一个单独的行上) 当我执行程序时,我不会得到一个单独的弹出对话框窗口,询问用户输入 在代码的右侧,我得到以下输出: > lua5.1 "io_examples.lua" Please enter a number: nil 我知道这听起来可能很愚蠢,但如何获得询问用户输入的弹出式输出窗口?io.read返回的nil可能暗示在读取过程中发生了错误。您可以通过在io.read语句

Io 为输入和输出配置PIC端口

我试图在我的PIC18F4620上使用端口A的两个引脚,一个作为输出,另一个作为输入。我已经写了一个简单的程序来实现这一点。但是,当我在主板上调试程序时,输出不会随输入而改变 我理解如果我只使用一个管脚,为什么每次都需要更改管脚配置,但我使用两个不同的管脚(A0和A1)这一事实让我感到困惑。此外,当我使用两个不同的端口(例如A0和D1)时,输出也会发生变化 我是否遗漏了什么,或者这是我在设计中必须克服的限制 代码如下: #include <xc.h> #include "config

Io 在两个函数之间发送“Reader”

我正在尝试发出一个GET请求,然后在POST请求中将我获得的内容发送到另一个站点。以下代码可以正常工作: func deliver(sourceURL *url.URL, destinationURL *url.URL) { client := &http.Client{} sourceResponse, err := http.Get(sourceURL.String()) if err == nil { body, _ := ioutil.Re

有没有一种方法可以在不重新分配的情况下使用std::io::write写入内存缓冲区?

有没有一种方法可以使用std::io::Write将流直接写入内存,而不必在开始时预先分配final,也不必在写入时重新分配整个数组 虽然Vec实现了Write,但这需要连续的内存,我认为可能会像常规调整向量大小一样重新分配 Rust的stdlib是否支持类似的功能,或者是否需要实现它 我想写入内存,它有可能进入多个GiB。可能内存是碎片化的,也可能是我想要的大小的连续区域不可用。相反,分配许多块(可能是固定的2次方大小)并根据需要分配更多的块是非常有效的 一旦完成,您可以读回数据,压缩内存中

Io VHDL-ModelSim测试台模拟在发送时冻结;“运行”;

我有一个关于我正在为计算傅里叶变换的硬件蝴蝶算法开发的测试台的问题 我试图做的是读取一系列输入数据文件(32位向量)并将输出写入其他输出文件 输入文件为Ar.txt、Ai.txt、Br.txt、Bi.txt、Wr.txt和Wi.txt 输出文件为Ar_OUT_TB.txt、Ai_OUT_TB.txt、Br_OUT_TB.txt、Bi_OUT_TB.txt 但当我尝试使用ModelSim进行模拟时,程序只是冻结了:我仍然可以做一些事情,比如打开另一个项目/文件等,但是没有显示波形,而且命令行也丢失

Io 在Julia中设置多个I/O缓冲区的最佳方法是什么?

我正在试验处理Julia中的长文本字符串(例如书籍长度)的不同方法。具体来说,我正在研究转置密码,并一直在使用(1)字符串串联,(2)数组和(3)I/O缓冲区测试速度和内存使用情况。在最后一种情况下,我需要能够将单个字符“打印”到不同的、可索引的I/O缓冲区。我的第一次(简化)尝试如下: text = fill(IOBuffer(), 3) print(text[1], 'a') print(text[2], 'b') print(text[3], 'c') for i in 1:3 p

Io 升华文本3明格构建

我一直在尝试为竞争性编程构建sublime text 3,但对构建系统感到困惑。我尝试过各种网络构建系统,有些启动控制台进行I/o,有些显示出一些错误,无法工作。我已将MinGW下载为C:\MinGW\bin。我需要一个从文件“input.txt”输入并输出到“output.txt”的构建。这是我正在尝试运行的示例代码 它所做的是打开控制台,即使我输入输入(如图所示),它也不会给出输出。 建造- { "cmd": ["gcc", "${file}", "-o", "${file_base_na

上一页 1 2 ...  9   10   11   12    13   14   15  ... 下一页 最后一页 共 19 页