晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/include/bind9/dns/ |
Upload File : |
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef DNS_RRITERATOR_H
#define DNS_RRITERATOR_H 1
/*****
***** Module Info
*****/
/*! \file dns/rriterator.h
* \brief
* Functions for "walking" a zone database, visiting each RR or RRset in turn.
*/
/*****
***** Imports
*****/
#include <inttypes.h>
#include <isc/lang.h>
#include <isc/magic.h>
#include <isc/ondestroy.h>
#include <isc/stdtime.h>
#include <dns/db.h>
#include <dns/dbiterator.h>
#include <dns/fixedname.h>
#include <dns/name.h>
#include <dns/rdata.h>
#include <dns/rdataset.h>
#include <dns/rdatasetiter.h>
#include <dns/types.h>
ISC_LANG_BEGINDECLS
/*****
***** Types
*****/
/*%
* A dns_rriterator_t is an iterator that iterates over an entire database,
* returning one RR at a time, in some arbitrary order.
*/
typedef struct dns_rriterator {
unsigned int magic;
isc_result_t result;
dns_db_t *db;
dns_dbiterator_t *dbit;
dns_dbversion_t *ver;
isc_stdtime_t now;
dns_dbnode_t *node;
dns_fixedname_t fixedname;
dns_rdatasetiter_t *rdatasetit;
dns_rdataset_t rdataset;
dns_rdata_t rdata;
} dns_rriterator_t;
#define RRITERATOR_MAGIC ISC_MAGIC('R', 'R', 'I', 't')
#define VALID_RRITERATOR(m) ISC_MAGIC_VALID(m, RRITERATOR_MAGIC)
isc_result_t
dns_rriterator_init(dns_rriterator_t *it, dns_db_t *db,
dns_dbversion_t *ver, isc_stdtime_t now);
/*%
* Initialize an rriterator; sets the cursor to the origin node
* of the database.
*
* Requires:
*
* \li 'db' is a valid database.
*
* Returns:
*
* \li #ISC_R_SUCCESS
* \li #ISC_R_NOMEMORY
*/
isc_result_t
dns_rriterator_first(dns_rriterator_t *it);
/*%<
* Move the rriterator cursor to the first rdata in the database.
*
* Requires:
*\li 'it' is a valid, initialized rriterator
*
* Returns:
*\li #ISC_R_SUCCESS
*\li #ISC_R_NOMORE There are no rdata in the set.
*/
isc_result_t
dns_rriterator_nextrrset(dns_rriterator_t *it);
/*%<
* Move the rriterator cursor to the next rrset in the database,
* skipping over any remaining records that have the same rdatatype
* as the current one.
*
* Requires:
*\li 'it' is a valid, initialized rriterator
*
* Returns:
*\li #ISC_R_SUCCESS
*\li #ISC_R_NOMORE No more rrsets in the database
*/
isc_result_t
dns_rriterator_next(dns_rriterator_t *it);
/*%<
* Move the rriterator cursor to the next rrset in the database,
* skipping over any remaining records that have the same rdatatype
* as the current one.
*
* Requires:
*\li 'it' is a valid, initialized rriterator
*
* Returns:
*\li #ISC_R_SUCCESS
*\li #ISC_R_NOMORE No more records in the database
*/
void
dns_rriterator_current(dns_rriterator_t *it, dns_name_t **name,
uint32_t *ttl, dns_rdataset_t **rdataset,
dns_rdata_t **rdata);
/*%<
* Make '*name' refer to the current name. If 'rdataset' is not NULL,
* make '*rdataset' refer to the current * rdataset. If '*rdata' is not
* NULL, make '*rdata' refer to the current record.
*
* Requires:
*\li '*name' is a valid name object
*\li 'rdataset' is NULL or '*rdataset' is NULL
*\li 'rdata' is NULL or '*rdata' is NULL
*
* Ensures:
*\li 'rdata' refers to the rdata at the rdata cursor location of
*\li 'rdataset'.
*/
void
dns_rriterator_pause(dns_rriterator_t *it);
/*%<
* Pause rriterator. Frees any locks held by the database iterator.
* Callers should use this routine any time they are not going to
* execute another rriterator method in the immediate future.
*
* Requires:
*\li 'it' is a valid iterator.
*
* Ensures:
*\li Any database locks being held for efficiency of iterator access are
* released.
*/
void
dns_rriterator_destroy(dns_rriterator_t *it);
/*%<
* Shut down and free resources in rriterator 'it'.
*
* Requires:
*
*\li 'it' is a valid iterator.
*
* Ensures:
*
*\li All resources used by the rriterator are freed.
*/
ISC_LANG_ENDDECLS
#endif /* DNS_RRITERATOR_H */