לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 19-07-2017, 18:36
צלמית המשתמש של Nati323
  משתמש זכר Nati323 Nati323 אינו מחובר  
 
חבר מתאריך: 25.10.05
הודעות: 1,508
C , שאלות לגבי read, errno

היי, אני מסתכל על הספרייה inotify והם מעבירים בדוקמנטציה ל die.net
מה שאני מנסה לעשות זה להבין מתי קובץ משתנה, והספרייה הזו תומכת בזה.
לפי הדוקמנטציה (מצטט)
קוד:
To determine what events have occurred, an application read(2)s from the inotify file descriptor. If no events have so far occurred, then , assuming a blocking file descriptor, read(2) will block until at least one event occurs (unless interrupted by a signal, in which case the call fails with the error EINTR;

לא הבנתי את הקטע המודגש
מה זה יונח חסום(גוש?) fd והוא יחסם עד שתהיה פסיקה
מה קורה ל read?
האם זה פשוט לא מחזיר תשובה ועוצר את הסקריפט עד שתחזור תשובה?
כאילו כדי להמשיך לקרוא כל פעם שחוזר event אני צריך לעשות ככה
קוד:
while (read(fd)) { do stuff with events }

והוא פשוט לא יכנס ללולאה עד שיהיה event?

עוד שאלה ,
בדוקמנטציה של inotify_add_watch כתוב
קוד:
On error -1 is returned and errno is set appropriately.

איך אני רואה את ה errno הזה?
_____________________________________
חתימתי העצומה בגודלה הוסרה ע"י השליט הבלתי מעורער שימי, למי שיש בעיה שיפנה אליו.


ד אַל תַּעַן כְּסִיל כְּאִוַּלְתּוֹ פֶּן תִּשְׁוֶה לּוֹ גַם אָתָּה. ה עֲנֵה כְסִיל כְּאִוַּלְתּוֹ פֶּן יִהְיֶה חָכָם בְּעֵינָיו

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 19-07-2017, 21:19
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 1 שנכתבה על ידי Nati323 שמתחילה ב "C , שאלות לגבי read, errno"

ציטוט:
במקור נכתב על ידי Nati323
היי, אני מסתכל על הספרייה inotify והם מעבירים בדוקמנטציה ל die.net
מה שאני מנסה לעשות זה להבין מתי קובץ משתנה, והספרייה הזו תומכת בזה.
לפי הדוקמנטציה (מצטט)
קוד:
To determine what events have occurred, an application read(2)s from the inotify file descriptor. If no events have so far occurred, then , assuming a blocking file descriptor, read(2) will block until at least one event occurs (unless interrupted by a signal, in which case the call fails with the error EINTR;

לא הבנתי את הקטע המודגש
מה זה יונח חסום(גוש?) fd והוא יחסם עד שתהיה פסיקה
מה קורה ל read?
האם זה פשוט לא מחזיר תשובה ועוצר את הסקריפט עד שתחזור תשובה?
כאילו כדי להמשיך לקרוא כל פעם שחוזר event אני צריך לעשות ככה
קוד:
while (read(fd)) { do stuff with events }

והוא פשוט לא יכנס ללולאה עד שיהיה event?

כן בתשובה לשאלה האחרונה ו-WAT לגבי שאר מה שכתבת.

ציטוט:
במקור נכתב על ידי Nati323
עוד שאלה ,
בדוקמנטציה של inotify_add_watch כתוב
קוד:
On error -1 is returned and errno is set appropriately.

איך אני רואה את ה errno הזה?

http://man7.org/linux/man-pages/man3/errno.3.html
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 19-07-2017, 22:27
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 3 שנכתבה על ידי Nati323 שמתחילה ב "לא הבנתי על מה אמרת כן ועל מה..."

כשאתה קורא לפונקציה שפעילותה מבוססת על זמינות של משאב מסויים, כגון מידע זמין מערוץ תקשורת, פתיחה של ערוץ תקשורת, קיום של קובץ, או שמטרתה להמתין לכך שיקרה דבר כלשהו, נניח שתגיע שעה מסויימת, וכיוצ"ב, יש בעצם שלוש דרכים לממש את פעילות הפונקציה:

1. או שהפונקציה תמתין עד שהמאורע או התנאי המבוקש יתקיים - מה שאומר שייתכן ותהיה המתנה ללא הגבלה (כלומר, אם האירוע לא מתרחש לעולם, התוכנה תהיה תקועה לעולם), או
2. המתנה עם הגבלה כלשהי (כלומר, אם האירוע הרצוי לא יתרחש אבל לדוגמא יפקע טיימר מסויים, שזה בעצם מימוש של timeout - אז בסוף הפונקציה תחזור והתוכנה תמשיך להתבצע אפילו שהמאורע לא קרה - אבל היא תחזור עם שגיאה), או
3. אם הרצוי לא "ממתין" לכך שהפונקציה שנקראה "תשתמש" בו, הפונקציה חוזרת מיד, ללא המתנה, ומדווחת בעצם שהמאורע הרצוי לא התרחש (למשל - לא היה מידע לקריאה מה socket) - ובעצם היא מעבירה את הנטל לדגום שוב ושוב את המשאב לתוכנה שקוראת לפונקציה, כלומר אלייך.

מדוע קיימות שלושת השיטות?
שיטה #1 - אם נניח מה שאתה רוצה זה לקלוט קלט מהמשתמש, בד"כ אתה תהיה מעוניין להמתין לכך ללא הגבלת זמן. המשתמש יכול לקחת את הזמן שלו ולהקליד משהו בתוכנה שלך. אם הוא ירצה לצאת מהמצב הזה, הוא יוכל לשלוח לתוכנה סיגנל, למשל SIGINT (שאולי אתה מכיר כ"קונטרול + C"), ואז היא יכולה לטפל בזה כדי לצאת, אבל אחרת, היא תמתין ללא הגבלה.

שיטה #2 - אם נניח שהתוכנה מנסה ליצור קשר עם מחשב אחר - וזו מטרתה היחידה - כלומר אין לה משימה אחרת לבצע באותו זמן. במקרה זה, אפשר פשוט לתת לה לחכות וזה גם הכי יעיל (יחסית לדגימה החוזרת בשיטה #3). לעתים יש משימות אחרות לביצוע (תוכנה שעוסקת בהרבה דברים "בו זמנית") ואז אפשר לפתור את זה בשתי דרכים - או ללכת על שיטה #3, או לחלופין, לאפשר לתוכנה לבצע כמה פעולות בו זמנית על ידי הפרדתה למספר תהליכים או threads.

שיטה #3 - שבה נניח רוצים לעשות פעולות אחרות אם הפעולה המבוקשת עדיין לא אפשרית - למשל לעדכן את המסך לגבי הסטטוס בתדירות גבוהה, וכו', כדי להעביר חיווי על הפעולה המבוקשת. פעולה זו יכולה להיות יקרה מאוד בהתאם לתדירות הדגימה - היא בעצם דורשת מהתוכנה שלך "לעבוד" כל הזמן בשביל משהו שבעצם לא קורה - וככל שההמתנה בין הדגימות קצרה יותר - היא תעמיס יותר ויותר על המחשב, עד 100% ממשאבי ליבת המעבד שעליה היא רצה, כי זה בעצם סוג של לולאה אינסופית (אא"כ כמובן התנאי מתקיים בסוף ואז זו לולאה עם תנאי יציאה)

השיטות #1 ו #2 הן מה שנקרא שיטות blocking - התוכנה עוצרת את פעילותה עד שקורה משהו או עד שמגיע אירוע מסויים כגון שעבר זמן המתנה שנקבע מראש.

השיטה #3 היא "non blocking" או "asynchronous".

מקווה שהצלחתי להעלות על הכתב נכון את מה שאני מבין בראש :-)
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 19-07-2017, 23:58
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 7 שנכתבה על ידי Benjamin Willard שמתחילה ב "ההסבר לא שלם בלי זה"

ציטוט:
במקור נכתב על ידי Benjamin Willard
ההסבר לא שלם בלי זה
תלוי בארכיטקטורה.
(לדוגמה, הארכיקטורה של JS היא single-threaded non-blocking, אז אין מה לדבר על thread-ים.)

כשמישהו פה לא מבין את המילה blocking במשפט "If no events have so far occurred, then, assuming a blocking file descriptor, read(2) will block until at least one event occurs" אפילו שבתיעוד של inotify_init ושל read מוסבר מה זה אומר, ואפילו שלפני שנתיים הוא כבר חפר על זה (https://www.fresh.co.il/vBulletin/s...ad.php?t=594923) כנראה שהדבר הנכון הוא to keep it simple.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 14:20

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר