#include
#include
#include
struct student
{
char no[10];
char name[10];
char sex[10];
char email[30];
char tel[10];
};
void insert(int i,struct student *s)
{
printf ("input student%d's message:\n",i);
printf ("no:");
gets(s->no);
printf ("name:");
gets(s->name);
printf ("sex:");
gets(s->sex);
printf ("email:");
gets(s->email);
printf ("tel:");
gets(s->tel);
}
main()
{
int id1,id2,fd[2],length;
length=sizeof(struct student);
struct student stu1,stu2;
char buf[100],s1[100],s2[100];
pipe(fd);
insert(1,&stu1);
insert(2,&stu2);
while ((id1=fork())==-1);
if (id1==0)
{
printf("Student1 is sending message!\n");
write(fd[1],&stu1,length);
exit(0);
}
while ((id2=fork())==-1);
if (id2==0)
{
printf("Student2 is sending message!\n");
write(fd[1],&stu2,length);
exit(0);
}
else
{
wait(0);
read(fd[0],s1,length);
read(fd[0],s2,length);
printf("%s %s %s %s %s\n",&s1[0],&s1[10],&s1[20],&s1[30],&s1[60]);
printf("%s %s %s %s %s\n",&s2[0],&s2[10],&s2[20],&s2[30],&s2[60]);
exit(0);
}
}
这个是我写的用管道传送结构体的函数,在调用read(fd(0),,length)函数的时候,第二个参数理论上也应该是一个student的结构体来接收,为什么这里用一个字符串数字来接收也可以使函数运行?
调试结果:
input student1's message:
no:1
name:2
sex:3
email:4
tel:5
input student2's message:
no:6
name:7
sex:8
email:9
tel:0
student1 is sending message!
student2 is sending message!
1 2 3 4 5
6 7 8 9 0
(结果没打完)
附:这个是在linux中编写的
|