当前位置: 技术问答>linux和unix
linux c的小问题,在线
来源: 互联网 发布时间:2016-09-19
本文导语: 我的题目是创建两个线程,一个从输入流中读数据并放到消息队列中,另一个从消息队列中读数据并显示到屏幕上 代码 //help.c #include "svmsg1.h" key_t key; pthread_t p1,p2; int msqid; struct msgbuf *mymsg,*remsg; void mfree(struct ms...
我的题目是创建两个线程,一个从输入流中读数据并放到消息队列中,另一个从消息队列中读数据并显示到屏幕上
代码
//help.c
#include "svmsg1.h"
key_t key;
pthread_t p1,p2;
int msqid;
struct msgbuf *mymsg,*remsg;
void mfree(struct msgbuf* m1,struct msgbuf *m2)
{
if(m1 != NULL)
free(m1);
if(m2 != NULL)
free(m2);
return ;
}
void *p1_fnc(void *arg)
{
mymsg =(struct msgbuf*)malloc(sizeof(struct msgbuf));
if( mymsg == NULL)
exit(-1);
mymsg->mtype = 1;
fread(mymsg->mtext,1,MAXMSGDATA,stdin);
msgsnd(msqid, mymsg,sizeof(mymsg->mtext),0);
return ((void*) 0);
}
void *p2_fnc(void *arg)
{
remsg = (struct msgbuf*)malloc(sizeof(struct msgbuf));
if (remsg == NULL)
exit(-1);
if ( (msgrcv(msqid,remsg,sizeof(remsg->mtext),remsg->mtype,0)) == -1)
{
perror("msgrcv");
mfree(mymsg,remsg);
exit(-1);
}
fputs(remsg->mtext,stdout);
return ( (void *)0);
}
int main(int argc ,char **argv)
{
char *s;
if(fgets(s,100,stdin) == NULL)
{
perror("fgets error");
return -1;
}
if((key = ftok(argv[1],0)) == -1)
{
perror("ftok error");
return -1;
}
if((msqid= msgget(key, flags)) == -1)
{
perror("ftok error");
return -1;
}
pthread_create(&p1,NULL,p1_fnc,NULL);
pthread_create(&p2,NULL,p2_fnc,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
mfree(mymsg,remsg);
return 0;
}
gcc xxxxxxxxxxxx
./a.out /hp
xxxxxx
segument error
最后的输出错误忘了,我是个新手,linux学起来很吃力,哪位大哥帮我看一下
代码
//help.c
#include "svmsg1.h"
key_t key;
pthread_t p1,p2;
int msqid;
struct msgbuf *mymsg,*remsg;
void mfree(struct msgbuf* m1,struct msgbuf *m2)
{
if(m1 != NULL)
free(m1);
if(m2 != NULL)
free(m2);
return ;
}
void *p1_fnc(void *arg)
{
mymsg =(struct msgbuf*)malloc(sizeof(struct msgbuf));
if( mymsg == NULL)
exit(-1);
mymsg->mtype = 1;
fread(mymsg->mtext,1,MAXMSGDATA,stdin);
msgsnd(msqid, mymsg,sizeof(mymsg->mtext),0);
return ((void*) 0);
}
void *p2_fnc(void *arg)
{
remsg = (struct msgbuf*)malloc(sizeof(struct msgbuf));
if (remsg == NULL)
exit(-1);
if ( (msgrcv(msqid,remsg,sizeof(remsg->mtext),remsg->mtype,0)) == -1)
{
perror("msgrcv");
mfree(mymsg,remsg);
exit(-1);
}
fputs(remsg->mtext,stdout);
return ( (void *)0);
}
int main(int argc ,char **argv)
{
char *s;
if(fgets(s,100,stdin) == NULL)
{
perror("fgets error");
return -1;
}
if((key = ftok(argv[1],0)) == -1)
{
perror("ftok error");
return -1;
}
if((msqid= msgget(key, flags)) == -1)
{
perror("ftok error");
return -1;
}
pthread_create(&p1,NULL,p1_fnc,NULL);
pthread_create(&p2,NULL,p2_fnc,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
mfree(mymsg,remsg);
return 0;
}
gcc xxxxxxxxxxxx
./a.out /hp
xxxxxx
segument error
最后的输出错误忘了,我是个新手,linux学起来很吃力,哪位大哥帮我看一下
|
首先发现个大问题:
int main(int argc ,char **argv)
{
char *s;
if(fgets(s,100,stdin) == NULL)
{
perror("fgets error");
return -1;
}
指针s问题,注意,野指针,改成char s[1024];
int main(int argc ,char **argv)
{
char *s;
if(fgets(s,100,stdin) == NULL)
{
perror("fgets error");
return -1;
}
指针s问题,注意,野指针,改成char s[1024];