bababarghi
شنبه 18 مهر 1394, 02:30 صبح
دوستان عزیز و منخصصین برنامهنویسی، من برنامه ای دارم که دو تا string رو به هم می چسبونه رو به child می فرسته. child هم این رشته رو دریافت می کنه و روی کنسول نشون می ده. مشکلی که من دارم اینه که برنامه parent ام لازمه در ثانیه ۲ بار این اطلاعات رو به child برای نمایش بفرسته. هر کاری می کنم نمی تونم از ساختار حلقه در برنامه ام استفاده کنم تا مکرراً این مقادیر رو به child بفرستم.
ممنون می شم از دوستان اگه کسی کمکم کنه. اسم پروسس child هست ProcessNo3_TEST
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define READ 0
#define WRITE 1
int FIFO[2];
char fileDescriptor[10];
char* stringMaker( char *s1,char *s2 );
int main()
{
char lengthInChar[15],msg[200];
int msgLength,i;
char *stateName, *timer;
if (pipe(FIFO) == -1)
{
printf("cannot create pipe\n");
exit(1);
}
sprintf(fileDescriptor, "%d", FIFO[READ]);
stateName = "UP2"; // for instance
timer = "98"; // for instance
msgLength = strlen(stateName) + strlen(timer) +3;
strcpy(msg, stringMaker(stateName, timer) );
write(FIFO[WRITE], msg, msgLength);
switch (fork())
{
case 0:
sprintf(lengthInChar, "%d", msgLength);
execl("ProcessNo3_TEST", "ProcessNo3_TEST", lengthInChar, fileDescriptor, NULL);
exit(1);
case -1:
perror("fork() failed-->");
exit(2);
default:
break;
}
sleep(10);
exit(0);
}
char* stringMaker( char *s1,char *s2 )
{
char *s3;
strcpy(s3,s1);
strcat(s3,"-");
strcat(s3,s2);
strcat(s3,"-");
strcat(s3,"\0");
return s3;
}
برنامه بالا برای ارسال یکبار، صحیح عمل می کنه. به عنوان مثال در کد بالا دو مقدار UP2 و 98 به child فرستاده شده اند که می بینید به طور صحیح دریافت شده اند و نشون داده میشن:
135892
اما همونطور که گفتم نیاز دارم این کار به صورت مکرر انجام بشه.
ممنون می شم از دوستان اگه کسی کمکم کنه. اسم پروسس child هست ProcessNo3_TEST
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define READ 0
#define WRITE 1
int FIFO[2];
char fileDescriptor[10];
char* stringMaker( char *s1,char *s2 );
int main()
{
char lengthInChar[15],msg[200];
int msgLength,i;
char *stateName, *timer;
if (pipe(FIFO) == -1)
{
printf("cannot create pipe\n");
exit(1);
}
sprintf(fileDescriptor, "%d", FIFO[READ]);
stateName = "UP2"; // for instance
timer = "98"; // for instance
msgLength = strlen(stateName) + strlen(timer) +3;
strcpy(msg, stringMaker(stateName, timer) );
write(FIFO[WRITE], msg, msgLength);
switch (fork())
{
case 0:
sprintf(lengthInChar, "%d", msgLength);
execl("ProcessNo3_TEST", "ProcessNo3_TEST", lengthInChar, fileDescriptor, NULL);
exit(1);
case -1:
perror("fork() failed-->");
exit(2);
default:
break;
}
sleep(10);
exit(0);
}
char* stringMaker( char *s1,char *s2 )
{
char *s3;
strcpy(s3,s1);
strcat(s3,"-");
strcat(s3,s2);
strcat(s3,"-");
strcat(s3,"\0");
return s3;
}
برنامه بالا برای ارسال یکبار، صحیح عمل می کنه. به عنوان مثال در کد بالا دو مقدار UP2 و 98 به child فرستاده شده اند که می بینید به طور صحیح دریافت شده اند و نشون داده میشن:
135892
اما همونطور که گفتم نیاز دارم این کار به صورت مکرر انجام بشه.