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

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


سوال

سلام،

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

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

select(2) - Linux manual page

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

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


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

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

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

  • 1
در 10 ساعت قبل، nimaarek گفته است :

سلام،

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

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

select(2) - Linux manual page

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

تصور کنید که یک سوکت اماده برای ارسال اطلاعات دارید جهت تشخیص این موضوع که سوکت مورد نظر امادگیارسال اطلاعات را دارد می توانید از 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,...){
   //...
}

 

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 10 ساعت قبل، nimaarek گفته است :

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

دوست عزیز! خوب نیست که تکلیف مشخص میکنید، ابتدا اجازه بدید دوستان پاسخ شما را بدهند شاید یک لینک خیلی بهتر از لینک شما ارسال کردند، بعد در صورتی که بازهم جواب قانع کننده نبود اعلام کنید، نه اینکه تعیین کنید که جواب شما را چگونه بدهند!

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 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
در 6 ساعت قبل، kambiz behnia گفته است :

در هرحال اگر پارامتر اول را صفر دهیم چه اتفاقی میافتد. 

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

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

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

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

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


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

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

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

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

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

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

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 16 ساعت قبل، kambiz behnia گفته است :

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

تشکر بابت اطلاع رسانی دوست گرامی!

اگر بتونم حتما خودم تو ویندوز هم تست میکنم

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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

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

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

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

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

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


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

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

×
×
  • جدید...