कर्निघन और पाइक चुनौती: एक फाइलनाम में एक स्लैश कैसे रखा जाए?


23

मैंने यूनिक्स प्रोग्रामिंग पर्यावरण , कार्निघन और पाइक की क्लासिक पुस्तक यूनिक्स पर निम्नलिखित प्रश्न का सामना किया है (मुझे 1984 के संस्करण के 79 पृष्ठ पर नीचे का लेख मिला, आईएसबीएन: 0-13-937699-2)।

3-6 व्यायाम करें। (ट्रिक प्रश्न) आपको फ़ाइल नाम में (/ a) पथ के अलग-अलग घटकों को कैसे नहीं मिलता है?

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

मैं समझता हूं कि लिनक्स, यूनिक्स, लेकिन एक ही सिद्धांत लागू होना चाहिए, क्योंकि सिस्टम को पथ से अव्यवस्थित निर्देशिका पदानुक्रम निकालने में सक्षम होना चाहिए।

क्या किसी को पता है, इस सवाल को पूछने पर वास्तव में कार्निघन और पाइक ने क्या सोचा था? क्या माना जवाब था? वास्तव में exactly ट्रिक ’क्या है? या शायद मूल यूनिक्स प्रणाली ने किसी तरह इस स्लैश से बचने की अनुमति दी?

युपीडी:

मैंने इस सवाल के बारे में ब्रायन कर्निघन से संपर्क किया और उन्होंने जवाब दिया:

जवाब है (या था) "आप नहीं कर सकते।"

इसलिए, टिमोथी मार्टिन सही था और उसे हरी टिक मिलती है।


3
संबंधित (डुप्लिकेट नहीं), एक ऐसा मामला जहां किसी ने वास्तव में इसे प्रबंधित किया: डीबगफ़्स में ext4 फाइल सिस्टम पर "फाइलन / एमी" (स्लैश के साथ) नामक फ़ाइल को कैसे हटाया जाए?
माइकल होमर


हम्म। शायद आप एक फाइल बना सकते हैं जिसमें लोअर केस हो aऔर अपने सिस्टम को सोचने में मजबूर करें कि एक EBCDIC लोकेल में फाइलसिस्टम है? ASCII a0x61 है, जो /EBCDIC (कोड पेज 37) से मेल खाती है
फॉक्स

क्या किताब खुद कहती है कि यह एक ट्रिक प्रश्न है? यदि ऐसा है, तो मुझे लगता है कि बहुत अधिक पुष्टि करता है कि आप ऐसा करने के लिए एक बाय-डिज़ाइन तरीका नहीं खोज पाएंगे, जो आपके द्वारा पहले ही बताए गए बॉक्स विचारों को छोड़कर।
ilkachachu

जवाबों:


12

शायद इस ट्रिक सवाल के जवाब के हिस्से के रूप में उत्तर एक ही है:
आप एक हाथी से कैसे नीचे उतरते हैं? तुम नहीं। आप इसे हंस से प्राप्त करते हैं।

ब्रायन डब्ल्यू। कर्निघन और रॉब पाइक द्वारा "प्रोग्रामिंग का अभ्यास" से, चौ। 6, स्नातकोत्तर। 158:

जब स्टीव बॉर्न अपना यूनिक्स खोल (जिसे बॉर्न शेल के नाम से जाना जाता है) लिख रहे थे, तो उन्होंने 254 फाइलों की एक-चरित्र के नामों के साथ एक निर्देशिका बनाई, जिसमें प्रत्येक बाइट मान के लिए '\ 0' और स्लैश को छोड़कर, दो अक्षर थे। यूनिक्स फ़ाइल नामों में प्रकट नहीं हो सकता।


3
मुझे उस मजाक को सिखाने के लिए धन्यवाद। यह, शायद, एक अंग्रेजी प्रवाह परीक्षण (जो मैं अभी असफल रहा है) के रूप में सेवा कर सकता हूं।
फायरगुरफिकु

तुम सही थे। यूपीडी देखें।
फायरगुरफिकु


5

मैंने यह किया है। यह 1980 के आसपास किसी समय पीडीपी -11 पर चल रही UNIX प्रणाली पर था। मैंने "WhatXNow?" नामक एक फ़ाइल बनाई। मैंने तब डिस्क डिवाइस को संपादित करने के लिए एक बाइनरी फ़ाइल "एडिटर" का उपयोग किया और "X" को इनोड में "/" में बदल दिया (फाइल सिस्टम अनमाउंट के साथ)।

पीड़ित ने कभी नहीं सोचा कि इसे कैसे हटाया जाए।

संपादित करें: वूप्स, बामार सही है, मैं डिवाइस को पैच नहीं करने के बारे में लाइन को देखने में विफल रहा। और हां, यह निर्देशिका थी जिसे मैंने संपादित किया था, इनोड नहीं। इसे बीते एक अर्सा हो गया है :-)


1
फ़ाइल नाम इनोड में नहीं हैं, वे निर्देशिका विशेष फ़ाइल में हैं।
बरमार

1
मुझे संदेह है fsckकि इसे हटा दिया जाएगा।
बरमार

1
प्रश्न कहता है कि आप अपने फाइल सिस्टम को ब्लॉक डिवाइस एक्सेस के माध्यम से पैच कर सकते हैं, या यूनिकोड से समान दिखने वाले अक्षरों का उपयोग कर सकते हैं, लेकिन वे समाधान नहीं हैं। ऐसा नहीं है कि आप अपने उत्तर में क्या वर्णन कर रहे हैं?
बरमार

@ बरमर: हम्म, शायद मैं इस सवाल को खत्म कर रहा हूं और फाइलसिस्टम को थपथपाना इसका हल है? मुझे नहीं पता।
फायरगुरफिकु

मुझे यकीन है कि यह जवाब था। मुझे याद है जब आप डायरेक्टरी पढ़ सकते थे। शायद सदियों पहले जड़ उन्हें लिख सकते थे।
जोशुआ

1

कोई भी परिदृश्य जहां /(अधिक सटीक रूप से, एक बाइट-एक वर्ण नहीं है - मान 0x2f के साथ; लगभग सभी यूनिक्स कर्नेल जानबूझकर चरित्र एन्कोडिंग के लिए अनजान हैं) एक निर्देशिका प्रविष्टि में अपना रास्ता ढूँढता है, बिना हाथ से कच्चे डिस्क ब्लॉक किए बिना, निर्विवाद रूप से है। एक बग कर्नेल में।

ऐसे कीड़े समय-समय पर होते रहते हैं। मुझे याद है कि पैच नोट्स को पढ़ने का एक मामला यह है कि 1990 के दशक के कुछ पुनरावृत्तियों ... मैं सोलारिस कहना चाहता हूं, लेकिन यह गलत हो सकता है ... AppleTalk फाइलिंग प्रोटोकॉल (AFP) के लिए एक सर्वर की पेशकश की, जो एनएफएस के क्लासिक MacOS के समकक्ष था। । यह परेशानी थी कि क्लासिक MacOS पर आपको /पाथनाम घटक में डालने की पूरी तरह से अनुमति है ; :इसके बजाय निर्देशिका विभाजक है । एएफपी सर्वर था चाहिए की नैतिक बराबर करने के लिए tr :/ /:जब इसकी डिस्क पर फ़ाइलों पर ग्राहकों द्वारा प्रस्तुत pathnames मानचित्रण, लेकिन वे एक जोड़ी कोड रास्तों याद किया, और क्योंकि सर्वर कर्नेल के अंदर लागू किया गया था, यह वास्तव में बुरा निर्देशिका प्रविष्टियों बाहर लिख सकते हैं।

( Comp.unix FAQ # 2.2 देखें, उपसर्ग की शुरुआत "क्या होगा यदि फ़ाइल नाम में '/' है?", उपरोक्त संस्करण के लंबे संस्करण के लिए।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.