আমি কিছু ডিস্ক ইমেজ স্টাফ পরিচালনা করতে কিছু শেল স্ক্রিপ্ট লিখছি এবং কিছু ডিস্ক চিত্র অ্যাক্সেস করার জন্য আমার লুপ ডিভাইসগুলি ব্যবহার করতে হবে। তবে আমি নিশ্চিত না যে কীভাবে আমার প্রোগ্রামটিকে কোনও রেসের শর্তে প্রকাশ না করে সঠিকভাবে একটি লুপ ডিভাইস বরাদ্দ করতে হয়।
আমি জানি যে আমি losetup -f
পরের আনলোকটেড লুপ ডিভাইসটি পেতে ব্যবহার করতে পারি এবং তারপরে সেই লুপ ডিভাইসটি এইভাবে বরাদ্দ করতে পারি:
ld=$(losetup -f)
sudo losetup $ld myfile.img
dostuffwith $ld
যাইহোক, আমি একই সাথে প্রোগ্রামটির একাধিক উদাহরণ চালাতে চাইছি, এটি প্রায় প্রতিযোগিতার শর্তের একটি পাঠ্যপুস্তকের উদাহরণ এবং এটি আমাকে বেশ বিরক্ত করে। যদি আমার এই প্রোগ্রামটি চলমান হওয়ার একাধিক উদাহরণ থাকে, বা অন্যান্য প্রোগ্রামগুলিও লুপ ডিভাইস পাওয়ার চেষ্টা করে থাকে তবে প্রতিটি প্রক্রিয়া পরবর্তী কলের আগে লুপ ডিভাইস বরাদ্দ করতে সক্ষম না হতে পারে losetup -f
, উভয় প্রক্রিয়াটি একই লুপটিকে ভাববে যে ডিভাইস উপলব্ধ, তবে কেবল একটি এটি পেতে পারে।
আমি এটির জন্য বাহ্যিক সিঙ্ক্রোনাইজেশন ব্যবহার করতে পারি তবে আমি চাইলে (সম্ভব হলে) অতিরিক্ত জটিলতা এড়াতে চাই। এছাড়াও, অন্যান্য প্রোগ্রামগুলি যে লুপ ডিভাইসগুলি ব্যবহার করে আমি সম্ভবত যে সিঙ্ক্রোনাইজেশন নিয়ে এসেছি সেটিকে সম্মান করবে না।
আমি কীভাবে এই সম্ভাব্য রেসের অবস্থাটি এড়াতে পারি? আদর্শভাবে, আমি লুপ ডিভাইসটিকে পরমাণুভাবে আবিষ্কার এবং বাঁধাই করতে সক্ষম হতে চাই, উদাহরণস্বরূপ:
ld=$(sudo losetup -f myfile.img)
dostuffwith $ld
যাইহোক, আমি যখন এটি করি তখন $ld
লুপ ডিভাইস পাথের জন্য বরাদ্দ করা হয় না এবং অনুমতি ত্রুটি sudo
হিসাবে আউট সরিয়ে ফেলা হয় sudo ld=$(losetup -f myfile.img)
।
</dev/tty
জন্য?