/ প্রোক-এর অধীনে কোনও ফাইলের পরিবর্তনের বিষয়ে অবহিত করুন


13

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

আমি যা খুঁজছি তা হ'ল ফাইলের পরিবর্তনের বিজ্ঞপ্তি পাওয়ার কিছু উপায় /proc/asound/card0/codec#0, ঠিক যেমন inotifywaitআসল ফাইলগুলিতেও হয় (/ প্রোক্টের অধীনে থাকা ফাইলগুলি "সিউডো-ফাইল" হিসাবে বিবেচনা করা হয়)।

আমি আমার কোড একটি বিট উন্মাদ কারণ এটি সঞ্চালিত হয় খুঁজে sleep 1সঙ্গে awkপুরো দিন, যে 86400 ওয়াক্ত জন্য :)

while sleep 1; do
    _1=${_2:-}
    _2=$(awk '/Pin-ctls/{n++;if(n==4)print}' '/proc/asound/card0/codec#0')

    [[ ${_1:-} = $_2 ]] ||
        if [[ $_2 =~ OUT ]]; then
            use_speakers
        else
            use_internal
        fi
done

আমি যা খুঁজছি তা হ'ল এই জাতীয় উদাহরণ (উদাহরণটি কার্যকর হয় না):

codec=/proc/asound/card0/codec#0
while inotifywait $codec; do
    if [[ $(awk '/Pin-ctls/{n++;if(n==4)print}' $codec) =~ OUT ]]; then
        use_speakers
    else
        use_internal
    fi
done

এইভাবে লুপের ভিতরে থাকা কমান্ডগুলি কেবল তখনই চালিত হবে যখন $codecফাইলটিতে আসল পরিবর্তন হবে are


1
এটি উন্মাদ নয় - topGUI সিস্টেম মনিটরের মত বিষয়গুলি /procস্বল্প বিরতিতে এর চেয়ে অনেক বেশি পড়বে । অবশ্যই, তারা সম্ভবত এটি সঙ্কলিত এক্সিকিউটেবল হিসাবে আরও দক্ষতার সাথে করে তবে মূল কথাটি: তথ্যের জন্য ভোটদান একটি সাধারণ কাজ।
স্বর্ণলোকস

2
যেহেতু অন্তর্নিহিত সমস্যা অনন্য নয়, আমি সেখানে (কিছু হার্ডওয়্যারের জন্য অন্তত) কিছু রেডিমেড সমাধান হতে আশা করবে - কটাক্ষপাত আছে unix.stackexchange.com/questions/25776/... এবং superuser.com/questions / 339900 /… । চূড়ান্ত উত্স অবশ্যই কার্নেল ট্রি (এবং আপনি যদি কিছু ড্রাইভারের মধ্যে এটি প্রয়োগ করার সিদ্ধান্ত নেন তবে হার্ডওয়্যার স্পেস)।
পিটারফ

1
যদি এটি প্রদর্শিত হয় /proc, আপনি সম্ভবত একটি স্ক্রিনটিকে একটি ইউদেব নিয়ম দিয়ে ট্রিগার করতে পারেন , এটি বেশ আদর্শ। কম আদর্শ হ'ল উদেব নিয়মগুলি নিয়ে এটি কতটা ক্লান্তিকর হতে পারে;)
স্বর্ণলোকস

@ পেটার্ফ আমি যা সংগ্রহ করতে পেরেছি, সে থেকে এইচডিএ-ক্রিয়া পরামিতিগুলি নির্ধারণ বা পরীক্ষা করার জন্য একটি ইন্টারফেস সরবরাহ করে তবে দেখে মনে হচ্ছে যে প্রতি সেকেন্ডেও এটি চালাতে হবে।
তেরেসা ই জুনিয়র

@ গোল্ডিলকস হেডফোনগুলি প্লাগ করা কোনও উদেব-ইভেন্ট প্রেরণ করে না। নাকি আমি আরও কিছু মিস করছি?
তেরেসা ই জুনিয়র

উত্তর:


10

আমি যা খুঁজছি তা হ'ল ফাইলটিতে পরিবর্তনগুলির বিজ্ঞপ্তি পাওয়ার কিছু উপায় [প্র্যাকটিভ]

আপনি পারবেন না, কারণ তারা ফাইল নয়। এটি বেশ সদৃশ প্রশ্ন নয়, তবে এখানে উত্তরটি কেন তা ব্যাখ্যা করে।

/procএকটি কার্নেল ইন্টারফেস। এখানে কোনও আসল ফাইল নেই, তাই তারা পরিবর্তন করতে পারে না। হ্যান্ডলগুলি থেকে পঠন একটি অনুরোধ এবং আপনি যখন ফাইলটি পড়েন তখন এটির একটি জবাব।

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

আপনি যদি statফাইলগুলি সংগ্রহ করেন তবে আটাইম এবং এমটাইম একই হবে: কিছু ফাইলের ক্ষেত্রে স্ট্যাট কলটি যখনই ছিল অন্যদের জন্য সিস্টেম বুটের সময় থেকে time প্রথম ক্ষেত্রে, এটি সর্বদা পরিবর্তিত হয়েছে বলে মনে হবে, দ্বিতীয়টিতে এটি কখনও পরিবর্তিত হয়েছে বলে মনে হবে না।


দুর্ভাগ্যক্রমে, এমনকি প্রতি সেকেন্ডেও এটির পোলিংয়ে যথেষ্ট বিলম্ব হয় (উদা। 500 মিমি)। আমি আশা করেছিলাম এটি করার একটি আরও দ্রুত / আরও কার্যকর উপায় থাকবে, তবে যেহেতু আপনি উল্লেখ করেছেন যে শীর্ষগুলির মতো অ্যাপগুলিও এটি একইভাবে করে, তাই আমি মনে করি আমি এটি সেভাবেই ছেড়ে দেব।
তেরেসা ই জুনিয়র

@ টেরেজে জুনিয়র যদি এই বিলম্বটি কোনও সমস্যা হয়ে থাকে (আমার মনে হয় এটি এখানে নেই), উদাহরণস্বরূপ, কেননা জরিপের সময়কাল একটি গণনায় ব্যবহৃত হয়, আপনি প্রকৃত সময়কাল (এবং আপনি যে সময় ঘুমাতে চেয়েছিলেন কেবল সে সময়টি ব্যবহার করবেন না) সময় নির্ধারণ করবেন । যদিও অনেকটা মনে হচ্ছে; আমি কখনই বাশ স্ক্রিপ্টগুলি প্রোফাইল করি নি তাই এখানে কী হবে তা আমি জানি না (হুম ... ভাল পৃথক প্রশ্ন)। অ্যাডভ্যাক করা == fork()এবং এর মতো জিনিসগুলি ব্যয়বহুল; সি তে সমস্ত লেখা ইউটিলিটিগুলির দ্রুত পদ্ধতি রয়েছে। আমি এখনও মনে করি না আপনি সামগ্রিকভাবে সিস্টেমে অনেক বেশি বোঝা যুক্ত করছেন।
স্বর্ণলোকস

1
না, দুঃখিত, আমি আসলে বোঝাতে চেয়েছিলাম: হেডফোনগুলি প্লাগ করার সময় থেকে পরবর্তী ঘুমের সময় পর্যন্ত কিছুটা লক্ষণীয় বিলম্ব হয়। তবে আমি ঘুমের সময় হ্রাস করার পরিকল্পনা করি না। আপনার সাহায্যের জন্য ধন্যবাদ!
তেরেসা ই জুনিয়র

4

আপনি যদি পালস অডিও ব্যবহার করছেন pactl subscribeতবে এটি করুন।


হ্যাঁ, সত্যিই! কিছু অডিও সমস্যার কারণে আমি কয়েক মাস আগে PA 4.0 সংকলনের পরে এটি ব্যবহার শুরু করেছি। ডেবিয়ান স্টেবলের সংস্করণটি ২.০ (যদিও তারা সম্প্রতি ব্যাকপোর্টে ৪.০ আপলোড করেছে), এবং subscribe২.০ তে কোনও কিছুই পাওয়া যায় নি ।
তেরেসা ই জুনিয়র

2

/proc/পোলের মাধ্যমে পরিবর্তনের জন্য মঞ্জুরিপ্রাপ্ত কিছু ফাইলগুলিও লক্ষ্য রাখবেন , উদাহরণস্বরূপ আপনি যদি ফাইলটি man procসম্পর্কে নিম্নলিখিতটি পড়তে পারেন তবে /proc/self/mounts:

/ proc / [pid] / মাউন্টগুলি (লিনাক্স ২.৪.১৯৯ সাল থেকে) এই ফাইলটি বর্তমানে প্রক্রিয়াটির মাউন্ট নেমস্পেসে মাউন্ট করা সমস্ত ফাইল সিস্টেমগুলি তালিকাভুক্ত করে (মাউন্ট_নামস্পেস ()) দেখুন)। এই ফাইলটির ফর্ম্যাটটি fstab (5) এ নথিভুক্ত করা হয়েছে।

কার্নেল সংস্করণ ২.6.১৫ থেকে, এই ফাইলটি পললযোগ্য: পড়ার জন্য ফাইলটি খোলার পরে, এই ফাইলটিতে পরিবর্তন (যেমন, একটি ফাইল সিস্টেম মাউন্ট বা আনমাউন্ট) ফাইলের বিবরণীটিকে ব্যতিক্রমী শর্ত হিসাবে চিহ্নিত করার জন্য (2) নির্বাচন করে এবং পোল (2) এবং এপল_ওয়েট (2) ফাইলটিকে অগ্রাধিকার ইভেন্ট (পিওএলপিআরআই) হিসাবে চিহ্নিত করেছে। (লিনাক্স ২.6.৩০-এর পূর্বে, এই ফাইলটির পরিবর্তনটি ফাইল বর্ণনাকারী নির্বাচনের (2) নির্বাচনের জন্য পাঠযোগ্য হিসাবে চিহ্নিত এবং পোল (2) এবং এপল_ওয়েট (2) এর জন্য একটি ত্রুটি শর্ত হিসাবে চিহ্নিত হিসাবে চিহ্নিত হয়েছে)

এবং নিচের প্রশ্নে ঠিক এটাই বাস্তবায়িত হচ্ছে:

/programming/5070801/monitoring-mount-point-changes-via-proc-mounts


-1

পরিবর্তিত ফাইল netlinkনিরীক্ষণ করতে ব্যবহার করার চেষ্টা করুন /proc

https://mdlayher.com/blog/linux-netlink-and-go-part-1-netlink/


সাইটে স্বাগতম। কীভাবেnetlink সেই কাজটি অর্জন করতে ব্যবহার করবেন সে সম্পর্কে দয়া করে কিছু ব্যাখ্যা যুক্ত করুন ; আপনার লিঙ্ক করা বাহ্যিক সামগ্রী থেকে এটি স্পষ্ট নয়। এছাড়াও, বাহ্যিক বিষয়বস্তু পরিবর্তন বা মুছে ফেলা হতে পারে (আপনার মূল লিঙ্কযুক্ত পৃষ্ঠার শীর্ষে বিজ্ঞপ্তি দেখুন, উদাহরণস্বরূপ), যা আপনার অবদানের কার্যকারিতা হ্রাস করবে বলে সাধারণত "লিঙ্ক-কেবল" উত্তর না দেওয়া পছন্দ করা উচিত।
এডমিনবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.