সাইগউইন এবং মিংগ ব্যবহার করে আই / ও পুনঃনির্দেশ


3

আমি সি তে একটি প্রোগ্রাম লিখেছি এবং এটি মিনিজিডাব্লু ব্যবহার করে সংকলন করেছি। আমি যখন সাইগউইনে সেই প্রোগ্রামটি চালানোর চেষ্টা করি তখন মনে হয় এটি সাধারণত আচরণ করে (যেমন সঠিক আউটপুট প্রিন্ট করে))

তবে আমি কোনও প্রোগ্রামের আউটপুটটি পাইপ করার চেষ্টা করছি যাতে আমি প্রোগ্রামটির আউটপুট থেকে তথ্য পার্স করতে পারি। তবে পাইপিংটি কাজ করছে বলে মনে হচ্ছে না যে আমি দ্বিতীয় প্রোগ্রামটিতে কোনও ইনপুট পাচ্ছি না।

আমি নিম্নলিখিত কমান্ড ব্যবহার করে এটি নিশ্চিত করেছি:

এই আদেশটি ঠিক মত কাজ করছে বলে মনে হচ্ছে:

./prog 

এই কমান্ডটি সম্পাদন করলে কিছুই পাওয়া যায় না:

./prog | cat

এই কমান্ডটি প্রথমটি যাচাই করে:

./prog | wc

যা ফেরত:

0 0 0

আমি জানি যে স্ক্রিপ্টটি (প্রোগ্রাম থেকে পাইপিং সহ) সমস্ত লিনাক্স পরিবেশে পুরোপুরি সূক্ষ্মভাবে কাজ করে।

সাইগউইনে পাইপিং কেন কাজ করছে না সে সম্পর্কে কারও কি ধারণা আছে? ধন্যবাদ!


আপনি কী একই আচরণটি পাইপ করা moreবা stdoutকোনও আসল ফাইলে পুনর্নির্দেশ করতে চান?
ব্রেকথ্রু

@ ব্র্যাকথ্রু হ্যাঁ একটি ফাইলের আউটপুটিং "./prog &> আউটপুট.txt" বা "./prog> আউটপুট.txt" খালি আউটপুট দেয়
t

কয়েকটি প্রশ্ন: আপনি stdout ছাপছেন? আপনি উইন্ডোজ (\ r \ n) এর জন্য লাইন অক্ষরের ডান প্রান্তটি মুদ্রণ করছেন?
পাবলো ক্যাস্তেলাজ্জি

@ পাবলো ক্যাস্তেলাজি আমি স্টাডআউট (কেবল প্রিন্টফ ব্যবহার করে) প্রিন্ট করছি, তবে "\ r \ n" এর পরিবর্তে "\ n" ব্যবহার করছি। আমি মনে করি না যে এই সত্যটি পরিবর্তন করা উচিত যে আমি ঠিক কোনও আউটপুট পাচ্ছি না, তাই না? আমি লাইন শেষটি \ r \ n এ পরিবর্তন করার চেষ্টা করব এবং আপনাকে জানাব।
KLee1

আমি কেবল একটি সামান্য সি অ্যাপ লিখেছি যা প্রিন্টফ ব্যবহার করে এবং ডাব্লুসিপি এবং আরও কম এবং এ জাতীয় পাইপ করতে সক্ষম হয়েছিল। আপনি সাইগউইনের কোন সংস্করণটি চালাচ্ছেন?
রব

উত্তর:


0

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

# নির্ধারিত অক্ষম_স্টডআউট_ফফারিং () করুন {\
               সেটভুবুফ (স্টাডাউট, ন্যূনুয়াল, _IONBF, 0); যখন (0)

int main (int argc, char * argv []) {
    disable_stdout_buffering ();
    /* তোমার গোপন সংকেত */
    প্রস্থান (EXIT_SUCCESS);
}

অবশ্যই আপনি fflush()একটি প্রিপ্রসেসর ম্যাক্রোতে কল যোগ করতে পারেন বা যখন আপনি আপনার ডেটা স্টাডআউটে আউটপুট করেন তবে এইভাবে এটি আপনার কনসোলে লিখিত প্রতিটি বাফারে একটি অতিরিক্ত লাইব্রেরি কল যুক্ত করে না।

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