学习 Linux高级编程08_B
来源:互联网 发布:r软件的使用 编辑:程序博客网 时间:2024/06/04 19:29
Ipcs
shmA.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
main()
{
key_t key;
int shmid;
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4, IPC_CREAT|IPC_EXCL|0666);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
//3 访问共享内存
//4 卸载共享内存shmdt
//5 删除共享内存shctl
}
运行两次
Ipcrm –m shmid编号
再次运行,产生的shmid是不同的
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
main()
{
key_t key;
int shmid;
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4, IPC_CREAT|IPC_EXCL|0666);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
//3 访问共享内存
//4 卸载共享内存shmdt
//5 删除共享内存shctl
shmctl(shmid, IPC_RMID, 0);
}
ShmA2.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
main()
{
key_t key;
int shmid;
int *p;
int i =0;
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4, IPC_CREAT|IPC_EXCL|0666);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
p = shmat(shmid, 0,0);
if(p == (int *)-1)
{
printf("shmat error: %m\n"), exit(-1);
}
//3 访问共享内存
while(1)
{
*p = i;
i ++;
sleep(1);
}
//4 卸载共享内存shmdt
shmdt(p);
//5 删除共享内存shctl
shmctl(shmid, IPC_RMID, 0);
}
shmB2.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
main()
{
key_t key;
int shmid;
int *p;
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4,0);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
p = shmat(shmid, 0,0);
if(p = (int *)-1)
{
printf("shmat error: %m\n"), exit(-1);
}
//3 访问共享内存
while(1)
{
sleep(1);
printf("%d\n", *p);
}
//4 卸载共享内存shmdt
shmdt(p);
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
key_t key;
int shmid;
int *p;
int i =0;
void deal(int s)
{
if(s == SIGINT)
{
//4 卸载共享内存shmdt
shmdt(p);
//5 删除共享内存shctl
shmctl(shmid, IPC_RMID, 0);
exit(0);
}
}
main()
{
signal(SIGINT, deal);
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4, IPC_CREAT|IPC_EXCL|0666);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
p = shmat(shmid, 0,0);
if(p == (int *)-1)
{
printf("shmat error: %m\n"), exit(-1);
}
//3 访问共享内存
while(1)
{
*p = i;
i ++;
sleep(1);
}
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/shm.h>
#include<sys/ipc.h> //ftok()
key_t key;
int shmid;
int *p;
void deal(int s)
{
if(s == 2)
{
//4 卸载共享内存shmdt
shmdt(p);
exit(0);
}
}
main()
{
signal(SIGINT, deal);
//1 创建共享内存shmget
key = ftok(".", 255);
if(key == -1)
{
printf("ftok error:%m\n"), exit(-1);
}
shmid = shmget(key, 4,0);
if(shmid == -1)
{
printf("shmget error:%m\n"), exit(-1);
}
//2 挂载共享内存shmat
p = shmat(shmid, 0,0);
if(p = (int *)-1)
{
printf("shmat error: %m\n"), exit(-1);
}
//3 访问共享内存
while(1)
{
sleep(1);
printf("%d\n", *p);
}
}
msgA.c
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct msbuf
{
long type;
char data[32];
};
main()
{
key_t key;
int msgid;
int i;
//1 创建消息队列
key = ftok(".", 200);
if(key == -1)
{
printf("ftok error %m"), exit(-1);
}
msgid = msgget(key, IPC_CREAT | IPC_EXCL | 0666);
if(msgid == -1)
{
printf("msgid error %m"), exit(-1);
}
//2 构造消息
struct msgbuf msg;
//3 发送消息
for(i = 1; i <= 10; i ++)
{
bzero(msg.data, sizeof(msg.data));
msg.type = 1;
sprintf(msg.data, "Message:%d", i);
msgsnd(msgid, &msg, sizeof(msg.data),0);
}
for(i = 1; i <= 10; i ++)
{
bzero(msg.data, sizeof(msg.data));
msg.type = 2;
sprintf(msg.data, "MessageII":%d, i);
msgsnd(msgid, &msg, sizeof(msg.data),0);
}
//4 删除队列
//msgctl(msgid, IPC_RMID, 0);
}
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct msbuf
{
long type;
char data[32];
};
main()
{
key_t key;
int msgid;
int i;
//1 得到消息队列
key = ftok(".", 200);
if(key == -1)
{
printf("ftok error %m"), exit(-1);
}
msgid = msgget(key, 0);
if(msgid == -1)
{
printf("msgid error %m"), exit(-1);
}
//2 构造消息
struct msgbuf msg;
//3 接收消息
while(1)
{
bzero(&msg, sizeof(msg));
msg.type = 2;
msgrc(msgid, &msg, sizeof(msg.data), 1, 0);
printf("%s", msg.data);
}
}
socketA.c
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
main()
{
int fd;
//1 建立socket
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if(fd == -1)
{
printf("socket error: %m\n"), exit(-1);
}
printf("%d : %d\n", getpid(), fd);
while(1);
}
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<linux/un.h>
main()
{
int fd;
int r;
char buf[200];
//1 建立socket
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if(fd == -1)
{
printf("socket error: %m\n"), exit(-1);
}
printf("socket success\n");
//2 构造本地文件地址
struct sockaddr_un addr={0};
addr.sun_family=AF_UNIX;
memcpy(addr.sun_path, "my.socket", strlen("my.socket"));
//3 把socket绑定在地址上
r = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
if(r == -1)
{
printf("bind error: %m\n"), exit(-1);
}
printf("bind success\n");
//4 接收数据
bzero(buf, sizeof(buf));
r = read(fd, buf, sizeof(buf);
buf[r] = 0;
printf("%s\n", buf);
//5 关闭
close(fd);
//6 删除socket文件
//unlink("my.sock");
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<linux/un.h>
#include<string.h>
#include<unistd.h>
main()
{
int fd;
int r;
struct sockaddr_un addr={0};
//1 建立socket
fd = socket(Af_UNIX, SOCK_DGRAM, 0);
//2 连接到指定的地址
add.sun_family = AF_UNIX;
memcpy(add.sun_path, "my.sock", strlen("my.sock"));
r = connect(fd, (struct sockaddr*)&addr, sizeof(addr));
//3 发送数据
write(fd, "hello", strlen("hello"));
//4 关闭
close(fd);
}
ipA.c
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
//1
#include<netinet/in.h> //socket结构体
#include<arpa/inet.h>
main()
{
int fd;
int r;
char buf[200];
//1 建立socket
//2
fd = socket(AF_INET,SOCK_DGRAM, 0);
if(fd == -1)
{
printf("socket error: %m\n"), exit(-1);
}
printf("socket success\n");
//2 构造本地文件地址
struct sockaddr_in addr={0};
//3
addr.sin_family=AF_INET;
addr.sin_port = htons(9999);
addr.sin_addr.s_addr = inet_addr("192,168.1.66");
//3 把socket绑定在地址上
r = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
if(r == -1)
{
printf("bind error: %m\n"), exit(-1);
}
printf("bind success\n");
//4 接收数据
while(1)
{
bzero(buf, sizeof(buf));
r = read(fd, buf, sizeof(buf));
buf[r] = 0;
printf("%s\n", buf);
}
//5 关闭
close(fd);
//6 删除socket文件
unlink("my.sock");
}
ipB.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<string.h>
#include<unistd.h>
//1
#include<netinet/in.h>
#include<arpa/inet>
main()
{
int fd;
int r;
//2
struct sockaddr_in addr={0};
//1 建立socket
//3
fd = socket(Af_INET, SOCK_DGRAM, 0);
//2 连接到指定的地址
//4
addr.sin_family = AF_INET;
addr.sin_port = htons(9999);
addr.sin_addr.s_addr = inet_addr("192,168.1.66");
r = connect(fd, (struct sockaddr*)&addr, sizeof(addr));
//3 发送数据
write(fd, "hello", strlen("hello"));
//4 关闭
close(fd);
}
- 学习 Linux高级编程08_B
- 学习 Linux高级编程05_B
- 学习 Linux高级编程06_B
- 学习 Linux高级编程07_B
- 学习 Linux高级编程09_B
- 学习 Linux高级编程08_A
- 学习 Linux高级编程01
- 学习 Linux高级编程02
- 学习 Linux高级编程03
- linux高级编程学习网址
- Linux高级编程学习资料
- 学习 Linux高级编程05_A
- 学习 Linux高级编程06_A
- 学习 Linux高级编程07_A
- 学习 Linux高级编程09_A
- 寒假学习 第四、五天 (linux 高级编程)
- c++ 学习笔记(高级linux编程) day1
- c++ 学习笔记(高级linux编程) day2
- Permissions problems after running Qt Creator with priviliges on Linux(ubuntu)
- 学习 Linux高级编程08_A
- 教你修改eclipse创建android project时默认生成的包名
- Android应用程序的默认最大内存值
- java解析xml文件
- 学习 Linux高级编程08_B
- Android 之SQLite数制库
- CoolPad 8190工程模式
- WPF 属性变更通知类的实现
- 近期(5月2日到6月15日)PCM相关文章一览
- CreateThread CreateProcess
- linux下mysql配置文件my.cnf详解
- IOS 开发环境,证书和授权文件是什么?
- 同步与互斥(多线程/多进程)