سؤال

أنا جديد على وظائف الإدخال/الإخراج للأنابيب في Linux.تم عمل ملفين c، الأول يرسل البيانات:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

    int main(int argc, char* argv[])
    {
         int i = 0;

         for(;;)
         {
             printf("\nSent number: %d",i);
             i++;
             sleep(1);
             fflush(stdout);
         }

    return 0;
}

الملف الثاني يستقبل الرقم المطبوع ويعرضه:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

int main(int argc, char* argv[])
{    
    int x;

    for(;;)
    {
        scanf("%d",&x);
        printf("Received number: %d\n",x);
        sleep(1);
        fflush(stdout);
    }

    return 0;
}

أخيرًا أحاول إعادة توجيه البيانات من الملف الأول إلى الثاني باستخدام:

./send_test.out | ./rcv_test.out

تطبع الوحدة الطرفية بشكل متكرر:"الرقم المستلم:0"، ما الخطأ الذي أفعله؟وأيضًا، كيف يمكنني تشغيل النوافذ الطرفية لكلا البرنامجين اللذين يعملان في وقت واحد أثناء توجيه الإخراج من المرسل إلى جهاز الاستقبال؟

شكرا لك مقدما

هل كانت مفيدة؟

المحلول

أنت لا "ترسل" الرقم بتنسيق يمكن للمستلم فهمه.

حاول إزالة كل النص باستثناء %d من سلسلة التنسيق الخاصة بالمرسل.

يجب عليك أيضًا التحقق من القيمة المرجعة لـ scanf() قبل الاعتماد عليه.

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