অসীম-লুপ প্রোগ্রাম থেকে আউটপুট কীভাবে পুনঃনির্দেশ করা যায়


2

আমার একটি অসীম লুপ চলছে এমন একটি প্রোগ্রাম রয়েছে এবং CTRL+Cসংকেত না পাওয়া পর্যন্ত শেষ হবে না । আমি যা করতে চাই তা হ'ল এই প্রোগ্রাম থেকে আউটপুটটিকে কোনও ফাইলে ডাইরেক্ট করা, logউদাহরণস্বরূপ বলুন । যাইহোক, আমি CTRL+Cপ্রোগ্রামটি সম্পাদনার পরে , কিছুই রেকর্ড করা হয় না log। আমি মনে করি এটি I / O বাফার সম্পর্কিত কিছু সমস্যা হতে পারে তবে কীভাবে এটি সমাধান করবেন সে সম্পর্কে কোনও ধারণা নেই। আমি কি সঠিক পথে রয়েছি? অসীম-লুপ প্রোগ্রাম থেকে আউটপুট কীভাবে কোনও ফাইলে ফেলা যায়?


আপনি কি বাফারকে শূন্যে সঙ্কুচিত করার চেষ্টা করেছেন (বা যে মিনিট তারা অনুমতি দেবে)? এছাড়াও, আপনার কি সোর্স কোডটিতে অ্যাক্সেস রয়েছে?
soandos

আপনি আপনার প্রোগ্রামের আউটপুটটি পাইপ করতে পারেন logger(দেখুন man logger)।
u-punkt

আপনি কীভাবে আউটপুট তৈরি করছেন? সাধারণ প্রিন্টফ?
অট--

1
এই কোড আপনি লিখেছেন? যদি তা হয় তবে এই প্রশ্নটি স্ট্যাক ওভারফ্লোতে সম্পর্কিত , সুপার ব্যবহারকারীর উপর নয় , যদিও আপনার কমপক্ষে আপনার প্রোগ্রামিং ভাষাটি উল্লেখ করা উচিত এবং কিছু নমুনা কোড পোস্ট করা উচিত যা সমস্যাটি দেখায়। দ্রষ্টব্য: পুনরায় পোস্ট করবেন না, পর্যাপ্ত ব্যবহারকারী বা কোনও মডারেটর এটিকে চাপ দিলে প্রশ্ন স্বয়ংক্রিয়ভাবে স্থানান্তরিত হবে।
গিলস

@ স্যান্ডোস দুঃখিত, উত্স কোডটি উপলভ্য নয়।
সামার_মোড়_আর_আর

উত্তর:


6

যদি আপনার প্রোগ্রামটি স্ট্যান্ডার্ড আউটপুট ফাংশন ব্যবহার করে (যেমন puts, printfএবং stdio.hসি এর বন্ধুরা , cout << …সি ++ এ, printঅনেকগুলি উচ্চ-স্তরের ভাষায়) তবে তার আউটপুটটি বাফার হয় : অক্ষরগুলি একটি মেমরি জোনে জমা হয় যা বাফার বলে; বাফারে যখন খুব বেশি ডেটা থাকে, বাফারের সামগ্রীগুলি মুদ্রিত হয় (এটি "ফ্লাশযুক্ত") এবং বাফারটি খালি হয়ে যায় (আবার পূরণ করার জন্য প্রস্তুত)। যদি আপনার প্রোগ্রামটি খুব বেশি আউটপুট উত্পাদন না করে তবে এটি এখনও এর বাফারটি পূরণ করতে পারে না।

যখন আপনার সাথে আপনার প্রোগ্রাম হত্যা Ctrl+ + C, যদি না আপনার জন্য একটি সংকেত হ্যান্ডলার সেট করেছি SIGINT , এটা ঠিক ডাইস। যে কোনও আনফ্ল্যাশড বাফারের সামগ্রী হারিয়ে গেছে।

আপনার তিনটি সম্ভাবনা রয়েছে:


1

একটি স্ক্রিপ্ট (একটি অসীম লুপ সহ বা না) পুনঃনির্দেশিত ডেটা ধীরে ধীরে সংরক্ষণ করা উচিত, সুতরাং স্ক্রিপ্টের প্রকৃতির ফলাফলের কোনও ফল বহন করা উচিত নয়। তথ্য ধীরে ধীরে লিখতে হবে ...

অথবা (যদি কোনও আউটপুট না পাওয়া যায়, এমনকি পুনঃনির্দেশ ছাড়াই) আপনি চেষ্টা করতে চান fflush(stdout)বা সেই প্রভাবটি থেকে কিছু করতে পারেন।

কেবল একটি চিন্তা (যদিও অত্যন্ত সম্ভাবনা নেই) ... আপনি STDOUTকি পুনর্নির্দেশ নিশ্চিত যা আপনার করা উচিত? এটা কোন সুযোগ দ্বারা হয় না STDERR? বাইনারি / স্ক্রিপ্ট / ... চালানোর চেষ্টা করুন:

$ ./program 2> ./stderr_out

এবং তারপরে cat ./stderr_outনিশ্চিত STDERRকরা যে এক নয় ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.