अनंत डिस्क I / O के लिए सबसे छोटा कोड


49

(Google Chrome में बस 50 टैब खोलें: D (केवल मजाक नहीं, आप नहीं कर सकते)

अनंत डिस्क I / O किसी भी भाषा, C # उदाहरण के लिए सबसे छोटा कोड:

using System.IO;

namespace FileApp {
    static class Program {
        public static void Main() {
            do {
                File.WriteAllText("a", "a");
                File.Delete("a");
            } while (true);
        }
    }
}

आप बस पूरी डिस्क को नहीं भर सकते, हालांकि तब यह अंत में रुक जाएगा और परिमित होगा।

और आप केवल पढ़ने के लिए नहीं कर सकते, अनंत लेखन होना है। (इसे पर्याप्त रनटाइम के बाद मेरे SSD को मारना है।)

जल्दी करो! :)


6
क्या उन्हें लिखने के बजाय फ़ाइलों को पढ़ना भी डिस्क I / O के रूप में गिना जाता है? लिखने के बारे में क्या /dev/null? (है yes>/dev/nullएक वैध बैश जवाब?)
दरवाज़े

2
क्या यह कोई इनपुट ले सकता है?
User112638726

29
डंग मैन ... आपके एसएसडी ने आपका क्या किया?
आर। कप

2
जैसा कि मैं 6 बाइट समाधानों के साथ प्रतिस्पर्धा करने की उम्मीद नहीं कर सकता, फ़ाइल का निर्माण करेगा। 3 ए बाइट सामग्री के साथ। / पार्श्व सोच के लिए बोनस पुरस्कार के लिए गणना करें? AFAIK सिर्फ एक फाइल को निष्पादित करता है, कई सिस्टम पर जगह लेने के लिए कुछ फाइल सिस्टम राइटिंग का कारण बनता है , क्योंकि बहुत कम से कम 'आखिरी एक्सेस टाइम' को एक
बायप्रोडक्ट के

3
इनमें से कई उत्तर डेटा को एक ही स्थान पर बार-बार लिखेंगे। डेटा अलग-अलग होने पर भी वास्तविक डिस्क में परिणाम नहीं होता है। (चरम स्थिति, डॉस -> विंडोज़ संचार। मैंने डॉस में 4k डेटा लिखा है और इसे विंडोज में वापस पढ़ा है - इसलिए जब तक डेटा डिस्क लाइट से बह रहा था बंद रहेगा।)
लोरेन Pechtel

जवाबों:


26

डॉस / बैच: 4 बाइट्स

%0>x

यह बैच फ़ाइल स्वयं ( %0) और पुनर्निर्देशित ( >) नामक फ़ाइल को आउटपुट रीडायरेक्ट करेगी x। चूंकि गूंज डिफ़ॉल्ट रूप से है, यह पथ और कमांड को आउटपुट करेगा।


क्या यह अंततः डिस्क स्थान से बाहर चलेगा, या आउटपुट ओवरराइट किया गया है?
मथुसम मट

1
@MathuSumMut: इसके साथ >ओवरराइट किया जाएगा। >>एपेंड करेगा
थॉमस वेलर

1
आप जीतते हैं तो मुझे लगता है: पी
मथुसम मट

2
@ ΈριΈνσταντόποςλο That's: यह सच है। उस स्थिति में, 0 बाइट के साथ एक फ़ाइल का उत्पादन किया जाता है, इस चुनौती से अपेक्षित के रूप में I / O उत्पन्न नहीं करता है। लेकिन हर मामले पर विचार करना हमारा काम नहीं है, अन्यथा आप कैशिंग, वायरस स्कैनर बंद करना चाहते हैं, ...
थॉमस वेलर

1
0 बाइट फ़ाइल लिखने के बाद भी डिस्क I / O का कारण होगा, क्योंकि इसे निर्देशिका के भीतर अंतिम-संशोधित समय को अपडेट करना होगा।

48

PowerShell v2 +, 10 बाइट्स

for(){1>1}

बस एक खाली forलूप के साथ असीम रूप से छोरों । प्रत्येक पुनरावृत्ति, हम पूर्णांक ऑपरेटर के1 साथ पूर्णांक (एक स्ट्रिंग में परिवर्तित) का उत्पादन करते हैं , जो स्थानीय निर्देशिका में नामित फ़ाइल को अधिलेखित करता है ।> 1


क्या आप दूसरे 1 को किसी और चीज़ से बदल सकते हैं (जो एक वैध फ़ाइल नाम बनाता है) या उसे 1 होना चाहिए?
निक हार्टली

1
मेरे विंडोज वीएम पर, Winload.exeपर्याप्त है ...
कॉमिंटर 23

मुझे लगता है कि यह एक संख्या होना चाहिए क्योंकि अगर यह एक पत्र है तो इसे एक चर के रूप में माना जाएगा, इसे एक स्ट्रिंग उद्धरण के रूप में इलाज करने की आवश्यकता होती है, और वे बाइट बर्बाद करते हैं। : पी
मथुसम मट

1
@QPaysTaxes MathuSum में यह सही है। 1सही ढंग से काम करने के लिए निहित पार्सिंग के लिए दूसरे को किसी प्रकार का एक नंबर होना चाहिए। से कुछ भी [0-9]एक ही काम करेगा।
AdmBorkBork

1
@Nacht शायद यह मेरे विशेष पर्यावरण का एक प्रश्न है, फिर। मेरे ISE (PSv4 Win8.1) में, 1कुछ भी नॉन-न्यूमेरिक के साथ दूसरे की जगह (और .\aया तो या जैसे निर्दिष्ट नहीं a.txt) एक पार्स त्रुटि के परिणामस्वरूप।
AdmBorkBork

28

अजगर, 6 बाइट्स

#.w]]0

Pyth की एकमात्र फ़ाइल आउटपुट कमांड है .w। जब किसी स्ट्रिंग पर कॉल किया जाता है, तो यह उस स्ट्रिंग को एपेंड मोड में एक फ़ाइल में लिखता है, जो इस प्रश्न के उद्देश्य के लिए अच्छा नहीं है। जब 2-डी सरणी पर कॉल किया जाता है, तो यह फ़ाइल की सामग्री को ओवरराइट करते हुए, उस फ़ाइल को संबंधित छवि लिखता है। यही इस कार्यक्रम को करता है। डिफ़ॉल्ट फ़ाइल आउटपुट नाम है o.png, इसलिए यह प्रोग्राम o.png1-पिक्सेल सफेद छवि के साथ फ़ाइल को असीम रूप से अधिलेखित कर देता है । #एक अनंत लूप है।


27

यदि आप एक छोटा (लेकिन मेरे अन्य की तुलना में अधिक उबाऊ) उत्तर चाहते हैं:

बैश, 5 बाइट्स

>w;$0

अगर वहाँ एक कमांड (3 बाइट्स से कम) है तो मैं इसे कम कर सकता हूं जो डिस्क I / O के लिए कुछ लिखता है। ऐसा कुछ syncकाम करेगा, लेकिन sync4 बाइट्स but है

नोट: यह काम नहीं करता है जब सीधे बैश से चलाया जाता है, केवल जब एक स्क्रिप्ट में रखा जाता है और स्क्रिप्ट नाम के रूप में चलता है। (यानी echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb)


1
ऐसा लगता है कि यह मेरे और @ आइसाक के बीच एक टाई है - कौन जीतता है?
डैनियल

8
मैं exec(या . $0) का उपयोग करना पसंद करता हूं । मुझे लगता है कि यह पीआईडी ​​से बाहर चलेगा।
मूरू

1
क्या wयहां पहली जरूरत है? मेरे लिए बस >wएक खाली फ़ाइल बनाता है w, और एक लूप में ऐसा करने से अनंत I / O बन जाएगा क्योंकि माइम मेटाडेटा को लगातार अपडेट करने की आवश्यकता होती है।
हेनिंग मैखोलम

1
अगर वह @HenningMakholm क्वालिफाई करता है तो मैं इसे डाल दूंगा।
डैनियल

2
स्क्रिप्ट में केवल ये बाइट्स होते हैं। चूँकि यह बैश है इसलिए इसमें कोई कंपाइलर या कुछ भी फैंसी की आवश्यकता नहीं है।
डैनियल

16

रूबी, 22 20 बाइट्स

loop{open(?a,?w)<<1}

बार-बार ट्रंकटेट करता है और 1फाइल को ए लिखता है a

2 बाइट्स के लिए वेंटरो को धन्यवाद !


3
open(?a,?w)<<12 बाइट बचाने के लिए।
वेंटरो

अपनी उपस्थिति के साथ हमें सम्मानित करने के लिए, धन्यवाद, doorknob। मैं दीन हूँ।
मथुसम मट

क्या वह लीक फ़ाइल डिस्क्रिप्टर है? या यह दायरे से बाहर जाने पर बंद हो जाता है? (आईडीके रूबी, क्षमा करें)।
पीटर कॉर्डेस

13

सेमी, 14 बाइट्स

:a
cd>1
goto a

Infinitly 1स्ट्रिंग को मौजूदा निर्देशिका में फ़ाइल को अधिलेखित करता है


मैं यहाँ नया हूँ: क्या विंडोज़ की नई लाइनें ( CR LF) दो बाइट्स के रूप में गिनी जाती हैं?


13
PPCG में आपका स्वागत है! विंडोज, कम से कम आधुनिक सिस्टम, LFबिना किसी समस्या के बस को संभालने में सक्षम होना चाहिए । उपरोक्त मेरे लिए सिर्फ LFविंडोज 8.1 पर काम करता है , इसलिए आपकी 14 बाइट्स सही हैं।
AdmBorkBork


13

बैश + कोरुटिल्स, 10

yes \>b|sh

के सतत प्रवाह को लिखता है >b, जिसे shमूल्यांकन के लिए पाइप किया जाता है। >bबस bहर बार शून्य बाइट्स नामक एक फ़ाइल को काटता है।


4
+1 क्योंकि आपका नाम कोड के इस स्निपेट को वास्तव में क्या करने के लिए उपयुक्त है
ओलिवियर दुलक

क्यों bऔर क्या नहीं c?
कैलक्यूलेटरफ्लीन

9

पर्ल 5, 27 32 22 बाइट्स

{{open my$h,'>o'}redo}

अगर बस एक फ़ाइल का संशोधन टाइमस्टैम्प बदल रहा है ...

त्वरित स्पष्टीकरण:

{ # Braces implicitly create/mark a loop.
    { # They also create closures, for `my` variables.
        open my $filehandle, '>', 'o';    # Writing to file "o".
        # close $filehandle;   # Called implicitly when
                               # variable gets destroyed.
    } # $filehandle gets destroyed because there are no references to it.
    redo; # ...the loop.
}

पिछला समाधान (32 बाइट्स): {{open my$h,'>o';print$h 1}redo}

संपादित करें: {open F,'O';print F 1;redo} ← पोस्ट करने से पहले कोड का परीक्षण नहीं किया; अब मुझे इसे सुधारना था।


1
: Oa पर्ल चर के साथ उपसर्ग नहीं $!
बिल्ली

@ कोट: यह एक नियमित चर नहीं है, जैसे स्केलर, सरणी, या हैश। यह बस एक नंगेपन है। संदर्भ के आधार पर, एक नंगेपन को उप (एक फ़ंक्शन), एक ग्लोब, मुझे लगता है, या एक फ़ाइलहैंडल के रूप में लिया जा सकता है। (शायद दूसरों को भी?)
g4v3

8

PHP, 60 30 17 16 15 बाइट्स

@Manatwork के अनुसार अभी तक अपडेट किए गए सुझाव:

while(!`cd>1`);

अब भी परीक्षण किया गया।


22 बाइट्स को धोखा देने की एक बिट:

जबकि (निष्पादन ('> 1 dir'));

@Manatwork 30 बाइट्स से पहले सुझाव:

जबकि (file_put_contents (1,1));

TESTED नहीं (इस कंप्यूटर पर कोई php उपलब्ध नहीं) 43 बाइट्स:

के लिए (; fputs ($ एक, 1); $ एक = fopen (1, 'मौ') fclose ($ क))

एक गोल्फ मूल 45 बाइट्स:

डॉलर प्रति = fopen (1, 'मौ'), जबकि (fputs ($ एक, 1)) रिवाइंड ($ एक);

यहाँ मेरा पहला पोस्ट, इसलिए शामिल हुआ क्योंकि मुझे अभी इसे आज़माना था: जब तक फ़ाइल लिखना सफल होता है, फ़ाइल पॉइंटर को शुरू करने के लिए रिवाइंड करें।


बस file_put_contents () से छोटा नहीं हो सकता।


5
while(file_put_contents(1,1));पर्याप्त होगा। ध्यान दें कि कमांड लाइन से पूर्ण स्क्रिप्ट चलाने के रूप में कोड टैग के बजायphp -r '…' मेटा रनिंग PHP-r पर आम सहमति के अनुसार स्वीकार्य है ।
मैनटवर्क

क्या यह वास्तव में डिस्क पर लिख रहा है या स्मृति में सिर्फ एक बफर है?
ब्राइस एम। डेम्पसे

1
@manatwork अरे यार! मुझे पता था कि सुधार के लिए हमेशा जगह होती है, लेकिन यह बहुत बुरा है कि फ़ंक्शन को छोटा नाम नहीं मिला है। : मैं बफर के बारे में नहीं जानता .. मुझे आश्चर्य है कि अगर मुझे उस छोटे समाधान के साथ उत्तर को अपडेट करना चाहिए।
डायनेवला

2
यदि यह छोटा है, तो कृपया अपना उत्तर अपडेट करें, आगे बढ़ें! :)
मथुसम मट

क्या इसे php से निष्पादन () कॉल करने की अनुमति है? मुझे एहसास है कि यह php के "दायरे" में नहीं है।
डायनेवला

7

श, 11 बाइट्स

w>w;exec $0

विशेष वर्णों के बिना किसी फ़ाइल में इसे सहेजें, जैसे कि लूप.श, इसे निष्पादन योग्य बनाते हैं, और इसे ./loop.shया इसी तरह से चलाते हैं ।

यह wफ़ाइल के लिए कमांड का आउटपुट लिखता है w, हर बार पिछले मूल्य को अधिलेखित करता है। फिर, यह उसी कार्यक्रम के एक नए संस्करण के साथ खुद को बदलता है, इसलिए यह असीम रूप से चल सकता है।


यह एक सेकंड याद आ रही है >। यह भी मानते हुए कि आपके पास एक "विशेष" $PATHऔर "विशेष" उमस्क / फाइलसिस्टम है, आप इसके लिए जा सकते हैं w>>w;$0, इसे 7 वर्णों तक
घटा

@mnagel >>एपेंड है, यह अंततः डिस्क को भर देगा
बिल्ली

1
@mnagel लेकिन आपको निष्पादन की आवश्यकता नहीं है, मुझे इस बात का एहसास नहीं है। किसी और ने इसे किया है, इसलिए मैं अपडेट नहीं करूंगा, हालांकि
isaacg

3
या . $0इसके बजाय exec $0, शायद? मैं नहीं जानता कि क्या एक ढेर अतिप्रवाह या कुछ कारण होगा, हालांकि। ... हाँ, यह segfaulted है।
मुरु

7

C, 95 94 93 89 78 78 90 89 76 75 बाइट्स

#include<stdio.h>
main(){for(FILE*f=fopen("a","w");;fputc(0,f),fclose(f));}   

फिर, sudo watch -n1 lsof -p `pidof inf`लगता है कि यह मान्य है।

मैं कैसे अंतरिक्ष डी नहीं देख रहा था: DID <

धन्यवाद @Jens 13 बाइट्स बंद शेविंग के लिए: डी


1
w+मोड पढ़ने और लिखने, शुरू में फ़ाइल छोटा है। चूँकि आपको पढ़ने की आवश्यकता नहीं है, आप सिर्फ एक बाइट को शेव कर सकते हैं w, जो फ़ाइल को काट भी देता है, लेकिन फ़ाइल को रीड मोड में नहीं खोलता है।
Mego

1
return 0;यदि लूप कभी समाप्त न हो , तो इसकी कोई आवश्यकता नहीं है।
जेन्स

1
fputc(1,f)सुपर-वर्बोज़ के बजाय इसका उपयोग क्यों नहीं किया जाता है fprintf(f," ")?
जेन्स

1
main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}forसाधन में एक खाली सशर्त के बाद से true। 76 बाइट्स।
जेन्स

1
@PeterCordes PPCG ढेर अतिप्रवाह नहीं है; कृपया दूसरों के उत्तरों का संपादन न करें जो कोड या उत्तर के अन्य प्रमुख भागों को बदलते हैं। टाइपो फिक्स ठीक हैं, लेकिन कुछ भी सुपरबॉडी (जिसमें तथ्यात्मक रूप से गलत बयानों के सुधार सहित) को टिप्पणियों में सुझाया जाना चाहिए।
बिल्ली

6

बैश, 26 बाइट्स

yes>y&while :;do rm y;done

अगर मैं इस वन-लाइनर का विस्तार करता, तो मुझे यह मिलता:

yes > y &      # Write out infinitely to the file y in the current directory
while true     # Let's do something forever
do             # Here's what we're going to do
    rm y       # delete y
done           # That's all we're going to do

यह ठीक 10 बाइट पावरशेल लाइन के साथ प्रतिस्पर्धा नहीं कर सकता है, लेकिन यह दूसरों के खिलाफ अपनी पकड़ बनाएगा। 6 बाइट संस्करण के लिए मेरा अन्य उत्तर देखें।


2
while :;ls>l;done
यूजर 112638726

1
अच्छी पुरानी execचाल बेहतर करेगी ls>l;exec $0:। छोटा, लेकिन उबाऊ।
मैनेटवर्क

:>l;exec $0- फ़ाइल निर्माण
इनोड

7
भले ही आप हटा दें y, yesफिर भी वही फ़ाइल हैंडल लिखना जारी रखेगा जो उसके पास था। दौड़िए lsof | grep yesऔर आपको कुछ ऐसा देखना चाहिए /path/to/y (deleted)। यह डिस्क को भर देगा और विफल हो जाएगा।
मुरु

4
इसके बजाय rm yआप उपयोग कर सकते हैं >yजो मौजूदा फ़ाइल को छोटा कर देगा। यह थोड़ा छोटा भी है।
arager

6

टीआई-बेसिक, 12 बाइट्स

While 1
Archive A
UnArchive A
End

एक ही आकार के साथ उपयोगकर्ता lirtosiast द्वारा वैकल्पिक समाधान :

While 1
SetUpEditor
Archive ∟1
End

यह TI-83 + और TI-84 + परिकलकों की श्रृंखला पर काम करेगा।

हाँ, यह भी काम करता है अगर A पहले से ही संग्रहीत है या कार्यक्रम के प्रारंभ में बिल्कुल भी आरंभिक नहीं है! कार्यक्रम की वजह से केवल 12 बाइट्स tokenization


मुझे नहीं पता कि कैलकुलेटर द्वारा उपयोग की जाने वाली फ्लैश मेमोरी "डिस्क" के रूप में गिना जाता है।
lirtosiast

1
जेमी के बचाव में @lirtosiast, SSDs फ्लैश मेमोरी =) से बने हैं
Cort Ammon

किसी भी मामले में, बाइट गिनती कम से कम 10 बाइट्स कम है। 2nd मेम स्क्रीन एक हेडर को 9 बाइट्स + प्रोग्राम नाम की लंबाई के बराबर गिनाती है, लेकिन हम यहां नहीं हैं इसलिए आप इसे घटा सकते हैं।
lirtosiast

@lirtosiast यह बार-बार कैलकुलेटर की ROM (स्थायी मेमोरी) को लिखता है और पढ़ता है, न कि RAM को। बेशक, कैलकुलेटर के अंदर एक वास्तविक हार्ड ड्राइव नहीं है :)
जेमी महाबीर

@lirtosiast धन्यवाद, मुझे इसके बारे में पता नहीं था! (मैं सोच रहा था कि मेरे टीआई -84 + बाइट्स की मात्रा मेरे हाथ-गिनती से मेल नहीं खाती थी ...) मैंने अपना उत्तर अपडेट कर दिया है।
जेमी महाबीर

6

सीपीथॉन 3.5, 33 16 बाइट्स

while 1:open("a")

हाँ सच। : डी


while 1:open("a","w")छोटा है और straceदिखाता है कि अजगर खुले, fstat64 और करीबी कर रहा है, निश्चित रूप से I / O संचालन। यदि फ़ाइल aपहले से मौजूद है, तो यह और भी छोटी हो सकती है: while 1:open('a')जो अभी भी एक open, fstat64और close, और यहां तक atimeकि फ़ाइल को संशोधित करती है।
राडोवन गारबिक 11

@ RadovanGarabík: 0 धन्यवाद, मुझे जानकारी का वह आसान टुकड़ा नहीं पता था! बेशक, यह कार्यान्वयन विशिष्ट है।
बिल्ली

5

MATL , 10 बाइट्स

`1[]T3$Z#T

व्याख्या

यह एक अनंत लूप है जो वर्तमान निर्देशिका में 1 एक फ़ाइल को नंबर लिखता है inout, जो पिछली फ़ाइल की सामग्री को अधिलेखित करता है।

`       % do...while loop
  1     %   push number 1
  []    %   push empty array
  T     %   push "true"
  3$Z#  %   fwrite function. First input is file content. Second is file name;
        %   defaults to "inout" if empty. Third indicates that any previous
        %   file contents should be discarded
  T     %   push "true": loop condition 
        % implicitly end loop. Loop condition is "true", so the loop is infinite

5

हास्केल, 20 बाइट्स

f=writeFile"b""a">>f

स्ट्रिंग "a"को नाम की फ़ाइल में लिखें "b"और दोहराएं। writeFileयदि यह मौजूद है तो फ़ाइल को अधिलेखित कर देता है।


4

जावास्क्रिप्ट (Node.js), 43 41 बाइट्स

(c=x=>require("fs").writeFile("a",x,c))()

nullनामक एक फ़ाइल को लिखता है a, फिर दोहराएं।


1
लेखन cया xफ़ाइल के बारे में क्या ? 2 बाइट बचाता है। इसके अलावा, काम नहीं require`fs`करता है?
चार्ली

1
@Charlie लेखन cया के साथ अच्छा बिंदु xrequire`fs`दुर्भाग्य से काम नहीं करता है, क्योंकि किसी फ़ंक्शन को कॉल करने के लिए बैकटिक्स का उपयोग करके इसे पहले तर्कों के रूप में कहा जाता है ["fs"](सरणी, जो कि पहले और एकमात्र तत्व पारित स्ट्रिंग है) के बजाय "fs"(बस स्ट्रिंग)। console.log`test`उदाहरण के लिए प्रयास करें ।
मिशैल पेरोलाकोव्स्की

4

ZSH, 14 बाइट्स

for ((;;)) :>:

Zash, बैश और अन्य बॉर्न-जैसे गोले के विपरीत, बाड़ के बिना छोरों कीdo ... done अनुमति देता है , बशर्ते कि हालत उपयुक्त रूप से सीमांकित हो।

वैकल्पिक रूप से, साथ while:

while {} {:>:}

ध्यान दें कि :एक बिलिन है। आप इस लूप को निलंबित नहीं कर सकते।

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


मैंने कभी नहीं सोचा मैं muru, देखना चाहते हैं मैं कहता हूँ, होगा muru, आओ कोड गोल्फ खेलते हैं। PPCG में आपका स्वागत है: D
बिल्ली

1
@cat धन्यवाद : DI पहले भी एक बार खेल चुका है।
मूरू

3

जंग, 84 बाइट्स

fn main(){loop{use std::io::Write;std::fs::File::create("a").unwrap().write(b"a");}}

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

प्रयुक्त कंपाइलर (1.9 नाइटली) का अप्रयुक्त परिणाम के बारे में चेतावनी जारी write(...)करता है , लेकिन फिर भी संकलन करता है।


3

सी, 92 बाइट्स

#include <stdio.h>
main(){for(FILE*f=fopen("a","w+");fprintf(f," "),!fclose(f);;);return 0;}

जबकि ऐसा लगता है कि आप 1 बाइट बचा सकते हैं

  for(FILE*f=fopen("a","w+");fprintf(f," ")+fclose(f);;){}

उस लूप के साथ समस्या यह है कि + आपको गारंटीकृत आदेश नहीं देता है।

या पुनरावर्ती - अतिप्रवाह नहीं होना चाहिए यदि कंपाइलर ठीक से पूंछ पुनरावृत्ति करता है (एफ एक स्पष्ट आंतरिक दायरे में है)

85 बाइट्स

#include <stdio.h>
main(){{FILE*f=fopen("a","w+");fprintf(f," ");fclose(f);}main();}

उम्मीद है कि 85-बाइट संस्करण स्टैक को उड़ा नहीं देता है। : पी
मथुसम मट

2
@MathuSumMut: आसान तय: अनुकूलन के साथ संकलन की आवश्यकता है। टेल कॉल पुनरावृत्ति दिन बचाता है।
जोशुआ

1
यहां बाइट बचाने के लिए बहुत गुंजाइश है। के अंदर सामान पैक करने के for(;;)लिए और कम कार्यों के लिए मेरा जवाब देखें fprintf। यदि आपको stdio.h को शामिल करने की आवश्यकता है (जो आप नहीं करते हैं), तो आपको एक स्थान की आवश्यकता नहीं है:#include<stdio.h>
पीटर कॉर्ड्स

3

गणितज्ञ, 14 बाइट्स

For[,1>0,a>>a]

बार-बार स्ट्रिंग "a"को aवर्तमान निर्देशिका में नामित फ़ाइल में लिखता है , अगर यह मौजूद नहीं है तो इसे बनाता है।


क्या यह स्ट्रिंग "a" या चर की सामग्री को लिखेगा? और यदि बाद वाला, यदि वह चर अभी तक परिभाषित नहीं किया गया है तो वह क्या करेगा?
माइकल स्टर्न

@MichaelStern यह चर लिखता है a, जो अपरिभाषित है, इसलिए यह सिर्फ लिखता है a\n
लीजनमोनमल 978

3

सी, 40 बाइट्स

main(){for(;;)write(open("a",1)," ",1);}

यह जल्दी से फ़ाइल डिस्क्रिप्टर से बाहर चलेगा, हालाँकि; इसके साथ दूर किया जा सकता है:

45 , 43 बाइट्स

main(f){for(f=open("a",1);;)write(f,"",1);}

च दूसरे में एक प्रकार क्यों नहीं है?
बिल्ली

2
@ Cat In C (बहुत K & R शैली) यह चूक करता है int
edmz

1
gcc और clang 2nd वर्जन को संकलित नहीं करेंगे। यहां तक ​​कि ग्नू सी एक स्थिर / वैश्विक चर के गतिशील प्रारंभिककरण की अनुमति नहीं देता है (एक कॉल open()एक संकलन-समय स्थिर नहीं है)। इसके अलावा, यह डिस्क स्थान से बाहर चलेगा, क्योंकि वहाँ कोई गद्य नहीं है। शायद utime("a","")लूप में कोशिश करें , जो अपडेट करता रहेगा ctime। (आपको अभी भी openज्ञात नाम की एक फ़ाइल बनानी होगी)।
पीटर कॉर्डेस

@PeterCordes तुम सही हो, इशारा करने के लिए धन्यवाद। फिक्स्ड।
edmz

फिर भी डिस्क को नहीं भरने की ओपी की आवश्यकता को अंततः संतुष्ट नहीं करता है, लेकिन शायद अभी भी जवाब के रूप में रखने के लायक है। (जब तक आपके पास मेरे उत्तर के करीब / फिर से खोलने (O_TRUNC) से बेहतर कोई विचार नहीं है।) मेरी पिछली टिप्पणी के विपरीत, टाइमस्टैम्प को केवल अपडेट करना वास्तव में लिनक्स पर वास्तविक डिस्क I / O का उत्पादन नहीं करता है। जैसे शायद 24 घंटे प्रति एक के साथ lazytime, जैसा कि मैंने अपने जवाब में कहा था।
पीटर कॉर्डेस

3

C amd64 Linux पर, 36 बाइट्स (केवल टाइमस्टैम्प), 52 49 बाइट्स (वास्तविक डिस्क गतिविधि)

मैं open(2)झंडे को हार्ड-कोड करता हूं , इसलिए यह अन्य एबीआई के लिए पोर्टेबल नहीं है। अन्य प्लेटफार्मों पर लिनक्स संभवतः उसी का उपयोग करता है O_TRUNC, आदि, लेकिन अन्य POSIX OSes नहीं हो सकता है।

+4 बाइट्स यह सुनिश्चित करने के लिए एक सही अनुमति प्राप्त करने के लिए कि फाइल मालिक के उपयोग के साथ बनाई गई है, नीचे देखें। (यह 5.2 gcc के साथ काम करने के लिए होता है)

कुछ हद तक पोर्टेबल ANSI C, 38/51 बाइट्स (केवल टाइमस्टैम्प), 52/67 बाइट्स (वास्तविक डिस्क गतिविधि)

@ बिल्ली के जवाब के आधार पर, @ जेन्स से एक टिप के साथ।

पहले नंबर कार्यान्वयन जहां एक के लिए है intपकड़ कर सकते हैं FILE *fopen()अगर हम ऐसा नहीं कर सकते की वापसी मान, दूसरा नंबर। लिनक्स पर, ढेर पते कम स्थान के पते के 32 बिट्स में होते हैं, इसलिए यह बिना -m32या के भी काम करता है -mx32। (घोषणा void*fopen();से कम है #include <stdio.h>)


टाइमस्टैम्प मेटाडेटा I / O केवल :

main(){for(;;)close(open("a",577));}   // Linux x86-64

//void*fopen();       // compile with -m32 or -mx32 or whatever, so an int holds a pointer.
main(){for(;;)fclose(fopen("a","w"));}

एक बाइट लिख रहा है, वास्तव में लिनक्स पर डिस्क मार रहा है 4.2.0 + XFS + lazytime:

main(){for(;write(open("a",577),"",1);close(3));}

writeफॉर-लूप की स्थिति है, जो ठीक है क्योंकि यह हमेशा रिटर्न करता है 1. closeवेतन वृद्धि है।

// semi-portable: storing a FILE* in an int.  Works on many systems
main(f){for(;f=fopen("a","w");fclose(f))fputc(0,f);}                 // 52 bytes

// Should be highly portable, except to systems that require prototypes for all functions.
void*f,*fopen();main(){for(;f=fopen("a","w");fclose(f))fputc(0,f);}   // 67 bytes

गैर-पोर्टेबल संस्करण की व्याख्या:

फ़ाइल यादृच्छिक कचरा अनुमतियों के साथ बनाई गई है। साथ gcc5.2, के साथ -O0या -O3, यह मालिक लिखने की अनुमति शामिल करने के लिए होता है, लेकिन यह गारंटी नहीं है। 0666दशमलव 438 है। एक तीसरा arg openएक और 4 बाइट्स लेगा । हम पहले से ही O_TRUNC और इतने पर हार्ड-कोडिंग कर रहे हैं, लेकिन यह एक ही एबीआई पर एक अलग संकलक या libc के साथ टूट सकता है।

हम 2 वें arg को छोड़ नहीं सकते हैं open, क्योंकि कचरा मान शामिल करने के लिए होता है O_EXCL, और O_TRUNC|O_APPEND, इसलिए खुला विफल रहता है EINVAL


हमें वापसी मूल्य को बचाने की आवश्यकता नहीं है open()। हम इसे मान लेते हैं 3, क्योंकि यह हमेशा रहेगा। यहां तक ​​कि अगर हम fd 3 के साथ शुरू करते हैं, तो यह पहले पुनरावृत्ति के बाद बंद हो जाएगा। सबसे खराब स्थिति, open3 के अंतिम उपलब्ध फ़ाइल डिस्क्रिप्टर तक नए एफडी खोलते रहते हैं। तो, पहले 65531 write()कॉल के साथ विफल हो सकता है EBADF, लेकिन फिर हर openबनाने के साथ सामान्य रूप से काम करेंगे fd = 3।

577 = 0x241 = O_WRONLY|O_CREAT|O_TRUNCx86-64 लिनक्स पर। बिना O_TRUNC, इनकोड मॉड समय और परिवर्तन समय अपडेट नहीं किया जाता है, इसलिए एक छोटा arg संभव नहीं है। O_TRUNCउस संस्करण के लिए अभी भी आवश्यक है जो writeवास्तविक डिस्क गतिविधि का उत्पादन करने के लिए कहता है, न कि फिर से लिखना।

मुझे कुछ उत्तर मिलते हैं open("a",1)। यदि aपहले से मौजूद नहीं है, तो O_CREAT आवश्यक है। O_CREATलिनक्स पर ऑक्टल 0100 (64, 0x40) के रूप में परिभाषित किया गया है।


कोई संसाधन लीक नहीं होता है, इसलिए यह हमेशा के लिए चल सकता है। straceउत्पादन:

open("a", O_WRONLY|O_CREAT|O_TRUNC, 03777762713526650) = 3
close(3)                                = 0
... repeating

या

open("a", O_WRONLY|O_CREAT|O_TRUNC, 01) = 3
write(3, "\0", 1)                       = 1   # This is the terminating 0 byte in the empty string we pass to write(2)
close(3)                                = 0

मुझे अपने C ++ वर्जन पर openउपयोग करके इस ABI के झंडे का दशमलव मान मिला strace -eraw=open

लिनक्स lazytimeमाउंट विकल्प सक्षम के साथ एक फाइलसिस्टम पर , केवल इनोड टाइमस्टैम्प को प्रभावित करने वाला परिवर्तन केवल 24 घंटे में एक लिखने का कारण होगा। उस माउंट विकल्प के साथ अक्षम, टाइमस्टैम्प अद्यतन आपके SSD को पहनने के लिए एक व्यवहार्य तरीका हो सकता है। (हालांकि, कई अन्य उत्तर केवल मेटाडेटा I / O करते हैं)।


विकल्प:

कम गैर-काम :

main(){for(;;)close(write(open("a",577),"",3));}writeपास करने के लिए एक 3arg पास करने के लिए रिटर्न वैल्यू का उपयोग करता है । यह एक और बाइट बचाता है, लेकिन amd64 पर gcc -O0 या -O3 के साथ काम नहीं करता है। 3rd arg में कचरा openअलग है, और इसमें लिखित अनुमति शामिल नहीं है। aपहली बार बनाया जाता है, लेकिन भविष्य के पुनरावृत्तियों के साथ सभी विफल हो जाते हैं -EACCESS

अब, विभिन्न सिस्टम कॉल के साथ काम करना :

main(c){for(open("a",65);pwrite(3,"",1);)sync();} एक बाइट में जगह फिर से लिखता है और sync()सभी फाइल सिस्टम-सिस्टम को सिंक करने के लिए कहता है। इससे ड्राइव की लाइट जलती रहती है।

हमें परवाह नहीं है कि कौन सा बाइट है, इसलिए हम 4 वें arg को pwrite पास नहीं करते हैं। विरल फ़ाइलों के लिए याय:

$ ll -s a
300K -rwx-wx--- 1 peter peter 128T May 15 11:43 a

~ 128TiB की भरपाई में एक बाइट लिखने से 300kB स्पेस का उपयोग करते हुए एक्सफ़ के लिए हद का नक्शा पकड़ लिया, मुझे लगता है। HFS +: IIRC, HFS + के साथ OS X पर यह कोशिश न करें, यह विरल फाइलों का समर्थन नहीं करता है, इसलिए यह डिस्क को भर देगा।

एक्सएफएस एक उचित 64 बिट फाइल सिस्टम है, जो 8 एक्सबाइट तक व्यक्तिगत फाइलों का समर्थन करता है । यानी 2 ^ 63-1, अधिकतम मूल्य off_tधारण कर सकते हैं।

strace उत्पादन:

open("a", O_WRONLY|O_CREAT, 03777711166007270) = 3
pwrite(3, "\0", 1, 139989929353760)     = 1
sync()                                  = 0
pwrite(3, "\0", 1, 139989929380071)     = 1
sync()                                  = 0
...

2

रैकेट, 46 बाइट्स

(do()(#f)(write-to-file'a"f"#:exists'replace))

1
मैं रैकेट में जवाब देने के बारे में सोच रहा था, लेकिन आपने मुझे हरा दिया। : पी
बिल्ली

जिज्ञासा से बाहर, क्या आपको एक छोटा जवाब मिला?
विनी

1

फैक्टर, 73 बाइट्स

USING: io.files io.encodings
[ 0 "a" utf8 set-file-contents ] [ t ] while

फ़ाइल सामग्री को nul बाइट के लिए हमेशा के लिए सेट करता है।


1

सीबीएम बेसिक 7.0, 9 बाइट्स

0dS"a":rU

यह कार्यक्रम, जब चलाया जाता है, बार-बार डिस्क पर खुद को बचाता है। यहाँ एक और अधिक पठनीय संस्करण है, जो मूल खोजशब्द संक्षिप्तीकरण का उपयोग नहीं करता है:

0 dsave "a" : run

1
हालांकि यह कैसेट टेप से बाहर चलाता है? ;)
मथुसम मट

1
@MathuSumMut जो होगा0 SAVE "A" : RUN
छत

1

पायथन, 32 बाइट्स

while 1:open("a","w").write("b")

ध्यान दें कि यदि अजगर 3 पर चलाया जाता है, तो यह अनंत संख्या में चेतावनी उत्पन्न करेगा। इसके अलावा, यह संभवतया गैर-रीफोकाउंटिंग कार्यान्वयन में चलने वाले एफडी से बाहर निकल जाएगा।


बस एक नोट के रूप में, एक छोटा सा जवाब खुले कमांड writeके "w"भाग के बिना मौजूद है ।
R

1

डायलॉग एपीएल 15.0, 17 बाइट्स (गैर-प्रतिस्पर्धात्मक)

(⊢⊣⊃⎕NPUT⊢)⍣≢'A'1

वर्तमान में Chrome U + 2262 को गलत तरीके से प्रस्तुत करता है। ऊपर की रेखा दिखनी चाहिए (⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1

यह गैर-प्रतिस्पर्धात्मक है क्योंकि संस्करण 15 अभी तक जारी नहीं किया गया है।

इनपुट बदलने तक (यानी कभी नहीं) पर फ़ंक्शन (⊢⊣⊃⎕NPUT⊢)को लागू करता है 'A'1:

⊢⊣⊃⎕NPUT⊢ एक समारोह ट्रेन है:

┌─┼───┐      
⊢ ⊣ ┌─┼─────┐
    ⊃ ⎕NPUT ⊢

सबसे सही रिटर्न 'A'1अनमॉडिफाइड; यह (फ़ाइल नाम, अधिलेखित-ध्वज) `enNPUT 'का सही तर्क होगा।

'' 'का पहला तत्व 'A'1( 'A') लौटाता है ; यह लिखा जाने वाला डेटा है।

फिर ⎕NPUTचलाया जाता है, और रिपोर्ट करता है कि कितने बाइट्स लिखे गए थे (2 या 3 ओएस पर निर्भर करता है); यह सही तर्क बन जाता है

सबसे बाईं ओर फिर से 'A'1unmodified; यह बायाँ तर्क है

अपने सही तर्क को अनदेखा करता है और बाएं तर्क को वापस करता है ( 'A'1), यह खिलाया गया नया मान बन जाता है

चूंकि नया मान पुराने के समान है, इसलिए ऑपरेशन जारी है (हमेशा के लिए)।


1

स्माइलबासिक, 12 बाइट्स

SAVE"A
EXEC.

हालांकि यह कैसेट टेप से बाहर नहीं चलता है?
मथुसम मट

0

vim टेक्स्ट एडिटर, 10 बाइट्स

qa:w<enter>@aq@a

8 बाइट्स यदि आप निष्पादन कमांड नहीं कर सकते @a

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