Perl - Win32 - كيفية القيام بقراءة غير محظورة لمقبض الملف من عملية أخرى؟

StackOverflow https://stackoverflow.com/questions/141332

سؤال

أنا أكتب بعض رموز الخادم التي تتحدث إلى عملية العميل عبر STDIN.أحاول كتابة مقتطف من كود Perl الذي يتلقى بشكل غير متزامن استجابات من STDOUT الخاص بالعميل.قد تبدو نسخة الحظر من الكود كما يلي:

sub _read_from_client
{
   my ($file_handle) = @_;
   while (my $line = <$file_handle>) {
      print STDOUT $line;
   }
   return;
}

الأهم من ذلك، أن المقتطف يحتاج إلى العمل في نظام Win32 الأساسي.هناك العديد من الحلول لمنصات *nix التي لا أهتم بها.أنا أستخدم ActivePerl 5.10.

هل كانت مفيدة؟

المحلول

هذا الموضوع على بيرلمونكس يقترح أنه يمكنك إنشاء مأخذ توصيل غير محظور على Windows في Perl بهذه الطريقة:

ioctl($socket, 0x8004667e, 1);

مزيد من التفاصيل والموارد في هذا الموضوع

نصائح أخرى

إذا كنت لا ترغب في اتباع المسار منخفض المستوى، فسيتعين عليك إلقاء نظرة على الحلول الأخرى الأكثر إطارية.

يمكنك استخدام أ خيط للقراءة من الإدخال وجعله يحشو جميع البيانات التي يقرأها في ملف الموضوع::قائمة الانتظار والتي يمكنك التعامل معها بعد ذلك في موضوعك الرئيسي.

يمكنك أن تنظر إلى بو الذي ينفذ إطارًا قائمًا على الحدث، على وجه الخصوص بو::عجلة::تشغيل::Win32.من المحتمل أيضًا أن تقوم بسرقة الكود منه لتنفيذ القراءة غير المحظورة بنفسك.

يمكنك إلقاء نظرة على [Coro]، الذي ينفذ نظامًا تعاونيًا متعدد المهام باستخدام coroutines.يشبه هذا في الغالب سلاسل الرسائل باستثناء أنك تحصل على سلاسل رسائل مساحة المستخدم، وليس سلاسل رسائل النظام.

لم تحدد إلى أي مدى تريد أن تصل، ولكن خيارك هو بين sysread وإطار، أو كتابة الإطار المذكور بنفسك.أسهل طريق للذهاب هو مجرد استخدام المواضيع أو من خلال المرور عبر رمز Poe::Wheel::Run::Win32.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top