إعادة توجيه سطر أوامر Linux مع ملفين c
-
23-12-2019 - |
سؤال
أنا جديد على وظائف الإدخال/الإخراج للأنابيب في 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()
قبل الاعتماد عليه.
لا تنتمي إلى StackOverflow