سؤال

أنا أستخدم Socat لإنشاء منفذ تسلسلي افتراضي مع:

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1

في برنامجي المكتوب في C ++ ، أفتح منفذ TTYSV1 وأبدأ في القراءة.

وظيفة القراءة منذ فترة ، ولكن المشكلة هي أن وظيفة القراءة معلقة حتى أرسل البيانات إلى المنفذ. هل تعرف كيفية جعل وظيفة taht لا تتعلق والخروج فقط إذا لم تكن هناك بيانات في المخزن المؤقت؟

تحرير: أرسل بيانات إلى المنفذ باستخدام:

echo [data] > /dev/ttySV0
هل كانت مفيدة؟

المحلول

يمكنك أيضًا استخدام وظيفة قراءة النظام اعتمادًا على نظام التشغيل الذي تقوم بتشغيله. يجب أن تكون التفاصيل تحت الرجل (3) قراءة.

سيكون عليك تعيين O_nonblock باستخدام FNCTL. يجب أن يتسبب هذا في فشل قراءتك إذا كان الأنبوب / FIFO فارغًا حاليًا. راجعت صفحات الرجل لـ Linux ، لكن يجب أن تكون سلوكيات مماثلة في معظم الأنظمة القائمة على POSIX.

نصائح أخرى

طريقة واحدة هي استخدام طريقة SELECT () لمعرفة ما إذا كانت هناك بيانات يمكن قراءتها. هذه أو أي شيء آخر موجود على Google (لقد بحثت عن "Sconsets BSD Sockets") يجب أن يقودك إلى أسفل المسار الصحيح.

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