作业
第一题:
由于共享内存没有同步,想办法搞定共享内存的同步问题
第二题:
使用第一题作用已经实现的共享内存,去做2个终端之间的互相聊天
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct mapper
{
char chat[256];
int flag;
}ma_t;
void* task(void* arg)
{
ma_t* attr2=(ma_t*)arg;
while(1)
{
while(attr2->flag == 0)
{
usleep(10000);
}
printf("对方:%s\n",attr2->chat);
attr2->flag=0;
}
}
int main(int argc, const char *argv[])
{
key_t key=ftok("./1.txt",1);
int id=shmget(key,1024,IPC_CREAT | 0666);
ma_t* attr=shmat(id,0,0);
key_t key2=ftok("./2.txt",2);
int id2=shmget(key2,1024,IPC_CREAT | 0666);
ma_t* attr2=shmat(id2,0,0);
attr->flag=0;
pthread_t pth_id;
pthread_create(&pth_id,0,task,(void*)attr2);
while(1)
{
scanf("%s",attr->chat);
attr->flag=1;
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct mapper
{
char chat[256];
int flag;
}ma_t;
void* task(void* arg)
{
ma_t* attr2=(ma_t*)arg;
attr2->flag=0;
while(1)
{
scanf("%s",attr2->chat);
attr2->flag=1;
}
}
int main(int argc, const char *argv[])
{
key_t key=ftok("./1.txt",1);
int id=shmget(key,1024,IPC_CREAT | 0666);
ma_t* attr=shmat(id,0,0);
key_t key2=ftok("./2.txt",2);
int id2=shmget(key2,1024,IPC_CREAT | 0666);
ma_t* attr2=shmat(id2,0,0);
pthread_t pth_id;
pthread_create(&pth_id,0,task,(void*)attr2);
while(1)
{
while(attr->flag == 0)
{
usleep(10000);
}
printf("对方:%s\n",attr->chat);
attr->flag=0;
}
return 0;
}