Erlang 21

ftp




erlang

ftp

मॉड्यूल

एफ़टीपी

मॉड्यूल सारांश

एक फाइल ट्रांसफर प्रोटोकॉल क्लाइंट।

विवरण

यह मॉड्यूल फ़ाइल स्थानांतरण प्रोटोकॉल (FTP) के सबसेट के अनुसार फ़ाइल स्थानांतरण के लिए एक ग्राहक को लागू करता है, RFC 959 देखें।

FTP क्लाइंट हमेशा निष्क्रिय एफ़टीपी मोड का उपयोग करने की कोशिश करता है और यदि यह विफल रहता है तो केवल सक्रिय एफ़टीपी मोड का सहारा लेता है। यह डिफ़ॉल्ट व्यवहार प्रारंभ विकल्प mode द्वारा बदला जा सकता mode

एक एफ़टीपी क्लाइंट दो तरह से शुरू किया जा सकता है। एक service_start फ़ंक्शन का उपयोग कर रहा है, दूसरा इसे फ़ंक्शन open का उपयोग करके सीधे स्टैंडअलोन प्रक्रिया के रूप में शुरू करना है।

एफ़टीपी सत्र के एक सरल उदाहरण के लिए, FTP User's Guide

फ़ाइलों को प्राप्त करने और भेजने के लिए सामान्य कार्यों के अलावा (देखें recv/2 , recv/3 , send/2 , और send/3 ) दूरस्थ फ़ाइलों को बायनेरिज़ के रूप में प्राप्त करने के लिए फ़ंक्शंस हैं (देखें recv_bin/2 ) और recv_bin/2 भेजने के लिए दूरस्थ फ़ाइलों के रूप में संग्रहीत किया जाता है ( send_bin/3 देखें)।

दूरस्थ फ़ाइल में संग्रहीत करने के लिए किसी फ़ाइल के सन्निहित भागों को भेजने और प्राप्त करने के लिए फ़ंक्शन का एक सेट साबित होता है। भेजने के लिए, send_chunk_start/2 , send_chunk/2 , और send_chunk_end/1 । प्राप्त करने के लिए, recv_chunk_start/2 और recv_chunk/ ) देखें।

दूरस्थ फ़ंक्शंस पर FTP सर्वर के कार्यान्वयन पर निम्न कार्यों के रिटर्न मान बहुत निर्भर करते हैं। विशेष रूप से, ls और nlist के परिणाम भिन्न होते हैं। अक्सर वास्तविक त्रुटियों को ls द्वारा त्रुटियों के रूप में रिपोर्ट नहीं किया जाता है, भले ही, उदाहरण के लिए, कोई फ़ाइल या निर्देशिका मौजूद न हो। nlist आमतौर पर अधिक सख्त होती है, लेकिन कुछ कार्यान्वयनों में त्रुटि के साथ जवाब देने का अजीब व्यवहार होता है यदि अनुरोध एक निर्देशिका की सामग्री की सूची है जो मौजूद है लेकिन खाली है।

Ftp क्लाइंट सेवा शुरू / बंद

FTP क्लाइंट को ftp एप्लिकेशन API ftp:start_service(ServiceConfig) और ftp:stop_service(Pid) कहकर रनटाइम में गतिशील रूप से शुरू और बंद किया जा सकता है।

उपलब्ध कॉन्फ़िगरेशन विकल्प निम्नानुसार हैं:

{मेजबान, मेजबान}

होस्ट = string() | ip_address() string() | ip_address()

{पोर्ट, पोर्ट}

पोर्ट = integer() > 0

डिफ़ॉल्ट 21

{मोड, मोड}

मोड = active | passive active | passive

डिफ़ॉल्ट passive

{क्रिया, क्रिया}

Verbose = boolean()

निर्धारित करता है कि एफ़टीपी संचार क्रिया है या नहीं।

डिफ़ॉल्ट false

{डिबग, डीबग}

डिबग = trace | debug | disable trace | debug | disable

डीबीजी टूलकिट का उपयोग करके डिबगिंग।

डिफ़ॉल्ट disable

{ipfamily, IpFamily}

IpFamily = inet | inet6 | inet6fb4 inet | inet6 | inet6fb4

inet6fb4 के साथ क्लाइंट पहले की तरह व्यवहार करता है, यानी IPv6 का उपयोग करने की कोशिश करता है, और केवल अगर वह काम नहीं करता है तो वह IPv4 का उपयोग करता है)।

डिफ़ॉल्ट inet (IPv4) है।

{टाइमआउट, टाइमआउट}

टाइमआउट = non_neg_integer()

कनेक्शन का समय समाप्त।

डिफ़ॉल्ट 60000 (मिलीसेकंड) है।

{dtimeout, DTimeout}

DTimeout = non_neg_integer() | infinity non_neg_integer() | infinity

डेटा कनेक्ट टाइम-आउट। क्लाइंट सॉकेट से कनेक्ट करने के लिए क्लाइंट को जिस समय का इंतजार होता है।

डिफ़ॉल्ट infinity

{प्रगति, प्रगति}

प्रगति = ignore | {CBModule, CBFunction, InitProgress} ignore | {CBModule, CBFunction, InitProgress}

CBModule = atom() , CBFunction = atom()

InitProgress = term()

डिफ़ॉल्ट की ignore

विकल्प progress का उपयोग उन अनुप्रयोगों द्वारा किया जाता है जो कुछ प्रकार की प्रगति रिपोर्ट बनाना चाहते हैं, जैसे कि GUI में प्रगति पट्टी। प्रगति विकल्प के लिए डिफ़ॉल्ट को ignore , अर्थात विकल्प का उपयोग नहीं किया जाता है। जब प्रगति विकल्प निर्दिष्ट किया जाता है, तो निम्न तब होता है जब ftp:send/[3,4] या ftp:recv/[3,4] कहा जाता है:

  • किसी फ़ाइल को स्थानांतरित करने से पहले, फ़ाइल स्थानांतरण की शुरुआत और फ़ाइल कितनी बड़ी है, यह इंगित करने के लिए निम्न कॉल किया जाता है। कॉलबैक फ़ंक्शन का रिटर्न मान UserProgressTerm लिए एक नया मान होना चाहिए जो अगली बार कॉलबैक फ़ंक्शन कहे जाने वाले इनपुट के रूप में उपयोग किया जाएगा।

    CBModule:CBFunction(InitProgress, File, {file_size, FileSize})

  • हर बार जब बाइट्स का एक हिस्सा स्थानांतरित किया जाता है, तो निम्न कॉल किया जाता है:

    CBModule:CBFunction(UserProgressTerm, File, {transfer_size, TransferSize})

  • फ़ाइल के अंत में स्थानांतरण के अंत को इंगित करने के लिए निम्नलिखित कॉल किया गया है:

    CBModule:CBFunction(UserProgressTerm, File, {transfer_size, 0})

कॉलबैक फ़ंक्शन को निम्नानुसार परिभाषित किया जाना है:

CBModule:CBFunction(UserProgressTerm, File, Size) -> UserProgressTerm

CBModule = CBFunction = atom()

UserProgressTerm = term()

File = string()

Size = {transfer_size, integer()} | {file_size, integer()} | {file_size, unknown}

दूरस्थ फ़ाइलों के लिए, ftp स्वतंत्र रूप से प्लेटफ़ॉर्म में फ़ाइल का आकार निर्धारित नहीं कर सकता है। इस मामले में आकार unknown हो जाता unknown और आकार निर्धारित करने के लिए इसे आवेदन पर छोड़ दिया जाता है।

ध्यान दें

कॉलबैक एक बिचौलिया प्रक्रिया द्वारा किया जाता है, इसलिए प्रगति कॉलबैक फ़ंक्शन में कोड द्वारा फ़ाइल स्थानांतरण प्रभावित नहीं होता है। यदि कॉलबैक क्रैश होता है, तो यह एफ़टीपी कनेक्शन प्रक्रिया द्वारा पता लगाया जाता है, जो तब एक सूचना-रिपोर्ट प्रिंट करता है और आगे बढ़ता है जैसे कि प्रगति विकल्प को ignore करने के लिए सेट किया गया था।

जब सत्र खोला जाता है तो फ़ाइल स्थानांतरण प्रकार एफ़टीपी सर्वर के डिफ़ॉल्ट पर सेट होता है। यह आमतौर पर ASCCI मोड है।

वर्तमान स्थानीय कार्य निर्देशिका ( lpwd/1 तुलना करें) file:get_cwd/1 द्वारा रिपोर्ट किए गए मान पर सेट है file:get_cwd/1 , वांछित स्थानीय निर्देशिका।

रिटर्न वैल्यू Pid का उपयोग अन्य सभी कार्यों में नए बनाए गए एफ़टीपी क्लाइंट के संदर्भ के रूप में किया जाता है, और उन्हें कनेक्शन बनाने वाली प्रक्रिया द्वारा बुलाया जाना है। एफ़टीपी क्लाइंट प्रक्रिया उस प्रक्रिया को मॉनिटर करती है जिसने इसे बनाया है और यदि प्रक्रिया समाप्त हो जाती है तो इसे समाप्त कर देती है।

जानकारी का प्रकार

FTP क्लाइंट API में निम्न प्रकार की परिभाषाएँ एक से अधिक फ़ंक्शन द्वारा उपयोग की जाती हैं:

pid() = एक FTP कनेक्शन की पहचानकर्ता

string() = ASCII अक्षरों की सूची

shortage_reason() = etnospc | epnospc etnospc | epnospc

restriction_reason() = epath | efnamena | elogin | enotbinary epath | efnamena | elogin | enotbinary epath | efnamena | elogin | enotbinary - सभी प्रतिबंध हमेशा सभी कार्यों के लिए प्रासंगिक नहीं हैं

common_reason() = econn | eclosed | term() econn | eclosed | term() econn | eclosed | term() - क्या गलत हो गया कुछ स्पष्टीकरण

निर्यात

खाता (पीआईडी, खाता) -> ठीक | {त्रुटि, कारण}

प्रकार

यदि आवश्यक हो, तो एक ऑपरेशन के लिए खाता सेट करता है।

परिशिष्ट (Pid, LocalFile) ->
append (Pid, LocalFile, RemoteFile) -> ठीक है | {त्रुटि, कारण}

प्रकार

फ़ाइल को LocalFile सर्वर से दूरस्थ सर्वर में स्थानांतरित करता है। यदि RemoteFile निर्दिष्ट किया जाता है, तो दूरस्थ फ़ाइल का नाम जो फ़ाइल में जोड़ा जाता है, उसे RemoteFile सेट किया RemoteFile , अन्यथा LocalFile । यदि फ़ाइल मौजूद नहीं है, तो यह बनाई गई है।

append_bin (Pid, Bin, RemoteFile) -> ठीक है | {त्रुटि, कारण}

प्रकार

बाइनरी Bin को दूरस्थ सर्वर में स्थानांतरित करता है और इसे फ़ाइल में RemoteFile । यदि फ़ाइल मौजूद नहीं है, तो यह बनाई गई है।

append_chunk (पिड, बिन) -> ठीक है | {त्रुटि, कारण}

प्रकार

चंक Bin को दूरस्थ सर्वर पर स्थानांतरित करता है, जो इसे कॉल में निर्दिष्ट फ़ाइल के लिए append_chunk_start/2

कुछ त्रुटियों के लिए, उदाहरण के लिए, फ़ाइल सिस्टम पूर्ण, उचित कारण प्राप्त करने के लिए append_chunk_end को कॉल करना आवश्यक है।

append_chunk_start (Pid, फ़ाइल) -> ठीक | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर File में फ़ाइल करने के लिए चंक्स का स्थानांतरण शुरू करता है। यदि फ़ाइल मौजूद नहीं है, तो यह बनाई गई है।

append_chunk_end (Pid) -> ठीक | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर के लिए संलग्न करने के लिए विखंडू का स्थानांतरण। दूरस्थ सर्वर पर फ़ाइल, append_chunk_start/2 लिए कॉल में निर्दिष्ट है, सर्वर द्वारा बंद है।

cd (Pid, Dir) -> ठीक है | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर कार्य निर्देशिका को Dir

बंद (पीआईडी) -> ठीक है

प्रकार

एक एफ़टीपी सत्र समाप्त करता है, जो फ़ंक्शन open का उपयोग करके बनाया गया है।

हटाना (Pid, फ़ाइल) -> ठीक | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर फ़ाइल File हटाता है।

फॉर्मटेरर (टैग) -> स्ट्रिंग ()

प्रकार

एक त्रुटि वापसी मान {error, AtomReason} को देखते हुए, यह फ़ंक्शन त्रुटि का वर्णन करते हुए एक पठनीय स्ट्रिंग देता है।

LCD (Pid, Dir) -> ठीक है | {त्रुटि, कारण}

प्रकार

कार्यशील निर्देशिका को स्थानीय क्लाइंट के लिए Dir में परिवर्तित करता है।

lpwd (Pid) -> {ठीक है, Dir}

प्रकार

स्थानीय क्लाइंट पर वर्तमान कार्य निर्देशिका देता है।

ls (Pid) ->
ls (Pid, Pathname) -> {ठीक है, लिस्टिंग} | {त्रुटि, कारण}

प्रकार

लंबे प्रारूप में फ़ाइलों की सूची लौटाता है।

Pathname एक निर्देशिका, फ़ाइलों का समूह या फ़ाइल हो सकती है। Pathname स्ट्रिंग में वाइल्डकार्ड हो सकते हैं।

ls/1 तात्पर्य उपयोगकर्ता की वर्तमान दूरस्थ निर्देशिका से है।

Listing का प्रारूप ऑपरेटिंग सिस्टम पर निर्भर करता है। UNIX पर, यह आमतौर पर ls -l शेल कमांड के आउटपुट से उत्पन्न होता है।

mkdir (Pid, Dir) -> ठीक है | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर निर्देशिका Dir बनाता है।

nlist (Pid) ->
nlist (Pid, Pathname) -> {ठीक है, लिस्टिंग} | {त्रुटि, कारण}

प्रकार

शॉर्ट फॉर्मेट में फाइलों की सूची लौटाता है।

Pathname एक निर्देशिका, फ़ाइलों का समूह या फ़ाइल हो सकती है। Pathname स्ट्रिंग में वाइल्डकार्ड हो सकते हैं।

nlist/1 तात्पर्य उपयोगकर्ता की वर्तमान दूरस्थ निर्देशिका से है।

Listing का प्रारूप फ़ाइल नाम की एक धारा है जहाँ प्रत्येक फ़ाइल नाम को <CRLF> या <NL> द्वारा अलग किया जाता है। फ़ंक्शन ls विपरीत, nlist का nlist प्रोग्राम को स्वचालित रूप से फ़ाइल जानकारी को संसाधित करने में सक्षम करना है।

open (होस्ट) -> {ओके, पिड} | {त्रुटि, कारण}
open (होस्ट, ऑप्स) -> {ठीक है, पिड} | {त्रुटि, कारण}

प्रकार

एक स्टैंडअलोन एफ़टीपी ग्राहक प्रक्रिया शुरू करता है (बिना ftp सेवा ढांचे के) और Host पर एफ़टीपी सर्वर के साथ एक सत्र खोलता है।

यदि विकल्प {tls, tls_options()} मौजूद है, तो FTP सत्र को {tls, tls_options()} , RFC 4217 देखें) पर ले जाया जाता है। सूची tls_options() खाली हो सकती है। फ़ंक्शन ssl:connect/3 का उपयोग नियंत्रण कनेक्शन और डेटा सत्र दोनों को सुरक्षित करने के लिए किया जाता है।

फ़ंक्शन close का उपयोग करके इस तरह से खोला गया एक सत्र close

pwd (Pid) -> {ठीक है, Dir} | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर वर्तमान कार्य निर्देशिका देता है।

recv (Pid, RemoteFile) ->
recv (Pid, RemoteFile, LocalFile) -> ठीक है | {त्रुटि, कारण}

प्रकार

फाइल को रिमोट सर्वर से रिमोट सर्वर से स्थानीय क्लाइंट के फाइल सिस्टम में ट्रांसफर करता है। यदि LocalFile निर्दिष्ट किया गया है, तो स्थानीय फ़ाइल LocalFile , अन्यथा RemoteFile

यदि फ़ाइल लिखना विफल हो जाता है (उदाहरण के लिए, enospc ), कमांड निरस्त हो जाती है और {error, file_write_error_reason()} वापस आ जाती है। हालाँकि, फ़ाइल को निकाला नहीं गया है।

recv_bin (Pid, RemoteFile) -> {ठीक है, बिन} | {त्रुटि, कारण}

प्रकार

फ़ाइल को रिमोट सर्वर से RemoteFile ट्रांसफर करता है और इसे बाइनरी के रूप में प्राप्त करता है।

recv_chunk_start (Pid, RemoteFile) -> ठीक | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर से फ़ाइल RemoteFile का स्थानांतरण शुरू करता है।

recv_chunk (Pid) -> ठीक है | {ठीक है, बिन} | {त्रुटि, कारण}

प्रकार

दूरस्थ फ़ाइल का एक हिस्सा ( RemoteFile के recv_chunk_start ) प्राप्त करता है। वापसी मूल्यों के निम्नलिखित अर्थ हैं:

  • ok = हस्तांतरण पूर्ण है।
  • {ok, Bin} = फ़ाइल का सिर्फ एक और हिस्सा।
  • {error, Reason} = हस्तांतरण विफल।
नाम बदलें (पिड, पुराना, नया) -> ठीक है | {त्रुटि, कारण}

प्रकार

रिमोट सर्वर पर Old से New

rmdir (Pid, Dir) -> ठीक है | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर निर्देशिका Dir को हटाता है।

send (Pid, LocalFile) ->
send (Pid, LocalFile, RemoteFile) -> ठीक | {त्रुटि, कारण}

प्रकार

फ़ाइल को LocalFile सर्वर से दूरस्थ सर्वर में स्थानांतरित करता है। यदि RemoteFile निर्दिष्ट किया गया है, तो दूरस्थ फ़ाइल का नाम RemoteFile सेट किया RemoteFile , अन्यथा LocalFile

send_bin (Pid, Bin, RemoteFile) -> ठीक | {त्रुटि, कारण}

प्रकार

बाइनरी Bin को दूरस्थ सर्वर पर फ़ाइल RemoteFile में स्थानांतरित करता है।

send_chunk (Pid, Bin) -> ठीक | {त्रुटि, कारण}

प्रकार

चंक Bin को दूरस्थ सर्वर पर स्थानांतरित करता है, जो इसे कॉल में निर्दिष्ट फ़ाइल में send_chunk_start/2

कुछ त्रुटियों के लिए, उदाहरण के लिए, फ़ाइल सिस्टम पूर्ण, उचित कारण प्राप्त करने के लिए send_chunk_end को कॉल करना आवश्यक है।

send_chunk_start (Pid, फ़ाइल) -> ठीक | {त्रुटि, कारण}

प्रकार

दूरस्थ सर्वर पर फ़ाइल में चंक्स का स्थानांतरण शुरू करता है।

send_chunk_end (Pid) -> ठीक | {त्रुटि, कारण}

प्रकार

रिमोट सर्वर को विखंडू के स्थानांतरण को रोकता है। दूरस्थ सर्वर पर फ़ाइल, send_chunk_start/2 लिए कॉल में निर्दिष्ट सर्वर द्वारा बंद है।

start_service (ServiceConfig) -> {ठीक है, Pid} | {त्रुटि, कारण}

प्रकार

FTP सत्र शुरू करने के बाद FTP सत्र शुरू होता है।

ध्यान दें

जब तक ftp अनुप्रयोग चालू है, तब तक एफ़टीपी सत्रों की निगरानी की जाती है और इसे सॉफ्ट कोड अपग्रेड किया जा सकता है।

stop_service (संदर्भ) -> ठीक | {त्रुटि, कारण}

प्रकार

एफ़टीपी सत्र शुरू करता है।

प्रकार (Pid, प्रकार) -> ठीक | {त्रुटि, कारण}

प्रकार

फ़ाइल ट्रांसफर टाइप को ascii या binary सेट करता है। जब कोई एफ़टीपी सत्र खोला जाता है, तो सर्वर का डिफ़ॉल्ट स्थानांतरण प्रकार का उपयोग किया जाता है, सबसे अधिक बार ascii , जो RFC 959 अनुसार डिफ़ॉल्ट है।

उपयोगकर्ता (पीआईडी, उपयोगकर्ता, पासवर्ड) -> ठीक | {त्रुटि, कारण}

प्रकार

Password साथ User लॉगिन करता है।

उपयोगकर्ता (Pid, उपयोगकर्ता, पासवर्ड, खाता) -> ठीक | {त्रुटि, कारण}

प्रकार

खाते द्वारा निर्दिष्ट खाते में Password साथ User लॉगिन करता है।

बोली (पिड, कमांड) -> [एफ़टीपीलाइन]

प्रकार

ध्यान दें

एफ़टीपी प्रोटोकॉल परिभाषा, सीआरएलएफ से लाइन वर्णों का टेलनेट अंत, उदाहरण के लिए, "\\ r \\ n" हटा दिया गया है।

एक मनमाने ढंग से FTP कमांड भेजता है और FTP सर्वर द्वारा वापस भेजी गई लाइनों की एक सूची को शब्दशः लौटाता है। इस फ़ंक्शन का उद्देश्य एफ़टीपी कमांड को एप्लिकेशन एक्सेस देना है जो सर्वर-विशिष्ट हैं या जिन्हें इस एफ़टीपी क्लाइंट द्वारा प्रदान नहीं किया जा सकता है।

ध्यान दें

एफ़टीपी कमांड को एक डाटा कनेक्शन की आवश्यकता होती है जिसे इस फ़ंक्शन के साथ सफलतापूर्वक जारी नहीं किया जा सकता।

त्रुटियाँ

संभावित त्रुटि कारणों और इसी नैदानिक ​​रूप से formaterror/1 द्वारा लौटाए गए तार निम्नानुसार हैं:

echunk

निम्नलिखित में से एक के अनुसार चंक भेजने के दौरान सिंक्रनाइज़ेशन त्रुटि:

  • send_chunk/2 कॉल करने से पहले send_chunk/2 या send_chunk_end/1 कॉल किया send_chunk_start/2
  • send_chunk_end/1 करने के दौरान एक अन्य हस्तांतरण फ़ंक्शन के लिए कॉल किया गया है, जो कि send_chunk_end/1 कॉल करने से पहले है।
eclosed

सत्र बंद है।

econn

दूरस्थ सर्वर का कनेक्शन समय से पहले बंद हो जाता है।

ehost

होस्ट नहीं मिला है, एफ़टीपी सर्वर नहीं मिला है, या एफ़टीपी सर्वर द्वारा कनेक्शन को अस्वीकार कर दिया गया है।

elogin

उपयोगकर्ता लॉग इन नहीं है

enotbinary

शब्द एक बाइनरी नहीं है।

epath

ऐसी कोई फ़ाइल या निर्देशिका या निर्देशिका पहले से मौजूद नहीं है, या अनुमति से इनकार किया गया है।

etype

ऐसा कोई प्रकार नहीं।

euser

अमान्य उपयोगकर्ता नाम या पासवर्ड।

etnospc

सिस्टम में अपर्याप्त भंडारण स्थान [452]।

epnospc

अधिक संग्रहण आवंटन (वर्तमान निर्देशिका या डेटासेट के लिए) [552]।

efnamena

फ़ाइल नाम की अनुमति नहीं है [553]।

यह भी देखें

file(3) filename(3) और जे। पोस्टेल और जे। रेनॉल्ड्स: फाइल ट्रांसफर प्रोटोकॉल ( RFC 959 )।