אני חוזר עכשיו מביתה של שושנה פורבס, שם היא היתה נדיבה מספיק כדי לתת לי להתעסק קשות עם לנסות להריץ את rsyncrypto על ה-Mac שלה.
לכל מי שלא יודע, קיימות שתי שיטות מרכזיות לייצוג מספרים בזכרון. Little endian, שבעולם ה-32 ביט ומעלה קיים כמעט אך ורק אצל אינטל, ו-Big endian של כל השאר. כאשר כותבים תוכנות שאמורות לשלוח נתונים על רשת או בקבצים, צריך לוודא שקבצים שנוצרו ע”י מכונות מסוג אחד מסוגלים להקרא ע”י מכונות מהסוג השני. בגלל זה אני מנסה לשים את ידי כבר כמה זמן על מכונה שאיננה של אינטל. עקב סיבות מסיבות שונות חוות הקומפילציה של Sourceforge אינה מתאימה לצרכי כרגע.
ובכן, דו”ח הרצה של rsyncrypto על Mac OS X ועל Ubuntu Linux for Power PC. על לינוקס, המצב כמעט בסדר. אפשר לפענח קבצים קטנים שהוצפנו על מכונות אינטל, והמפתח הסימטרי נשמר אותו הדבר. קבצים גדולים לא עובדים.
על Mac OS X המצב פחות טוב. מסיבה שלא ירדתי לעומקה, נראה שלא ניתן להשתמש ב-bzero כדי לכתוב לקובץ שנפתח Write only. לא ברור בכלל למה. בפירוש יש פה הבדל סמנטיקה בין לינוקס לבין FreeBSD. כשתהיה לי גישה למכונה בלי שאני צריך לשבת למישהו בבית (ועוד להשתמש בעכבר שמאלי על מערכת שאני בקושי מכיר….), אני אבדוק למה.
שחר
bzero is deprecated. Use memset() instead.
ניסיתי. אותו הדבר בדיוק.
שחר
לא ברור לי השימוש שלך ב bzero. מה הכוונה ב"להשתמש ב bzero כדי לכתוב לקובץ". bzero עובד על כתובות בזיכרון.
אתה יכול לצרף את קטע הקוד הרלוונטי?
RTFM mmap
אם אתה רוצה רק להוסיף בייתים של אפס לסוף הקובץ אז מספיק lseek() מעבר לסוף הקובץ, אבל אני מניח שאתה יודע את זה אז כנראה אתה מתכוון למשהו אחר.
א. לא מספיק לעשות lseek. צריך גם לכתוב לשם משהו, אחרת הקובץ לא מתארך.
ב. אכן, אני צריך משהו אחר. אני כותב לשם struct, והסיבה המרכזית שאני עושה bezro קודם זה כדי לוודא שגם הבתים שנמצאים בין השדות של המערך יאותחלו לערך ידוע.
שחר
מה עם ftruncate(2) שיש על FreeBSD?