如何使用管道传送结构体?

[复制链接]
查看11 | 回复2 | 2009-4-17 15:52:26 | 显示全部楼层 |阅读模式
#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中编写的

回复

使用道具 举报

千问 | 2009-4-17 15:52:26 | 显示全部楼层
pipe传输时,数据是字节流,相当于char [] ;所以用s1 [100] 接收就可以。显式的类型转换应该是:write(fd[1],(void *)&stu1,length); 。。。read(fd[0],(void *)s1,length); 可以定义一个Student * ps ;ps = (Stuant *) s1 ;然后 insert (1, ps) ;就能理解了吧...
回复

使用道具 举报

千问 | 2009-4-17 15:52:26 | 显示全部楼层
多给点分,会有人出来回答你的。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行