freebsd-skq/lib/libftp/doc/rus.tex
jkh 02ace70617 A programmatic interface to ftp. I need this for several other
components of the system.

The license is poorly worded, though I have an (email only) release
from the author for unlimited FreeBSD use.  I will try to get something
more concrete, though the author's remote location makes this difficult.
Submitted by:	Oleg Orel <orel@oea.ihep.su>
1995-04-25 15:05:11 +00:00

522 lines
21 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentstyle[russian,fancyheadings,twoside,epsf,indentfirst]{article}
% Vertical sizes
%\vsize=20cm
%\voffset=-2.3cm
%\topmargin=0cm
%\headheight=0.9cm
%\footskip=1cm
%\footheight=0.9cm
%\textheight=16cm
%\headrulewidth 0.01cm
%\footrulewidth 0.0cm
% horisontal sizes
%\hsize=30cm
%\hoffset=-4.3cm
%\hoffset=-2.3cm
%\textwidth=13cm
% Modes
% \special{landscape}
\pagestyle{empty}
\pagestyle{fancyplain}
\newcommand{\tit}[1]{#1}
\rhead[\fancyplain{}{\tit{\leftmark}}]{\fancyplain{}{\tit{\rightmark}}}
\lhead[\fancyplain{}{\tit{\rightmark}}]{\fancyplain{}{\tit{\leftmark}}}
\chead{\hfill}
\lfoot[\fancyplain{}{\tit{\thepage}}]{\fancyplain{}{\hfill}}
\rfoot[\fancyplain{}{\hfill}]{\fancyplain{}{\tit{\thepage}}}
\cfoot{\hfill}
\renewcommand{\sectionmark}[1]{\markboth{#1}{\ }}
\renewcommand{\subsectionmark}[1]{\markright{\ }}
\newcommand{\look}[1]{(çÌÁ×Á~\ref{#1}, ÓÔÒ.~\pageref{#1})}
\newcommand{\toindex}[1]{\underline{\bf#1}\index{#1}}
\newcommand{\add}[1]{\symbol{64}}
\newcommand{\ps}[1]{\symbol{37}s}
\newcommand{\twcol}[4]{
\noindent\parbox[t]{#1\textwidth}{#3} \hfill \parbox[t]{#2\textwidth}{#4\hfill}\\
}
\newcommand{\tc}[2]{\twcol{0.49}{0.49}{#1}{#2}}
\newcommand{\tcc}[2]{\twcol{0.49}{0.49}{\toindex{#1}}{#2}}
\newcommand{\ttt}[2]{\bigskip
{\bf#1}
#2}
\newcommand{\ts}[1]{{\bf#1}}
\newcommand{\dl}[2]{\parbox[t]{0.4\textwidth}{#1\hfill}\hfill
\parbox[t]{0.4\textwidth}{#2\hfill}}
\makeindex
\begin{document}
\title{\bf\it òõëï÷ïäóô÷ï ðïìøúï÷áôåìñ âéâìéïôåëé "LIBFTP"}
\author{ïÌÅÇ ïÒÅÌ}
\date{\today}
\newpage
\maketitle
\section*{ìÉÃÅÎÚÉÑ}
ðÒÏÄÕËÔ ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÎÁÐÉÓÁÎÉÑ Ó×ÏÂÏÄÎÏÇÏ ÎÅËÏÍÍÅÒÞÅÓËÏÇÏ ÐÒÏÇÒÁÍÍÎÏÇÏ
ÏÂÅÓÐÅÞÅÎÉÑ. ïÎ ÍÏÖÅÔ ÉÓÐÒÁ×ÌÑÔØÓÑ É ÄÏÐÉÓÙ×ÁÔØÓÑ.
á×ÔÏÒ ÂÕÄÅÔ ÂÌÁÇÏÄÁÒÅÎ ÚÁ ÐÏÌÕÞÅÎÉÅ ÓÏ×ÅÔÏ×, ÎÏ×ÙÈ ËÏÍÐÏÎÅÎÔ É ÐÒÁ×ÏË
ÓÕÝÅÓÔ×ÕÀÝÉÈ ÐÏÄÐÒÏÇÒÁÍÍ.
ëÏÍÍÅÒÞÅÓËÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ÂÉÂÌÉÏÔÅËÉ ×ÏÚÍÏÖÎÏ Ó ÐÒÉ×ÌÅÞÅÎÉÅÍ
Å\"Å Á×ÔÏÒÁ.
\section*{ðÒÉÞÉÎÙ ÓÏÚÄÁÎÉÑ É ÉÓÔÏÒÉÑ ÒÁÚ×ÉÔÉÑ}
äÌÑ ÌÀÄÅÊ, ËÏÔÏÒÙÅ ÈÏÔÑ ÂÙ ÏÄÉÎ ÒÁÚ ÐÉÓÁÌÉ ÐÒÏÇÒÁÍÍÕ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ
ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï× ÔÉÐÁ socket, connect, bind.... ÎÅ ÓÅËÒÅÔ, ÞÔÏ ÐÏÞÔÉ ×ÓÅÇÄÁ
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ×ÙÚÏ×Ï× ÆÕÎËÃÉÊ ÄÌÑ ÓÏÚÄÁÎÉÑ ÓÏÅÄÉÎÅÎÉÑ ÐÏ ÐÒÏÔÏËÏÌÕ TCP ÏÄÎÁ É ÔÁ ÖÅ. ïÔÓÀÄÁ ×ÏÚÎÉËÁÅÔ ÒÅÚÏÎÎÙÊ
×ÏÐÒÏÓ ``á ÐÏÞÅÍÕ ÓÏÂÓÔ×ÅÎÎÏ ÎÅ ÉÍÅÔØ ÂÉÂÌÉÏÔÅËÉ ÂÏÌÅÅ ×ÙÓÏËÏÇÏ
ÕÒÏ×ÎÑ, ÄÌÑ ÕÐÒÏÝÅÎÉÑ ÐÒÏÃÅÓÓÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ?''.
üÔÏ ÐÏÓÌÕÖÉÌÏ ÐÒÉÞÉÎÏÊ ÓÏÚÄÁÎÉÑ \ts{libftp}.
ðÏÓÌÅ ÒÅÁÌÉÚÁÃÉÉ ``ÎÉÖÎÅÊ'' ÞÁÓÔÉ ÂÉÂÌÉÏÔÅËÉ, ÂÙÌÉ ÓÏÚÄÁÎÙ
ÆÕÎËÃÉÉ ÂÏÌÅÅ ×ÙÓÏËÏÇÏ ÕÒÏ×ÎÑ, ÔÁËÉÅ ËÁË
ÐÅÒÅÄÁÞÁ ÃÅÌÏÇÏ ÆÁÊÌÁ ÉÌÉ ÞÔÅÎÉÅ ÓÐÉÓËÁ ÆÁÊÌÏ×. ðÒÉ ÎÁÐÉÓÁÎÉÉ
ÜÔÉÈ ÐÒÏÃÅÄÕÒ ×ÏÚÎÉËÌÁ ÎÅÏÂÈÏÄÉÍÏÓÔØ ÕÄÏÂÎÏÊ ÏÔÌÁÄËÉ ÓÂÏÊÎÙÈ ÓÌÕÞÁÅ×,
ÄÌÑ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÐÒÏÇÒÁÍÍÙ ÏÔ ÂÅÓËÏÎÅÞÎÏÇÏ ÞÉÓÌÁ ÕÓÌÏ×ÉÊ
(ÏÂÒÁÂÏÔËÁ ×ÏÚ×ÒÁÝÁÅÍÏÇÏ
ÂÉÂÌÉÏÔÅÞÎÙÍÉ ÆÕÎËÃÉÑÍÉ ÓÔÁÔÕÓÁ).
äÌÑ ÜÔÏÇÏ ÂÙÌ ÓÏÚÄÁÎ ÍÁËÒÏÓ \ts{EXIT}, ËÏÔÏÒÙÊ ÐÒÉ ×ÏÚ×ÒÁÔÅ ÆÕÎËÃÉÑÍÉ ÓÔÁÔÕÓÁ,
ÐÒÏ×ÅÒÑÅÔ ÅÇÏ, É × ÓÌÕÞÁÅ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ×ÙÚÙ×ÁÅÔ ÚÁÒÁÎÅÅ ÕÓÔÁÎÏ×ÌÅÎÎÙÅ
ÆÕÎËÃÉÉ.
ðÒÉ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ× ÐÏ ÓÅÔÉ, ËÏÔÏÒÁÑ × ÏÓÎÏ×ÎÏÍ ÓÏÓÔÏÉÔ ÉÚ dialup-slip'Ï×
(ÔÉÐÉÞÎÁÑ ÓÉÔÕÁÃÉÑ ÄÌÑ exUSSR)
ÞÁÓÔÏ ×ÏÚÎÉËÁÀÔ ÓÉÔÕÁÃÉÉ ``ÐÏÌÏÍËÉ ÓÅÔÉ'' É ÆÁÊÌ ÂÏÌØÛÏÇÏ ÒÁÚÍÅÒÁ ÐÅÒÅÄÁÔØ
ÓÔÁÎÏ×ÉÔÓÑ ÐÒÁËÔÉÞÅÓËÉ ÎÅ×ÏÚÍÏÖÎÏ\footnote{ëÏÎÅÞÎÏ ÍÏÖÎÏ ÐÅÒÉÏÄÉÞÅÓËÉ
ÚÁÐÕÓËÁÔØ ftp, É ÇÏ×ÏÒÉÔØ × ÎÅÍ ``reget filename''}, ÜÔÏ ÐÏÓÌÕÖÉÌÏ ÐÒÉÞÉÎÏÊ
ÎÁÐÉÓÁÎÉÑ ÐÒÏÇÒÁÍÍÙ \toindex{ftptry}\footnote{ðÒÏÇÒÁÍÍÁ \ts{ftptry} ÂÕÄÅÔ ÏÐÉÓÁÎÁ ÎÉÖÅ} Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÂÉÂÌÉÏÔÅËÉ libftp.
äÌÑ Å\"Å ÒÅÁÌÉÚÁÃÉÉ × ÂÉÂÌÉÏÔÅËÕ ÂÙÌÉ ÄÏÂÁ×ÌÅÎÙ ÆÕÎËÃÉÉ
\toindex{FtpRestorTimeout} É \toindex{FtpReretrTimeout},
ËÏÔÏÒÙÅ × ÏÔÌÉÞÉÉ ÏÔ ÆÕÎËÃÉÊ \ts{FtpStorTimeout} É \ts{FtpRetrTimeout}
ÎÅ ÐÅÒÅÄÁÀÔ Á ÄÏËÁÞÉ×ÁÀÔ ÆÁÊÌÙ.
\section*{îÅÄÏÓÔÁÔËÉ - ÄÌÑ ÉÓÐÒÁ×ÌÅÎÉÑ × ÓÌÅÄÕÀÝÉÈ ×ÅÒÓÉÑÈ}
\begin{itemize}
\item ÷ ÐÒÏÃÅÄÕÒÁÈ ÞÔÅÎÉÑ ÐÏÔÏËÁ ÉÚ socket'Ï× ÉÓÐÏÌØÚÕÅÔÓÑ ÍÅÈÁÎÉÚÍÙ
setjmp-longjmp, alarm+SIGALRM, SIGIO, ËÏÔÏÒÙÅ ÂÕÄÕÔ ÚÁÍÅÎÅÎÙ ÎÁ select.
üÔÏÔ ÎÅÄÏÓÔÁÔÏË (ÉÓÐÏÌØÚÏ×ÁÎÉÅ SIGALRM) ÐÒÏÑ×ÌÑÅÔÓÑ ÐÒÉ ÒÁÂÏÔÅ Ó X11
\footnote{ÔÁÍ ÔÏÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ alarm}
\item ðÅÒÅÍÅÎÎÁÑ FtpDataStart\footnote{ó ËÁËÏÇÏ ÂÁÊÔÁ ÐÅÒÅÄÁ×ÁÔØ ÆÁÊÌÙ} ÎÅ ÐÒÉÎÁÄÌÅÖÉÔ ÓÔÒÕËÔÕÒÅ FTP, Á Ñ×ÌÑÅÔÓÑ ÏÂÛÅÊ ÄÌÑ ×ÓÅÈ.
\item ïÔÓÕÔÓÔ×ÉÅ ÒÁÂÏÔÙ Ó \toindex{site-specific} ftpd ËÏÍÁÎÄÁÍÉ
\end{itemize}
\section*{éÄÅÉ ÄÌÑ ÄÁÌØÎÅÊÛÉÈ ÒÅÁÌÉÚÁÃÉÉ}
\begin{itemize}
\item òÁÚÒÁÂÏÔËÁ ÐÒÏÇÒÁÍÍÙ ÄÕÂÌÉÒÏ×ÁÎÉÑ ÄÅÒÅ×Á
ÄÉÒÅËÔÏÒÉÊ ÏÄÎÏÊ ÍÁÛÉÎÙ ÎÁ ÄÒÕÇÕÀ. \footnote{òÁÚÒÁÂÏÔËÁ ÉÄÅÔ × ÄÁÎÎÙÊ ÍÏÍÅÎÔ}
\item òÁÚÒÁÂÏÔËÁ ÉÎÔÅÒÆÅÊÓÁ × ÏËÒÕÖÅÎÉÉ X-window's ÄÌÑ ÍÁÎÉÐÕÌÑÃÉÉ
ÆÁÊÌÁÍÉ ÎÁÈÏÄÑÝÉÈÓÑ ÎÁ ÒÁÚÎÙÈ ÍÁÛÉÎÁÈ Ó ×ÏÚÍÏÖÎÏÓÔØÀ ÎÅÉÎÔÅÒÁËÔÉ×ÎÏÊ ÐÅÒÅÄÁÞÉ
(ÄÌÑ ÍÅÄÌÅÎÎÙÈ ÓÅÔÅÊ)
\item óÏÚÄÁÎÉÅ ÍÕÌØÔÉÐÌÅËÓÉÒÕÀÝÅÇÏ ÁÐÐÁÒÁÔÁ ÄÌÑ ÏÄÎÏ×ÒÅÍÅÎÎÏÊ
ÏÂÒÁÂÏÔËÉ ÎÅÓËÏÌØËÉÈ ÐÏÔÏËÏ× ÄÁÎÎÙÈ.
\item óÏÚÄÁÎÉÅ ÏÂßÅËÔÁ FTP ÄÌÑ C++
\end{itemize}
\section*{÷×ÅÄÅÎÉÅ}
âÉÂÌÉÏÔÅËÁ ``libftp'' ÐÒÅÄÎÁÚÎÁÞÅÎÁ ÄÌÑ ÎÁÐÉÓÁÎÉÑ ÐÒÉËÌÁÄÎÙÈ ÐÒÏÇÒÁÍÍ × ËÏÔÏÒÙÈ
ÓÕÝÅÓÔ×ÕÅÔ ÎÅÏÂÈÏÄÉÍÏÓÔØ ÐÅÒÅÄÁ×ÁÔØ ÆÁÊÌÙ ÐÏ ÓÅÔÉ TCP/IP. OÎÁ
Ñ×ÌÑÅÔÓÑ ÎÁÂÏÒÏÍ ÆÕÎËÃÉÊ ÎÁÞÉÎÁÑ ÏÔ ÐÒÉÍÉÔÉ×ÎÙÈ ÆÕÎËÃÉÊ, ÔÁËÉÈ ËÁË ÏÔËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ ÐÏ ÐÒÏÔÏËÏÌÕ FTP ÎÁ ÕÄÁÌÅÎÎÕÀ ÍÁÛÉÎÕ, ÄÏ ÆÕÎËÃÉÊ ×ÙÓÏËÏÇÏ ÕÒÏ×ÎÑ, ËÏÔÏÒÙÅ ÐÅÒÅÄÁÀÔ
ÆÁÊÌÙ ÓÁÍÉ ÐÒÏÉÚ×ÏÄÑ ÓÏÅÄÉÎÅÎÉÅ/ÒÁÚßÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ.
÷ÓÅ ÆÕÎËÃÉÉ ÉÍÅÀÔ ÐÒÏÔÏÔÉÐÙ × ÆÁÊÌÅ \toindex{FtpLibrary.h},
ËÏÔÏÒÙÊ ÄÏÌÖÅÎ ÂÙÔØ ÐÏÍÅÝÅÎ
× ËÁÔÁÌÏÇ ÓÔÁÎÄÁÒÔÎÙÈ ÚÁÇÏÌÏ×ËÏ×\footnote{îÁÐÒÉÍÅÒ /usr/include}.
üÔÉ ÐÒÏÔÏÔÉÐÙ ÐÒÁËÔÉÞÅÓËÉ ÐÏÌÎÏÓÔØÀ ÏÐÉÓÙ×ÁÀÔ
ÎÁÚÎÁÞÅÎÉÅ ÆÕÎËÃÉÊ É ÉÈ ÁÒÇÕÍÅÎÔÙ, ÎÏ ÔÅÍ ÎÅ ÍÅÎÅÅ ÎÅÏÂÈÏÄÉÍÏ ÓËÁÚÁÔØ ÏÂ ÏÂÝÅÊ ÉÄÅÏÌÏÇÉÉ
ÐÏÓÔÒÏÅÎÉÑ ÂÉÂÌÉÏÔÅËÉ É ÅÅ ËÏÍÐÏÎÅÎÔ.
÷ÓÑ ÂÉÂÌÉÏÔÅËÁ, Ñ×ÌÑÑÓØ ËÌÉÅÎÔÏÍ, ÉÓÐÏÌØÚÕÅÔ
Ó ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÊ ÓÔÏÒÏÎÙ ÓÏÅÄÉÎÅÎÉÑ ÓÔÁÎÄÁÒÔÎÙÊ \toindex{FTPD}
\footnote{äÌÑ ÒÁÂÏÔÙ ÆÕÎËÃÉÊ FtpRertrTimeout, FtpRestorTimeout ÎÅÏÂÈÏÄÉÍÏ
ÞÔÏÂÙ ÓÅÒ×ÅÒ ÏÔÒÁÂÁÔÙ×ÁÌ ËÏÍÁÎÄÕ REST}.
÷Ï ÍÎÏÇÉÈ ÏÐÅÒÁÃÉÏÎÎÙÈ ÓÉÓÔÅÍÁÈ ÓÕÝÅÓÔ×ÕÅÔ ÐÒÏÂÌÅÍÁ ÏÂÒÁÂÏÔËÉ
ÒÁÚÎÏÇÏ ÒÏÄÁ ÏÛÉÂÏË, × ÔÏÍ ÞÉÓÌÅ ÏÛÉÂÏË
××ÏÄÁ/×Ù×ÏÄÁ, × ÄÁÎÎÏÍ ÉÎÓÔÒÕÍÅÎÔÁÒÉÉ ÉÓÐÏÌØÚÏ×ÁÎ ÅÄÉÎÙÊ ÍÅÈÁÎÉÚÍ ×ÏÚ×ÒÁÔÁ
ÒÅÚÕÌØÔÁÔÁ ÒÁÂÏÔÙ ÌÀÂÏÊ ÆÕÎËÃÉÉ (ÍÁËÒÏËÏÍÁÎÄÁ \ts{EXIT}, ÏÐÒÅÄÅÌÅÎÎÁÑ × \ts{FtpLibrary.h})
ËÏÔÏÒÙÊ ÐÏÚ×ÏÌÑÅÔ
ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ ÕÓÔÁÎÏ×É× Ó×ÏÉ ÉÌÉ ÓÔÁÎÄÁÒÔÎÙÅ ÆÕÎËÃÉÉ ÏÂÒÁÂÏÔËÉ
ÏÛÉÂÏË É ÆÕÎËÃÉÉ
ÏÔÌÁÄËÉ, ÐÉÓÁÔØ ÓÍÙÓÌÏ×ÕÀ ÞÁÓÔØ ÐÒÏÇÒÁÍÍÙ, ÄÕÍÁÑ ÔÏÌØËÏ Ï ÅÅ ÍÅÔÏÄÅ ÒÁÂÏÔÙ
× ÉÄÅÁÌØÎÙÈ ÕÓÌÏ×ÉÑÈ. ÷ ÆÕÎËÃÉÑÈ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ × ÏÂÅ ÓÔÏÒÏÎÙ ÓÕÝÅÓÔ×ÕÅÔ
×ÏÚÍÏÖÎÏÓÔØ ÕÓÔÁÎÏ×ÉÔØ ÍÁËÓÉÍÁÌØÎÏÅ ×ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÐÏÔÏËÁ ÄÁÎÎÙÈ, ÐÏ ÉÓÔÅÞÅÎÉÉ ËÏÔÏÒÏÇÏ, ×ÏÚÍÏÖÎÏ ×ÙÚ×ÁÔØ ÏÐÒÅÄÅÌÅÎÎÕÀ ÐÒÏÃÅÄÕÒÕ.
ðÒÉ ÒÁÂÏÔÅ Ó ÂÉÂÌÉÏÔÅËÏÊ, ÐÅÒ×ÏÊ ×ÓÅÇÄÁ ×ÙÚÙ×ÁÅÔÓÑ ÐÒÏÃÅÄÕÒÁ
ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ\footnote{úÁ ÉÓËÌÀÞÅÎÉÅÍ FtplibDebug} (\ts{FtpLogin} ÉÌÉ \ts{FtpConnect})
ËÏÔÏÒÁÑ ×ÏÚ×ÒÁÝÁÅÔ ÕËÁÚÁÔÅÌØ ÎÁ ×ÎÏ×Ø ÓÏÚÄÁÎÎÕÀ ÓÔÒÕËÔÕÒÕ ÄÁÎÎÙÈ (ÔÉÐÁ \ts{FTP})
Ï ÓÏÅÄÉÎÅÎÉÉ Ó ÓÅÒ×ÅÒÏÍ.
\section{óÔÒÕËÔÕÒÁ ÄÁÎÎÙÈ FTP}
\tc{int \toindex{sock}}{--- ÄÅÓËÒÉÐÔÏÒ ËÁÎÁÌÁ ÐÅÒÅÄÁÞÉ ËÏÍÁÎÄ ÎÁ ÓÅÒ×ÅÒ;}
\tc{FILE *\toindex{data}}{--- ÏÐÉÓÁÎÉÅ ËÁÎÁÌÁ ÄÌÑ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ ÎÁ ÓÅÒ×ÅÒ;}
\tc{int \toindex{errno}}{ --- ÚÎÁÞÅÎÉÅ ÐÏÓÌÅÄÎÅÇÏ ×ÏÚ×ÒÁÝÅÎÎÏÇÏ ÂÉÂÌÉÏÔÅËÏÊ ÚÎÁÞÅÎÉÑ.
÷ ÓÌÕÞÁÅ ÅÓÌÉ ÏÎÏ ÏÔÒÉÃÁÔÅÌØÎÏ ÉÌÉ ÒÁ×ÎÏ ÎÕÌÀ,
ÔÏ ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ;}
\tc{char \toindex{mode}}{--- ÔÉÐ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ;}
\tc{int ch}{--- ×ÓÐÏÍÏÇÁÔÅÌØÎÁÑ ÐÅÒÅÍÅÎÎÁÑ ÉÓÐÏÌØÚÕÅÍÁÑ ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ
ÐÏÔÏËÁ × ÒÅÖÉÍÅ ÐÅÒÅÄÁÞÉ ÔÅËÓÔÏ×ÙÈ ÆÁÊÌÏ×;}
\tc{STATUS (*func)()}{--- ÁÄÒÅÓ ÆÕÎËÃÉÉ, ËÏÔÏÒÁÑ ×ÙÚÙ×ÁÅÔÓÑ × ÓÌÕÞÁÅ ËÏÇÄÁ ÏÔ ÓÅÒ×ÅÒÁ
ÐÏÌÕÞÅÎ ÏÔ×ÅÔ Ï ÏÛÉÂËÅ;}
\tc{STATUS (*debug)()}{--- ÁÄÒÅÓ ÆÕÎËÃÉÉ, ËÏÔÏÒÁÑ ×ÙÚÙ×ÁÅÔÓÑ ÄÌÑ ÏÔÌÁÄËÉ ÐÒÏÔÏËÏÌÁ;}
\tc{STATUS (*IO)()}{--- ÆÕÎËÃÉÑ ×ÙÚÙ×ÁÅÍÁÑ × ÓÌÕÞÁÅ ÐÏÔÅÒÉ Ó×ÑÚÉ Ó ÓÅÒ×ÅÒÏÍ, ÉÌÉ
ÐÏ ÉÓÔÅÞÅÎÉÀ ÍÁËÓÉÍÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ ÎÁ ÐÒÉÅÍ/ÐÅÒÅÄÁÞÕ ÏÄÎÏÇÏ
ÓÉÍ×ÏÌÁ.}
\section{ ðÒÏÃÅÄÕÒÙ ÓÏÅÄÉÎÅÎÉÑ/ÒÁÚßÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ}
\ttt{STATUS \toindex{FtpConnect}(FTP~**, char~*hostname
\footnote{éÍÑ ÍÁÛÉÎÙ ÍÏÖÅÔ ÂÙÔØ ËÁË ÓÉÍ×ÏÌØÎÏÅ ÔÁË É ÃÉÆÒÏ×ÏÅ, ÎÁÐÒÉÍÅÒ
\ts{dxcern.cern.ch} ÉÌÉ \ts{128.141.201.96}}
)}
{
óÏÚÄÁÅÔ ËÁÎÁÌ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ, ÎÁÈÏÄÑÝÉÍÓÑ ÎÁ ÍÁÛÉÎÅ hostname,
É ÓÏÚÄÁÅÔ ÓÔÒÕËÔÕÒÕ FTP, ×ÏÚ×ÒÁÝÁÑ ÎÁ ÎÅÅ ÕËÁÚÁÔÅÌØ. åÓÌÉ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ
ÂÙÌÁ ×ÙÐÏÌÎÅÎÁ ÐÒÏÃÅÄÕÒÁ \toindex{FtplibDebug}(1),
ÔÏ ÄÏ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ ×ËÌÀÞÁÅÔ ÓÔÁÎÄÁÒÔÎÙÅ
ÐÏÄÐÒÏÇÒÁÍÍÙ ÏÂÒÁÂÏÔËÉ ÏÛÉÂÏË \toindex{FtpDebugDebug}, \toindex{FtpDebugError},
\toindex{FtpDebugIO} \look{debug}.
}
\ttt{STATUS \toindex{FtpUser}(FTP~*, char~*user)}
{
ðÏÓÙÌÁÅÔ ÓÅÒ×ÅÒÕ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ. òÁÎÅÅ ÄÏÌÖÎÏ ÂÙÌÏ ÂÙÔØ ÐÒÏÉÚ×ÅÄÅÎÏ ÓÏÅÄÉÎÅÎÉÅ
}
\ttt{STATUS \toindex{FtpPassword}(FTP~*, char~*password)}
{
ðÏÓÙÌÁÅÔ ÓÅÒ×ÅÒÕ ÐÁÒÏÌØ. òÁÎÅÅ ÄÏÌÖÎÁ ÂÙÌÁ ÂÙÔØ ×ÙÐÏÌÎÅÎÁ ÐÒÏÃÅÄÕÒÁ \ts{FtpUser}
}\ttt{STATUS \toindex{FtpAccount}(FTP~*, char~*acct)}
{
ðÏÓÙÌÁÅÔ ÓÅÒ×ÅÒÕ ÉÍÑ account'a üÔÁ ÆÕÎËÃÉÑ ÓÄÅÌÁÎÁ ÄÌÑ ÐÏÌÎÏÇÏ ÓÏÏÔ×ÅÔÓÔ×ÉÑ
ÂÉÂÌÉÏÔÅËÉ ÐÒÏÔÏËÏÌÕ \ts{FTP}, ÎÏ Ô.Ë. ÍÁÌÏ ÔÁËÉÈ ÏÐÅÒÁÃÉÏÎÎÙÈ ÓÉÓÔÅÍ × ËÏÔÏÒÙÈ ÎÅÏÂÈÏÄÉÍ ÜÔÏÔ
ÁÔÒÉÂÕÔ ÐÏÌØÚÏ×ÁÔÅÌÑ ÔÏ ÆÕÎËÃÉÑ \ts{FtpAccount} × ÏÂÝÅÍ ÔÏ ÎÅ ÎÕÖÎÁ.
ðÒÅÄ×ÁÒÉÔÅÌØÎÏ ÄÏÌÖÎÁ ÂÙÌÁ ÂÙÔØ ×ÙÐÏÌÎÅÎÁ ÐÒÏÃÅÄÕÒÁ
\ts{FtpUser}.
}
\ttt{
STATUS \toindex{FtpLogin}(FTP~**, char~*hostname, char~*user, char~*password, char~*account)}
{
ðÏÓÌÅÄÏ×ÁÔÅÌØÎÏ ×ÙÐÏÌÎÑÅÔ ÐÒÏÃÅÄÕÒÙ \ts{FtpConnect}, \ts{FtpUser}, \ts{FtpPassword}, \ts{FtpAccount}
(ÅÓÌÉ ÐÁÒÁÍÅÔÒ account ÒÁ×ÅÎ NULL, ÔÏ ÐÒÏÃÅÄÕÒÁ FtpAccount ÎÅ ×ÙÚÙ×ÁÅÔÓÑ)}
\ttt{STATUS \toindex{FtpBye}(FTP~*)}
{ úÁ×ÅÒÛÁÅÔ ÓÅÁÎÓ ÒÁÂÏÔÙ Ó ÓÅÒ×ÅÒÏÍ \footnote{ëÁË ×ÉÄÎÏ ÉÚ ÏÐÉÓÁÎÉÑ ÐÒÏÃÅÄÕÒ ÓÏÅÄÉÎÅÎÉÑ/ÒÁÚßÅÄÉÎÅÎÉÑ ÉÚ ÏÄÎÏÊ ÐÒÏÇÒÁÍÍÙ ÍÏÖÎÏ ÏÄÎÏ×ÒÅÍÅÎÎÏ ÓÏÅÄÉÎÑÔÓÑ Ó ÎÅÓËÏÌØËÉÍÉ ÓÅÒ×ÅÒÁÍÉ} }
\section{ðÒÏÃÅÄÕÒÙ ÏÔÌÁÄËÉ ÐÒÏÇÒÁÍÍÙ} \label{debug}
óÕÝÅÓÔ×ÕÅÔ ×ÏÚÍÏÖÎÏÓÔØ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ ÏÐÒÅÄÅÌÉÔØ ÔÒÉ
ÐÒÏÃÅÄÕÒÙ:~\footnote{åÓÌÉ × ÌÀÂÕÀ ÉÚ ÆÕÎËÃÉÊ, ÏÐÉÓÁÎÎÙÈ ÎÉÖÅ, ×ÍÅÓÔÏ ÐÁÒÁÍÅÔÒÁ function ÐÅÒÅÄÁÔØ ÚÎÁÞÅÎÉÅ \ts{NULL}, ÔÏ ÜÔÏ ÂÕÄÅÔ ÏÚÎÁÞÁÔØ
ÏÔËÌÀÞÅÎÉÅ ÏÔÌÁÄËÉ. ðÒÉ ÏÔËÌÀÞÅÎÎÏÊ ÏÔÌÁÄËÅ ÒÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÍÏÖÎÏ
ÏÐÒÅÄÅÌÉÔØ ÉÌÉ ÖÅ ÐÏ ×ÏÚ×ÒÁÝÁÅÍÏÍÕ ÆÕÎËÃÉÅÊ ÚÎÁÞÅÎÉÀ (åÓÌÉ ÏÎÁ ÔÉÐÁ \toindex{STATUS}) ÉÌÉ
ÐÏ ÐÅÒÅÍÅÎÎÏÊ errno × ÓÔÒÕËÔÕÒÅ \ts{FTP}}
\ttt{\toindex{FtpSetDebugHandler}(FTP *,function)}
{ õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÐÒÏÃÅÄÕÒÕ ÏÔÌÁÄËÉ ÐÒÏÔÏËÏÌÁ Ó ÕÄÁÌÅÎÎÙÍ ÓÅÒ×ÅÒÏÍ.
åÓÌÉ ÅÅ ÏÐÒÅÄÅÌÉÔØ, ÔÏ ÏÎÁ ×ÓÅÇÄÁ ÂÕÄÅÔ ×ÙÚÙ×ÁÅÔÓÑ ÉÚ ÓÔÁÎÄÁÒÔÎÏÊ ÆÕÎËÃÉÉ
ÐÒÉÅÍÁ/ÐÅÒÅÄÁÞÉ ÓÏÏÂÝÅÎÉÑ Ó/ÎÁ ÓÅÒ×ÅÒÁ. äÏÌÖÎÁ ÄÅÌÁÔØ ×ÏÚ×ÒÁÔ, ÎÏ × ÐÒÉÎÃÉÐÅ
ÉÍÅÅÔ ÐÏÌÎÏÅ ÐÒÁ×Ï ÐÒÅÒÙ×ÁÔØ ×ÙÐÏÌÎÅÎÉÅ ÐÒÏÇÒÁÍÍÙ × ÓÌÕÞÁÅ ÎÅÏÂÈÏÄÉÍÏÓÔÉ.
}
\ttt{\toindex{FtpSetErrorHandler}(FTP *,function)}
{
ïÐÒÅÄÅÌÑÅÔ ÆÕÎËÃÉÀ ÏÂÒÁÂÏÔËÉ ÏÛÉÂÏË.
ðÏÓÌÅ ÅÅ ÏÐÒÅÄÅÌÅÎÉÑ, × ÓÌÕÞÁÅ ×ÏÚ×ÒÁÝÅÎÉÑ ÓÅÒ×ÅÒÏÍ
ÎÅÕÄÏ×ÌÅÔ×ÏÒÉÔÅÌØÎÏÇÏ ÏÔ×ÅÔÁ, ÂÕÄÅÔ ×ÙÚÙ×ÁÔØÓÑ ÕËÁÚÁÎÎÁÑ ÆÕÎËÃÉÑ.
ðÒÉ ÜÔÏÍ ÚÎÁË Õ ËÏÄÁ ÏÛÉÂËÉ ÍÅÎÑÅÔÓÑ ÎÁ '-', É Ô.Ï. ÒÅÚÕÌØÔÁÔ
ÓÔÁÎÏ×ÉÔÓÑ ÍÅÎØÛÅ ÎÕÌÑ.
}
\ttt{\toindex{FtpSetIOHandler}(FTP *,function)}
{
ïÐÒÅÄÅÌÅÎÉÅ ÆÕÎËÃÉÉ ÏÂÒÁÂÏÔËÉ ÏÛÉÂÏË ××ÏÄÁ/×Ù×ÏÄÁ.
ðÒÉ ÐÅÒÅÄÁÞÅ ÄÁÎÎÙÈ ÉÌÉ ËÏÍÁÎÄ ÎÁ ÓÅÒ×ÅÒ, ÍÏÖÅÔ ×ÏÚÎÉËÎÕÔØ ÓÉÔÕÁÃÉÑ ËÏÇÄÁ
Ó×ÑÚØ Ó ÓÅÒ×ÅÒÏÍ ÂÕÄÅÔ ÐÏÔÅÒÑÎÁ (ÓÀÄÁ ×ÈÏÄÑÔ ÐÒÁËÔÉÞÅÓËÉ ×ÓÅ ÓÂÏÉ ÓÅÔÉ
É ÓÂÏÉ ÐÒÉ ÒÁÂÏÔÅ ÓÅÒ×ÅÒÁ ÎÁ ÕÄÁÌÅÎÎÏÊ ÍÁÛÉÎÅ) ÐÒÉ ÜÔÏÍ ÂÕÄÅÔ ×ÙÚ×ÁÎÁ
ÕËÁÚÁÎÎÁÑ ÆÕÎËÃÉÑ. ïÎÁ ×ÙÚÙ×ÁÅÔÓÑ ÔÁË ÖÅ ÐÏ ÉÓÔÅÞÅÎÉÀ
ÍÁËÓÉÍÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ ÐÒÉ ÏÖÉÄÁÎÉÉ ÏÞÅÒÅÄÎÏÇÏ ÓÉÍ×ÏÌÁ Ó ÓÅÒ×ÅÒÁ ×Ï ×ÒÅÍÑ
ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ. (\toindex{timeout})
}
\ttt{\toindex{FtpDebug}(FTP *)}
{
ðÏÄËÌÀÞÅÎÉÅ ÓÔÁÎÄÁÒÔÎÙÈ ÆÕÎËÃÉÊ ÏÔÌÁÄËÉ ÐÒÏÔÏËÏÌÁ ÔÁËÉÈ ËÁË
\tc{\toindex{FtpDebugError}}{--- ÐÅÞÁÔÁÅÔ ÓÔÒÏËÕ ×ÏÚ×ÒÁÝÅÎÎÕÀ ÓÅÒ×ÅÒÏÍ É ÐÒÅÒÙ×ÁÅÔ ÐÒÏÇÒÁÍÍÕ;}
\tc{\toindex{FtpDebugDebug}}{--- ÐÅÞÁÔÁÅÔ ÓÔÒÏËÕ ×ÏÚ×ÒÁÝÅÎÎÕÀ ÓÅÒ×ÅÒÏÍ;}
\tc{\toindex{FtpDebugIO}}{--- ÐÅÞÁÔÁÅÔ ÓÔÒÏËÕ \ts{strerror(errno)} É ÐÒÅÒÙ×ÁÅÔ ÐÒÏÇÒÁÍÍÕ.}
}
÷Ï ×ÓÅ ÐÒÏÃÅÄÕÒÙ ÐÅÒÅÄÁÀÔÓÑ ÔÒÉ ÁÒÇÕÍÅÎÔÁ:\\
1. óÔÒÕËÔÕÒÁ \ts{FTP};\\
2. úÎÁÞÅÎÉÅ ×ÏÚ×ÒÁÝÅÎÎÏÅ ÆÕÎËÃÉÅÊ, ÅÓÌÉ ÏÎÏ ÍÅÎØÛÅ ÅÄÉÎÉÃÙ ÔÏ ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ;\\
3. óÉÍ×ÏÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ (char *).
\ttt{\toindex{FtplibDebug}(\ts{on} or \ts{off})}
{ ÷ËÌÀÞÁÅÔ/×ÙËÌÀÞÁÅÔ Á×ÔÏÍÁÔÉÞÅÓËÏÅ ×ËÌÀÞÅÎÉÅ ×ÓÅÈ ×ÉÄÏ× ÏÔÌÁÄËÉ ÐÒÉ
×ÙÐÏÌÎÅÎÉÉ ÆÕÎËÃÉÉ \ts{FtpConnect(FtpLogin)}}
\section{ðÒÏÃÅÄÕÒÙ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ Ó ÓÅÒ×ÅÒÁ}
\ttt{STATUS \toindex{FtpRetrTimeout}(FTP~*, char~*command, char~*inp, char~*out
\footnote{åÓÌÉ ÉÍÑ ÌÏËÁÌØÎÏÇÏ ÆÁÊÌÁ \ts{out} ÓÏ×ÐÁÄÅÔ ÓÏ ÓÔÒÏËÁÍÉ \ts{*STDIN*}, \ts{*STDOUT*}, \ts{*STDERR*} ÔÏ
×ÍÅÓÔÏ ÏÔËÒÙÔÉÑ ÎÏ×ÏÇÏ ÆÁÊÌÁ ÐÒÏÉÚÏÊÄÅÔ ÄÕÂÌÉÒÏ×ÁÎÉÅ ÐÏÔÏËÁ ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ Ó ËÁÎÁÌÁÍÉ
\ts{stdin}, \ts{stdout}, \ts{stderr} (ïÂÒÁÂÏÔËÕ ÄÁÎÎÏÊ ÓÐÅÃÉÆÉËÁÃÉÉ ÆÁÊÌÏ×
ÐÒÏÉÚ×ÏÄÉÔ ÆÕÎËÃÉÑ \toindex{Ftpfopen}, ËÏÔÏÒÁÑ ÐÒÉ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ ÓÁÍÏÓÔÏÑÔÅÌØÎÏ, Ó ÔÁËÉÍÉ ÖÅ ÁÒÇÕÍÅÎÔÁÍÉ, ËÁË ÓÉÓÔÅÍÎÁÑ ÆÕÎËÃÉÑ fopen)},
long~time)}
{
ðÏÓÙÌÁÅÔ ËÏÍÁÎÄÕ \ts{command} ÎÁ ÓÅÒ×ÅÒ, ÐÒÉÞÅÍ ÅÓÌÉ × ËÏÍÁÎÄÅ
×ÓÔÒÅÔÉÔÓÑ ÐÏÄÓÔÒÏËÁ \ps, ÔÏ ÎÁ ÅÅ ÍÅÓÔÏ ÂÕÄÅÔ ÐÏÄÓÔÁ×ÌÅÎÁ ÓÔÒÏËÁ \ts{inp}.
óÏÚÄÁÅÔ ËÁÎÁÌ ÄÌÑ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ, É ÔÏ ÞÔÏ ÂÕÄÅÔ ÐÅÒÅÄÁÎÏ
ÓÅÒ×ÅÒÏÍ × ÜÔÏÔ ËÁÎÁÌ ÂÕÄÅÔ ÓËÏÐÉÒÏ×ÁÎÏ × ÌÏËÁÌØÎÙÊ ÆÁÊÌ \ts{out}.
åÓÌÉ × ÔÅÞÅÎÉÉ ×ÒÅÍÅÎÉ \ts{time}(× ÓÅËÕÎÄÁÈ)
Ó ÓÅÒ×ÅÒÁ ÎÅ ÐÒÉÄÅÔ ÎÅ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ, ÔÏ
ÆÕÎËÃÉÑ ×ÏÚ×ÒÁÔÉÔ ÓÔÁÔÕÓ ËÏÔÏÒÙÊ ÂÕÄÅÔ ÏÚÎÁÞÁÔØ ÏÛÉÂËÕ ××ÏÄÁ/×Ù×ÏÄÁ.
÷ ÓÌÕÞÁÅ ËÏÇÄÁ \toindex{timeout}=0,
ÍÁËÓÉÍÁÌØÎÏÅ ×ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÎÁ ÕÒÏ×ÎÅ ÂÉÂÌÉÏÔÅËÉ ÒÁ×ÎÏ
ÂÅÓËÏÎÅÞÎÏÓÔÉ, × ÜÔÏÍ ÓÌÕÞÁÅ ÏÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ ÍÏÖÅÔ ×ÏÚÎÉËÎÕÔØ
ÐÏ ÉÓÔÅÞÅÎÉÀ timeout'a × ÑÄÒÅ TCP/IP (ÉÌÉ ÓÉÓÔÅÍÙ). ôÁËÉÍ ÏÂÒÁÚÏÍ, ÅÓÌÉ \ts{timeout} ×
ÐÁÒÁÍÅÔÒÅ time ÂÏÌØÛÅ ÞÅÍ timeout × ÑÄÒÅ TCP/IP, ÏÎ ÎÉËÏÇÄÁ
ÎÅ ÐÒÅÒ×ÅÔ ÐÅÒÅÄÁÞÕ ÄÁÎÎÙÈ. \footnote{\ts{Timeout} × ÑÄÒÁÈ ÒÁÚÎÙÈ TCP/IP(ÓÉÓÔÅÍÁÈ) ÒÁÚÎÙÊ}
}
\ttt{STATUS \toindex{FtpReretrTimeout}(FTP~*, char~*command, char~*inp, char~*out, long~time)}
{
ðÒÏÉÚ×ÏÄÉÔ Ôo ÖÅ ÓaÍÏÅ ÄÅÊÓÔ×ÉÅ ÞÔÏ É ÆÕÎËÃÉÑ \ts{FtpRetrTimeout}, ÚÁ
ÉÓËÌÀÞÅÎÉÅ ÔÏÇÏ, ÞÔÏ ÐÅÒÅÄ ÐÅÒÅÄÁÞÅÊ ÐÒÏ×ÅÒÑÅÔÓÑ ÆÁÊÌ \ts{out}, É × ÓÌÕÞÁÅ
ÅÇÏ ÓÕÝÅÓÔ×Ï×ÁÎÉÑ ÐÅÒÅÄÁÞÁ Ó ÓÅÒ×ÅÒÁ ÎÁÞÉÎÁÅÔÓÑ Ó ÂÁÊÔÁ Ó ÎÏÍÅÒÏÍ \ts{<ÒÁÚÍÅÒ ÆÁÊÌÁ out>}+1.}
\ttt{\toindex{FtpRetr}(FTP~*, char~*command, char~*inp, char~*out)}
{
÷ÙÚÙ×ÁÅÔ ÔÏ ÖÅ ÄÅÊÓÔ×ÉÅ ÞÔÏ É FtpRetrTimeout, ÎÏ Ó ×ÙËÌÀÞÅÎÎÙÍ timeout'ÏÍ.
}
\ttt{\toindex{FtpGetTimeout}(FTP~*, char~*inp, char~*out, long~time)}
{
ðÅÒÅÄÁÅÔ Ó ÓÅÒ×ÅÒÁ ÆÁÊÌ \ts{inp} × ÌÏËÁÌØÎÙÊ ÆÁÊÌ \ts{out}, ÐÒÉ ÜÔÏÍ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ
\ts{timeout=time}.
}
\ttt{\toindex{FtpGet}(FTP~*, char~*in, char~*out)}
{
÷ÙÚÙ×ÁÅÔ ÆÕÎËÃÉÀ \ts{FtpGetTimeout} Ó ×ÙËÌÀÞÅÎÎÙÍ ÍÁËÓÉÍÁÌØÎÙÍ ×ÒÅÍÅÎÅÍ
ÏÖÉÄÁÎÉÑ ÄÁÎÎÙÈ}
\ttt{\toindex{FtpDirectory}(FTP~*, char~*pat\footnote{üÔÏ ÐÅÒ×ÙÊ ÁÒÇÕÍÅÎÔ ÄÌÑ ËÏÍÁÎÄÙ ls(dir)}, char~*out)}
{
ðÅÒÅÄÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÄÉÒÅËÔÏÒÉÉ, ÏÐÉÓÁÎÎÏÇÏ ÐÁÒÁÍÅÔÒÏÍ \ts{pat}, Ó ÓÅÒ×ÅÒÁ × ÆÁÊÌ \ts{out}.
}
\ttt{\toindex{FtpDir}(FTP~*, char~*out)}
{
ðÅÒÅÄÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÔÅËÕÝÅÊ ÄÉÒÅËÔÏÒÉÉ Ó ÓÅÒ×ÅÒÁ × ÆÁÊÌ \ts{out}.
}
\section{ðÒÏÃÅÄÕÒÙ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ ÎÁ ÓÅÒ×ÅÒ}
\ttt{\toindex{FtpStorTimeout}(FTP~*, char~*command, char~*inp, char~*out, long~time)}
{
ðÅÒÅÄÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÌÏËÁÌØÎÏÇÏ ÆÁÊÌÁ \ts{inp} ÎÁ ÓÅÒ×ÅÒ, ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ ÐÏÓÌÁ×
ÅÍÕ ËÏÍÁÎÄÕ, ÓÏÓÔÁ×ÌÅÎÎÕÀ ÉÚ \ts{command} É \ts{out}. ðÁÒÁÍÅÔÒ \ts{time}, ÚÁÄÁÅÔ ÍÁËÓÉÍÁÌØÎÏÅ
×ÒÅÍÑ ÎÁ ÏÔÐÒÁ×ËÕ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ.
}
\ttt{STATUS \toindex{FtpRestorTimeout}(FTP~*, char~*command, char~*inp, char~*out, long~time)}
{
ðÒÏÉÚ×ÏÄÉÔ Ôo ÖÅ ÓaÍÏÅ ÄÅÊÓÔ×ÉÅ ÞÔÏ É ÆÕÎËÃÉÑ \ts{FtpStorTimeout}, ÚÁ
ÉÓËÌÀÞÅÎÉÅ ÔÏÇÏ, ÞÔÏ ÐÅÒÅÄ ÐÅÒÅÄÁÞÅÊ ÐÒÏ×ÅÒÑÅÔÓÑ ÆÁÊÌ \ts{out} ÎÁ ÓÅÒ×ÅÒÅ,
É, × ÓÌÕÞÁÅ ÅÇÏ ÓÕÝÅÓÔ×Ï×ÁÎÉÑ, ÐÅÒÅÄÁÞÁ ÎÁ ÓÅÒ×ÅÒ ÎÁÞÉÎÁÅÔÓÑ Ó ÂÁÊÔÁ Ó ÎÏÍÅÒÏÍ \ts{<ÒÁÚÍÅÒ ÆÁÊÌÁ out>}+1.}
\ttt{\toindex{FtpStor}(FTP~*, char~*command, char~*inp, char*~out)}
{
÷ÙÚÙ×ÁÅÔ ÚÁÐÕÓË ÐÒÏÃÅÄÕÒÙ \ts{FtpStorTimeout} Ó ÐÁÒÁÍÅÔÒÏÍ \ts{time=0}.
}
\ttt{\toindex{FtpPutTimeout}(FTP~*, char~*in, char~*out, long~time)}
{ ðÅÒÅÄÁÅÔ ÌÏËÁÌØÎÙÊ ÆÁÊÌ \ts{in} ÎÁ ÓÅÒ×ÅÒ × ÆÁÊÌ Ó ÉÍÅÎÅÍ \ts{out}, ÐÒÉ ÜÔÏÍ \ts{timeout=time}}
\ttt{\toindex{FtpPut}(FTP~*, char~*in, char~*out)}
{
÷ÙÚÙ×ÁÅÔ ÐÒÏÃÅÄÕÒÕ \ts{FtpPutTimeout} Ó ÐÁÒÁÍÅÔÒÏÍ \ts{time=0}}
\section{ðÒÏÃÅÄÕÒÙ ÞÔÅÎÉÑ/ÚÁÐÉÓÉ × ÆÁÊÌ ÎÁ ÓÅÒ×ÅÒÅ}
äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÒÏÉÚ×ÏÄÉÔØ ××ÏÄ/×Ù×ÏÄ ÉÚ/× ÆÁÊÌÙ ËÏÔÏÒÙÅ ÎÁÈÏÄÑÔÓÑ ÎÁ ÓÅÒ×ÅÒÅ,
ÐÒÉÞÅÍ ÎÅ ËÏÐÉÒÕÑ ÉÈ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ × ÌÏËÁÌØÎÙÊ ÆÁÊÌ, Á ÒÁÂÏÔÁÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ Ó ÏÒÉÇÉÎÁÌÏÍ,
ÓÕÝÅÓÔ×ÕÅÔ ×ÏÚÍÏÖÎÏÓÔØ ÏÔËÒÙÔØ ÆÁÊÌ ÎÁ ÓÅÒ×ÅÒÅ ÎÁ ÞÔÅÎÉÅ/ÚÁÐÉÓØ/ÄÏÚÁÐÉÓØ É
ÚÁÔÅÍ Ó ÐÏÍÏÝØÀ ÏÂÙÞÎÙÈ ÐÒÏÃÅÄÕÒ ××ÏÄÁ/×Ù×ÏÄÁ ÉÌÉ ÖÅ ÐÒÉ ÐÏÍÏÝÉ ÐÒÏÃÅÄÕÒ
\ts{FtpRead} É \ts{FtpWrite}, ËÏÔÏÒÙÅ × ÏÔÌÉÞÉÉ ÏÔ ÐÅÒ×ÙÈ ÐÒÅÏÂÒÁÚÕÀÔ ÔÅËÓÔÏ×ÙÅ ÆÁÊÌÙ,
ÐÒÏÉÚ×ÏÄÉÔØ ÎÅÏÂÈÏÄÉÍÙÅ ÏÐÅÒÁÃÉÉ.
\footnote{åÓÔÅÓÔ×ÅÎÎÏ, ÔÁËÉÅ ÆÕÎËÃÉÉ ËÁË \ts{seek}, \ts{ioctl}, ...
ÄÌÑ ÜÔÉÈ ÆÁÊÌÏ× ÎÅÄÏÐÕÓÔÉÍÙ.}
\ttt{\toindex{FtpData}(FTP~*, char~*command, char~*param, char~*mode)}
{ óÏÚÄÁÅÔ ËÁÎÁÌ ÄÌÑ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ ÐÏÓÌÁ× ÓÅÒ×ÅÒÕ ËÏÍÁÎÄÕ ËÏÔÏÒÁÑ
ÓÏÓÔÁ×ÌÑÅÔÓÑ ÉÚ ÐÁÒÁÍÅÔÒÏ× \ts{command} É \ts{param}. ðÁÒÁÍÅÔÒ \ts{mode} ÕËÁÚÙ×ÁÅÔ ÍÏÖÅÔ ÂÙÔØ
ÉÌÉ ``r'' ÉÌÉ ``w''}
\ttt{\toindex{FtpOpenRead}(FTP~*,char~*filename)}
{ ïÔËÒÙ×ÁÅÔ ÄÌÑ ÞÔÅÎÉÑ ÆÁÊÌ Ó ÉÍÅÎÅÍ \ts{filename} ÎÁ ÓÅÒ×ÅÒÅ }
\ttt{\toindex{FtpOpenWrite}(FTP~*,char~*filename)}
{ ïÔËÒÙ×ÁÅÔ ÄÌÑ ÚÁÐÉÓÉ ÆÁÊÌ Ó ÉÍÅÎÅÍ \ts{filename} ÎÁ ÓÅÒ×ÅÒÅ }
\ttt{\toindex{FtpOpenAppend}(FTP~*,char~*filename)}
{ ïÔËÒÙ×ÁÅÔ ÄÌÑ ÄÏÚÁÐÉÓÉ ÆÁÊÌ Ó ÉÍÅÎÅÍ \ts{filename} ÎÁ ÓÅÒ×ÅÒÅ }
\ttt{\toindex{FtpOpenDir}(FTP~*, char~*files)}
{
óÏÚÄÁÅÔ ËÁÎÁÌ ÄÌÑ ÞÔÅÎÉÑ ÕÄÁÌÅÎÎÏÇÏ ÌÉÓÔÉÎÇÁ ÄÉÒÅËÔÏÒÉÉ, ÐÁÒÁÍÅÔÒ files ÐÅÒÅÄÁÅÔÓÑ
ËÏÍÁÎÄÅ \ts{ls} ÎÁ ÓÅÒ×ÅÒÅ × ËÁÞÅÓÔ×Å 1-ÇÏ ÐÁÒÁÍÅÔÒÁ
}
\ttt{int \toindex{FtpRead}(FTP~*)}{þÉÔÁÅÔ ÓÉÍ×ÏÌ ÉÚ ÐÏÔÏËÁ ÄÁÎÎÙÈ, ÅÓÌÉ ÂÙÌÁ ÕÓÔÁÎÏ×ÌÅÎÁ
ÔÅËÓÔÏ×ÁÑ ÍÏÄÁ ÐÅÒÅÄÁÞÉ \footnote{õÓÔÁÎÏ×ÌÅÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ.}, ÐÒÅÏÂÒÁÚÕÅÔ ÐÅÒÅÈÏÄÙ ÎÁ ÎÏ×ÕÀ ÓÔÒÏËÕ. ðÒÉ ÏÂÎÁÒÕÖÅÎÉÉ
ËÏÎÃÁ ÐÏÔÏËÁ ×ÏÚ×ÒÁÝÁÅÔ \toindex{EOF}}
\ttt{\toindex{FtpGetString}(FTP~*, char~*str)}
{ þÔÅÎÉÅ ÏÄÎÏÊ ÓÔÒÏËÉ ÉÚ ÐÏÔÏËÁ ÄÁÎÎÙÈ ÐÒÉ ÐÏÍÏÝÉ ÆÕÎËÃÉÉ \ts{FtpRead}.}
\ttt{\toindex{FtpWrite}(FTP~*, char~c)}{ðÉÛÅÔ ÓÉÍ×ÏÌ × ÐÏÔÏË ÄÁÎÎÙÈ, ÅÓÌÉ ÂÙÌÁ ÕÓÔÁÎÏ×ÌÅÎÁ
ÔÅËÓÔÏ×ÁÑ ÍÏÄÁ ÐÅÒÅÄÁÞÉ, ÐÒÅÏÂÒÁÚÕÅÔ ÐÅÒÅÈÏÄÙ ÎÁ ÎÏ×ÕÀ ÓÔÒÏËÕ. ðÒÉ ÏÂÎÁÒÕÖÅÎÉÉ
ÏÛÉÂËÉ ××ÏÄÁ/×Ù×ÏÄÁ ×ÏÚ×ÒÁÝÁÅÔ \toindex{EOF}}
\ttt{\toindex{FtpClose}(FTP~*)}
{úÁËÒÙ×ÁÅÔ ÒÁÎÅÅ ÏÔËÒÙÔÙÊ ÐÏÔÏË ÄÁÎÎÙÈ.}
\section{ëÏÍÁÎÄÙ ÄÌÑ ÓÅÒ×ÅÒÁ É ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÆÕÎËÃÉÉ}
\ttt{\toindex{FtpCommand}(FTP~*, char~*command, char~*param, int~ok1, ok2, ok3, ..., okN, EOF)}
{ ðÏÓÙÌÁÅÔ ËÏÍÁÎÄÕ, ÓÏÓÔÁ×ÌÅÎÎÕÀ ÉÚ ÐÁÒÁÍÅÔÒÏ× \ts{command} É \ts{param}, É ÓÞÉÔÙ×ÁÅÔ
ÏÔ×ÅÔ ÓÅÒ×ÅÒÁ, ÅÓÌÉ ËÏÄ ÏÔ×ÅÔÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ ÎÅ Ó ÏÄÎÉÍ ÚÎÁÞÅÎÉÅÍ \ts{ok}, ÔÏ
ÚÎÁË ËÏÄÁ ÏÔ×ÅÔÁ ÍÅÎÑÅÔÓÑ ÎÁ '-'. ÷ ÓÌÕÞÁÅ ÅÓÌÉ ÕÓÔÁÎÏ×ÌÅÎ handler ÏÂÒÁÂÏÔËÉ
ÏÛÉÂÏË ×ÙÚÙ×ÁÅÔ ÅÇÏ.
}
\ttt{\toindex{FtpType}(FTP~*,char~*mode)}
{õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÍÏÄÕ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ×, mode ÍÏÖÅÔ ÂÙÔØ ``A'', ``I'', ``S'',....}
\ttt{\toindex{FtpBinary}(FTP~*)}
{õÓÔÁÎÁ×ÌÉ×ÁÅÔ Ä×ÏÉÞÎÕÀ ÍÏÄÕ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ×}
\ttt{\toindex{FtpAscii}(FTP~*)}
{õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÔÅËÓÔÏ×ÕÀ ÍÏÄÕ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ×}
\ttt{\toindex{FtpMkdir}(FTP~*,char *dirname)}
{óÏÚÄÁÅÔ ÄÉÒÅËÔÏÒÉÀ ÎÁ ÓÅÒ×ÅÒÅ}
\ttt{\toindex{FtpChdir}(FTP~*,char *dirname)}
{íÅÎÑÅÔ ÁËÔÉ×ÎÕÀ ÄÉÒÅËÔÏÒÉÀ ÎÁ ÓÅÒ×ÅÒÅ}
\ttt{\toindex{FtpRm}(FTP~*,char *filename)}
{õÄÁÌÑÅÔ ÆÁÊÌ ÎÁ ÓÅÒ×ÅÒÅ}
\ttt{char~*\toindex{FtpPwd}(FTP~*)}
{÷ÏÚ×ÒÁÝÁÅÔ ÁËÔÉ×ÎÕÀ ÄÉÒÅËÔÏÒÉÀ ÎÁ ÓÅÒ×ÅÒÅ}
\ttt{int \toindex{FtpSize}(FTP~*,char *filename)}
{÷ÏÚ×ÒÁÝÁÅÔ ÒÁÚÍÅÒ ÆÁÊÌÁ × ÂÁÊÔÁÈ, ÅÓÌÉ ÆÁÊÌ Ó ÕËÁÚÁÎÎÙÍ ÉÍÅÎÅÍ ÏÔÓÕÔÓÔ×ÕÅÔ,
ÔÏ ×ÏÚ×ÒÁÝÁÅÔÓÑ ÓÔÁÔÕÓ ÏÛÉÂËÉ, Ô.Å. ÚÎÁÞÅÎÉÅ ÍÅÎØÛÅ ÎÕÌÑ}
\ttt{\toindex{FtpMove}(FTP~*,char *oldfilename, char *newfilename)}
{ðÅÒÅÉÍÅÎÏ×Ù×ÁÅÔ ÎÁ ÓÅÒ×ÅÒÅ ÆÁÊÌ \ts{oldfilename} × ÆÁÊÌ \ts{newfilename}}
\ttt{\toindex{FtpPort}(FTP~*, int~a, int~b, int~c, int~d, int~e, int~f)}
{ëÏÍÁÎÄÁ ÓÅÒ×ÅÒÕ ÓÏÚÄÁÔØ ËÁÎÁÌ ÄÌÑ ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ. ðÒÉÞÅÍ \ts{a.b.c.d} ÜÔÏ IP ÁÄÒÅÓ
ËÌÉÅÎÔÁ Á \ts{e*256+f} ÎÏÍÅÒ ÐÏÒÔÁ.}
\ttt{struct hostent *\toindex{FtpGetHost}(char *hostname)}
{÷ÏÚ×ÒÁÝÁÅÔ ÕËÁÚÁÔÅÌØ ÎÁ ÓÔÒÕËÔÕÒÕ ÔÉÐÁ hostent.
áÒÇÕÍÅÎÔ -- ÜÔÏ ÓÔÒÏËÁ ÓÏÄÅÒÖÁÝÁÑ ÉÌÉ ÉÍÑ ÍÁÛÉÎÙ,
ÉÌÉ ÅÅ IP ÁÄÒÅÓ × ÓÔÒÏÞÎÏÍ ×ÉÄÅ\footnote{îÁÐÒÉÍÅÒ: ``dxunk8.oea.ihep.su'' ÉÌÉ
``192.102.229.71''}.}
\section{ðÏÄÐÒÏÇÒÁÍÍÙ ÐÅÒÅÄÁÞÉ ÓÏÏÂÝÅÎÉÊ ×/ÉÚ ÓÅÒ×ÅÒÁ}
\ttt{\toindex{FtpSendMessage}(FTP~*, char~*message)}
{ðÏÓÙÌÁÅÔ ÓÏÏÂÝÅÎÉÅ ÓÅÒ×ÅÒÕ}
\ttt{int \toindex{FtpGetMessage}(FTP~*)}
{ðÒÉÎÉÍÁÅÔ ÓÏÏÂÝÅÎÉÅ ÏÔ ÓÅÒ×ÅÒÁ É ×ÏÚ×ÒÁÝÁÅÔ ÅÇÏ ËÏÄ}
\ttt{\toindex{FtpMessage}(int Number)}
{÷ÏÚ×ÒÁÝÁÅÔ ÐÏ ËÏÄÕ ÓÏÏÂÝÅÎÉÑ ÅÇÏ ÓÏÄÅÒÖÉÍÏÅ}
\section{æÕÎËÃÉÉ ÐÏÌÎÏÇÏ ÓÅÁÎÓÁ ÒÁÂÏÔÙ}
\ttt{FILE *\toindex{FtpFullOpen}(char *filename,char *mode)}
{ òÁÚÂÉÒÁÅÔ ÓÔÒÏËÕ filename, ËÏÔÏÒÁÑ ÄÏÌÖÎÁ ÂÙÔØ ÔÉÐÁ
\\ \ts{host/user/password:filename} ÉÌÉ ÖÅ ÔÉÐÁ \ts{filename}, × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÜÔÏÇÏ
ÏÔËÒÙ×ÁÅÔÓÑ ÆÁÊÌ ÉÌÉ ÎÁ ÓÅÒ×ÅÒÅ \ts{host} ÉÌÉ ÌÏËÁÌØÎÙÊ ÆÁÊÌ. ðÁÒÁÍÅÔÒ mode ÄÏÌÖÅÎ
ÓÏÄÅÒÖÁÔØ ÏÄÉÎ ÉÌÉ Ä×Á ÓÉÍ×ÏÌÁ. ðÅÒ×ÙÊ ÚÁÄÁÅÔ ÔÉÐ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ ``r'',``w'' ÉÌÉ
``a''. ÷ÔÏÒÏÊ ÓÉÍ×ÏÌ ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ ÓÉÍ×ÏÌ ``b'' ÞÔÏ ÂÕÄÅÔ ÚÁÄÁ×ÁÔØ Ä×ÏÉÞÎÕÀ ÍÏÄÕ ÐÅÒÅÄÁÞÉ}
\ttt{\toindex{FtpFullClose}(FILE *f)}
{úÁËÒÙÔÉÅ ÆÁÊÌÁ}
\section{ïÐÉÓÁÎÉÅ ÐÒÉÍÅÒÏ× É ÐÒÉËÌÁÄÎÙÈ ÐÒÏÇÒÁÍÍ}
\subsection{ðÒÏÇÒÁÍÍÁ get}\index{get}
ëÏÐÉÒÏ×ÁÎÉÅ ÆÁÊÌÁ Ó ÓÅÒ×ÅÒÁ × ÌÏËÁÌØÎÙÊ ÆÁÊÌ Ó ÔÁËÉÍ ÖÅ ÉÍÅÎÅÍ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÆÕÎËÃÉÊ ÐÏÌÎÏÇÏ ÓÅÁÎÓÁ.
\subsection{ðÒÏÇÒÁÍÍÁ fcp}\index{fcp}
ðÒÏÇÒÁÍÍÁ fcp ÄÅÍÏÎÓÔÒÉÒÕÅÔ ÐÒÏÓÔÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÆÕÎËÃÉÊ ÐÏÌÎÏÇÏ ÓÅÁÎÓÁ ÒÁÂÏÔÙ
(FtpFullOpen É FtpFullClose). éÍÑ ÆÁÊÌÁ ÐÅÒÅÄÁ×ÁÅÍÏÇÏ × ËÁÞÅÓÔ×Å
ÐÁÒÁÍÅÔÒÁ, ÍÏÖÅÔ ÏÐÉÓÙ×ÁÔØ É ÌÏËÁÌØÎÙÊ É ÕÄÁÌÅÎÎÙÊ ÆÁÊÌ. üÔÏ ÐÏÚ×ÏÌÑÅÔ
ÐÒÏÉÚ×ÏÄÉÔØ ÐÅÒÅÄÁÞÕ ËÁË Ó ÓÅÒ×ÅÒÁ × ÌÏËÁÌØÎÙÊ ÆÁÊÌ, ÔÁË É ÎÁÏÂÏÒÏÔ,
Á ÔÁËÖÅ Ó ÓÅÒ×ÅÒÁ ÎÁ ÓÅÒ×ÅÒ.
\subsection{ðÒÏÇÒÁÍÍÁ ftptry}\index{ftptry}
ðÒÅÄÎÁÚÎÁÞÅÎÁ ÄÌÑ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ× ÂÏÌØÛÏÇÏ ÒÁÚÍÅÒÁ ÐÏ ÓÅÔÑÍ ËÏÔÏÒÙÅ
ÏÞÅÎØ ÞÁÓÔÏ ``ÌÏÍÁÀÔÓÑ''. üÔÏ ÐÒÅÖÄÅ ×ÓÅÇÏ ÏÔÎÏÓÉÔÓÑ Ë ÓÅÔÑÍ ÐÏÓÔÒÏÅÎÎÙÈ
ÎÁ dialup-ÌÉÎÉÑÈ.
\ts{ftptry} × ÏÓÎÏ×ÎÏÍ ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÎÅÉÔÅÒÁËÔÉ×ÎÏÊ
ÐÅÒÅÄÁÞÉ ÄÁÎÎÙÈ, ÐÏÜÔÏÍÕ ÎÅÏÂÈÏÄÉÍÁÑ ÉÎÆÏÒÍÁÃÉÑ ÄÌÑ ×ÙÐÏÌÎÅÎÉÑ ÐÅÒÅÄÁÞÉ ÚÁÄÁeÔÓÑ × ×ÉÄÅ ÏÐÃÉÊ ÐÒÉ ÚÁÐÕÓËÅ ÐÒÏÇÒÁÍÍÙ.
ðÒÉ ÚÁÐÕÓËÅ \ts{ftptry} ÂÅÚ ËÌÀÞÅÊ, ÎÁ ÜËÒÁÎ ×Ù×ÏÄÉÔÓÑ ÓÐÉÓÏË ×ÓÅÈ ÄÏÐÕÓÔÉÍÙÈ
ÏÐÃÉÊ É ÏÄÉÎ ÐÒÉÍÅÒ ÚÁÐÕÓËÁ, ÐÏÜÔÏÍÕ × ÄÁÎÎÏÍ ÒÕËÏ×ÏÄÓÔ×Å ËÌÀÞÉ
É ÉÈ ÎÁÚÎÁÞÅÎÉÑ ÏÐÉÓÙ×ÁÔØ ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ.
îÅÏÂÈÏÄÉÍÏ ÔÏÌØËÏ ÓËÁÚÁÔØ Ï ÔÏÍ, ÞÔÏ
ÔÁË ËÁË ÎÅËÏÔÏÒÙÅ ÏÐÃÉÉ ÎÅÏÂÈÏÄÉÍÏ ÓÔÁ×ÉÔØ ÐÒÁËÔÉÞÅÓËÉ ×ÓÅÇÄÁ,
ÔÏ ÍÏÖÎÏ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏ
ÕÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ ÏËÒÕÖÅÎÉÑ ``FTPTRY''\index{FTPTRY enviroment}
ÐÏ ÁÎÁÌÏÇÉÉ Ó ÔÅÍ ËÁË ÜÔÏ ÄÅÌÁÅÔÓÑ
× ÐÒÏÇÒÁÍÍÅ ``less''
\footnote{îÁÐÒÉÍÅÒ: \% setenv FTPTRY ``-DBb -u anonymous -s 60 -t 15''},
É ÐÉÓÁÔØ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ ÔÏÌØËÏ ÔÅ ÏÐÃÉÉ ËÏÔÏÒÙÅ ÒÅÄËÏ
ÉÓÐÏÌØÚÕÀÔÓÑ ÉÌÉ ÎÅ ÐÉÓÁÔØ ÉÈ ×ÏÏÂÝÅ.
\newpage
\input rus.ind
\newpage
\tableofcontents
\end{document}