今日任务

1.代码
inversion.c
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- int main(int argc, const char *argv[])
- {
- //创建打开共享内存
-
- //1.生成key
- key_t key=ftok("./",1);
- if(-1==key){
- perror("key");
- return -1;
- }
- //2.获取id号
- int shmId=shmget(key,128,IPC_CREAT|0664);
- if(-1==shmId){
- perror("shmget");
- return -1;
- }
- //3.获取映射地址
- void* addr=shmat(shmId,NULL,0);
- if((void *)-1==addr){
- perror("shmat");
- return -1;
- }
- char *q=(char*)addr;
- //创建信号量集,共创建两灯:
- //0:初始值为1,负责打印,打印前0号灯-1;打印结束,1号灯+1;
- //1:初始值为0,负责逆置,逆置前1号灯-1;逆置结束,0号灯+1;
- int semId=semget(key,2,IPC_CREAT|0664);
- if(-1==semId){
- perror("semId");
- return -1;
- }
- struct sembuf sops={0,1,0};
- if(-1==semop(semId,&sops,1)){
- perror("semop");
- return -1;
- }
- puts("初始化完成");
- struct sembuf p={1,-1,0};//1号灯-1
- struct sembuf v={0,1,0};//0号灯+1
- while(1){
- //逆置
- if(-1==semop(semId,&p,1)){
- perror("semop p");
- return -1;
- }
- //操作
- for (int i=0; i<strlen(q)/2; i++)
- {
- char temp=*(q+i);
- *(q+i)=*(q+strlen(q)-1-i);
- *(q+strlen(q)-1-i)=temp;
- }
- if(-1==semop(semId,&v,1)){
- perror("semop p");
- return -1;
- }
- }
- return 0;
- }
print.c
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- int main(int argc, const char *argv[])
- {
- //创建打开共享内存
-
- //1.生成key
- key_t key=ftok("./",1);
- if(-1==key){
- perror("key");
- return -1;
- }
- //2.获取id号
- int shmId=shmget(key,128,IPC_CREAT|0664);
- if(-1==shmId){
- perror("shmget");
- return -1;
- }
- //3.获取映射地址
- void* addr=shmat(shmId,NULL,0);
- if((void *)-1==addr){
- perror("shmat");
- return -1;
- }
- strcpy((char*)addr,"1234567");
- //创建信号量集,共创建两灯:
- //0:初始值为1,负责打印,打印前0号灯-1;打印结束,1号灯+1;
- //1:初始值为0,负责逆置,逆置前1号灯-1;逆置结束,0号灯+1;
- int semId=semget(key,2,IPC_CREAT|0664);
- if(-1==semId){
- perror("semId");
- return -1;
- }
- struct sembuf sops={0,1,0};
- if(-1==semop(semId,&sops,1)){
- perror("semop");
- return -1;
- }
- puts("初始化完成");
- struct sembuf p={0,-1,0};//0号灯-1
- struct sembuf v={1,1,0};//1号灯+1
- while(1){
- //打印,
- if(-1==semop(semId,&p,1)){
- perror("semop p");
- return -1;
- }
- //操作
- sleep(1);
- printf("%s\n",(char*)addr);
- if(-1==semop(semId,&v,1)){
- perror("semop p");
- return -1;
- }
- }
- return 0;
- }
运行结果:

今日思维导图

明日即考,量多待复,汝甚忧之