当前位置: 技术问答>linux和unix
高手大神们来帮小弟看个程序!急呀!!!
来源: 互联网 发布时间:2016-10-30
本文导语: 程序作用是:父进程创建一块共享内存,子进程接收输入的信息然后传给父进程。父进程显示接收到的信息,当接收到以end为前缀的字符串时,程序结束。 运行结果: child begin: please input your txt: f begin: zzzzzzzz your...
程序作用是:父进程创建一块共享内存,子进程接收输入的信息然后传给父进程。父进程显示接收到的信息,当接收到以end为前缀的字符串时,程序结束。
运行结果:
child begin:
please input your txt:
f begin:
zzzzzzzz
your msg:
please input your txt:
问题就在your msg:下面不能输出zzzzzzzz
另外我是在学校机房作实验,没有root权限,有关系么?
用gcc编译的
下面是代码:
/*
*file:sem2.c
*gcc sem2.c -o op2
*/
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 2048
#define MAXTRY 20
int emptyid=1;
int fullid=0;
int main()
{
int child,i,j;
struct sembuf P,V;
union semun arg;
int shmid;
char *viraddr;
char buffer[BUFSIZE];
emptyid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);
fullid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);
arg.val=1;
if(semctl(emptyid,0,SETVAL,arg)==-1)
perror("semctl setval emptyid error.n");
arg.val=0;
if(semctl(fullid,0,SETVAL,arg)==-1)
perror("semctl setval fullid error.n");
P.sem_num=0;
P.sem_op=-1;
P.sem_flg=SEM_UNDO;
V.sem_num=0;
V.sem_op=1;
V.sem_flg=SEM_UNDO;
while ((child=fork())==-1);
if(child>0)
{ printf("f begin:n");
for (i=0;i
运行结果:
child begin:
please input your txt:
f begin:
zzzzzzzz
your msg:
please input your txt:
问题就在your msg:下面不能输出zzzzzzzz
另外我是在学校机房作实验,没有root权限,有关系么?
用gcc编译的
下面是代码:
/*
*file:sem2.c
*gcc sem2.c -o op2
*/
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 2048
#define MAXTRY 20
int emptyid=1;
int fullid=0;
int main()
{
int child,i,j;
struct sembuf P,V;
union semun arg;
int shmid;
char *viraddr;
char buffer[BUFSIZE];
emptyid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);
fullid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);
arg.val=1;
if(semctl(emptyid,0,SETVAL,arg)==-1)
perror("semctl setval emptyid error.n");
arg.val=0;
if(semctl(fullid,0,SETVAL,arg)==-1)
perror("semctl setval fullid error.n");
P.sem_num=0;
P.sem_op=-1;
P.sem_flg=SEM_UNDO;
V.sem_num=0;
V.sem_op=1;
V.sem_flg=SEM_UNDO;
while ((child=fork())==-1);
if(child>0)
{ printf("f begin:n");
for (i=0;i