#include <sys/wait.h>
#include <unistd.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="Hello, World!";
pid_t pid;
int shm_id;
if((shm_id=shmget(IPC_PRIVATE,sizeof(int),IPC_CREAT|0666))<0){
perror("shmget");
return 0;
}
int *shm_addr;
if((shm_addr=(int *)shmat(shm_id,NULL,0))==(int*)-1){
perror("shmat");
return 1;
}
for(int i=0;i<s.size();i++){
pid=fork();
if(pid==-1)
cout<<"fork error"<<endl;
else if(pid==0)
break;
else
continue;
}
if(pid>0){
for(int i=0;i<s.size();++i)
wait(NULL);
sleep(1);
if((shmctl(shm_id,IPC_RMID,0))==-1){
perror("shmctl");
exit(-1);
}
cout<<endl;
}else{
int *sp=(int*)shmat(shm_id,NULL,0);
sleep(2);
cout<<s[*sp];
(*sp)++;
exit(0);
}
return 0;
}
I2luY2x1ZGUgPHN5cy93YWl0Lmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy9zaG0uaD4KI2luY2x1ZGUgPHN5cy9pcGMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiAKaW50IG1haW4oKXsKICAgICAgICBzdHJpbmcgIHM9IkhlbGxvLCBXb3JsZCEiOwogCiAgICAgICAgcGlkX3QgcGlkOwogICAgICAgIGludCBzaG1faWQ7CiAgICAgICAgaWYoKHNobV9pZD1zaG1nZXQoSVBDX1BSSVZBVEUsc2l6ZW9mKGludCksSVBDX0NSRUFUfDA2NjYpKTwwKXsKICAgICAgICAgICAgICAgICBwZXJyb3IoInNobWdldCIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpbnQgKnNobV9hZGRyOwogICAgICAgIGlmKChzaG1fYWRkcj0oaW50ICopc2htYXQoc2htX2lkLE5VTEwsMCkpPT0oaW50KiktMSl7CiAgICAgICAgICAgICAgICBwZXJyb3IoInNobWF0Iik7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAKICAgICAgICBmb3IoaW50IGk9MDtpPHMuc2l6ZSgpO2krKyl7CiAgICAgICAgICAgICAgICBwaWQ9Zm9yaygpOwogICAgICAgICAgICAgICAgaWYocGlkPT0tMSkKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ImZvcmsgZXJyb3IiPDxlbmRsOwogICAgICAgICAgICAgICAgZWxzZSBpZihwaWQ9PTApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAKICAgICAgICBpZihwaWQ+MCl7CiAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPHMuc2l6ZSgpOysraSkKICAgICAgICAgICAgICAgICAgICAgICAgd2FpdChOVUxMKTsKICAgICAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICAgICAgaWYoKHNobWN0bChzaG1faWQsSVBDX1JNSUQsMCkpPT0tMSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigic2htY3RsIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY291dDw8ZW5kbDsKIAogICAgICAgIH1lbHNlewogCiAgICAgICAgICAgICAgICBpbnQgKnNwPShpbnQqKXNobWF0KHNobV9pZCxOVUxMLDApOwogICAgICAgICAgICAgICAgc2xlZXAoMik7CiAgICAgICAgICAgICAgICBjb3V0PDxzWypzcF07CiAgICAgICAgICAgICAgICAoKnNwKSsrOwogICAgICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0=