رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
nimaarek

کاربرد سیستم کال select چیست؟


سوال

سلام،

دوستان همانطور که در عنوان پست مشخص است در رابطه با system call به نام select اطلاعات میخواستم.

کسی میتونه برام توضیح بده که چیکار میکنه و کجاها استفاده میشه؟

select(2) - Linux manual page

خواهش میکنم نیاید لینک بدید، اگر تجربه کار باهاش دارید توضیح بدید چون خوندم متوجه نشدم!

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

3 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0

تکلیف مشخص نمیکنم

منظورم این بود که توضیح لازم دارم

و هم چنین خودم سعی کردم متوجه بشم یعنی قبل از سوال کردن سرچ کردم و متوجه نشدم

پس اگه هر لینک بدی من قابل (befor) از این که سوال و بپرسم اون لینک و خوندم

مرسی بابت جواب

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 28 خرداد 1398 در 10:09، فرهاد شیری گفته است :

تصور کنید که یک سوکت اماده برای ارسال اطلاعات دارید جهت تشخیص این موضوع که سوکت مورد نظر امادگیارسال اطلاعات را دارد می توانید از select استفاده کنید.

بنابراین می توانید تا زمان آمادگی سوکت فرآیند مورد نظر را در یک زمان مشخص بلاک کنید.

توجه داشته باشید که اگر از استاندارد های posix در لینوکس استفاده میکنید قطعا استفاده از دستورات کنترلی مانند select لازم است.

البته می توانید تمامی عملیاتهای I/O را در لینوکس با استفاده از دستورات کنترل نمایید.

یک مثال ساده



 
 
struct timeval tWait;
 
 
 
tWait.tv_sec= nTimeOut / 1000;
 
tWait.tv_usec= (nTimeOut - tWait.tv_sec * 1000) * 1000;
 
 
 
fd_set writefds;
 
FD_ZERO(&writefds);
 
FD_SET(m_Sock,&writefds);
 
select(m_Sock+1,NULL,&writefds,NULL,&tWait);
 
if(! FD_ISSET(m_Sock,&writefds)){
 
return(-1);
 
}
 
 
 
if(sendto(m_Sock,...){
 
//...
 
}

 

 هنگام استفاده از دستور select پارامتر اول همواره یک واحد بیشتر از مقدار socket هست. در کدهایی دیده ام که این مقدار را برابر صفر قرار داده اند و همین استفاده ای که شما گفتید را از این دستور کرده اند. البته آن کد برای محیط windows بود (شاید در محیط windows به این پارامتر توجه نکند. حضور ذهن ندارم ولی ظاهرا درویندوز برای همخوانی با توابع c  در محیط unix  و linux توابعی ارائه داده که از بعضی از پارامترهای آن استفاده نمیشود). در هرحال اگر پارامتر اول را صفر دهیم چه اتفاقی میافتد. 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 29 خرداد 1398 در 18:22، فرهاد شیری گفته است :

تو لینوکس اگر 0 پاس بدید فرایند بلاک میشه ولی قطعا نمیتونه روی write-fds ویا read-fds چیزی بنویسه! به همین علت مقدار بازگشتی عددی بدون علامت بزرگتر از صفر خواهد بود که به این معنی است که در زمان مشخص شده بلاک فرایند اطلاعات صحیحی دریافت نشده!

منظورتون از ویندوز متوجه نمیشم چون این توابع از استانداردهای posix هست! البته اگر منظورتون استفاده از این دستورات در کامپایلرهای gcc ویندوز هست، که باید عرض کنم که در کامپایلرهای gcc ویندوز هدر فایل sys/types.h با نسخه های تحت لینوکس کاملا متفاوت هست بنابراین از این دستورات در ویندوز استفاده نمی شود.

یا حداقل من که تا حالا استفاده نکردم البته بعید میدونم با کامپایلر ویژوال سی هم شدنی باشه! 

به این علت که اساس کار این توابع بر روی جریان های ورودی فایلها کار میکند چیزی که لینوکس بر این پایه بنا شده است بنابراین در ویندوز مطلب روشن است. 

تو برنامه ای که در به ارث رسیده مقدار پارامتر اول در SELECT صفر داده شده و همین استفاده ازآن شده است ضمن آنکه برنامه برای محیط Windows بوده و در محیط VS کمپایل شده.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...