1.信号
include "myhead.h"
//定义信号处理函数
void handler(int signo)
{if(signo == SIGINT){printf("用户按下了ctrl + c键,hello world\n");}
}int main(int argc, const char *argv[])
{if(signal(SIGINT, handler) == SIG_ERR){perror("signal error");return -1;}return 0;
}
2.无名管道
#include "myhead.h"
int main(int argc, const char *argv[])
{ int pid=0;int fd[2]={0};char buf[128]={0};if(pipe(fd) == -1){//建立管道printf("creat pipe failed\n");}if(pid=fork()<0){perror("fork error\n");}else if(pid >0){//父进程sleep(3);printf("father\n");close(fd[0]);//父进程关闭读端write(fd[1],"father",strlen("father"));//父进程对管道内写入}else{//子进程printf("child\n");close(fd[1]);//子进程关闭写端read(fd[0],buf,128);//从管道内读出数据printf("read:%s\n",buf);}return 0;
}
3.共享内存
读端
#include "myhead.h"
int main(int argc, const char *argv[])
{//创建一个key值key_t key = ftok("/", 't');if(key == -1){perror("ftok error");return -1;}printf("key = %#x\n", key);//通过key值创建共享内存段int shmid = shmget(key, 4096, IPC_CREAT|0664);if(shmid == -1){perror("shmget error");return -1;}printf("shmid = %d\n", shmid);//将共享内存段映射到用户空间char *addr = (char *)shmat(shmid, NULL, 0);if(addr == (void*)-1 ){perror("shmat error");return -1;}//使用共享内存段while(1){//读取共享内存中的数据printf("共享内存中的数据为: %s\n", addr); if(strcmp(addr, "quit") == 0){break;}}//取消映射if(shmdt(addr) == -1){perror("shmdt error");return -1;}//删除共享内存if(shmctl(shmid, IPC_RMID, NULL) == -1){perror("shmctl error");return -1;}return 0;
}
写端
#include "myhead.h"
int main(int argc, const char *argv[])
{key_t key = ftok("/", 't');if(key == -1){perror("ftok error");return -1;}printf("key = %#x\n", key);//通过key值创建共享内存段int shmid = shmget(key, 4096, IPC_CREAT|0664);if(shmid == -1){perror("shmget error");return -1;}printf("shmid = %d\n", shmid);//将共享内存段映射到用户空间char *addr = (char *)shmat(shmid, NULL, 0);if(addr == (void*)-1 ){perror("shmat error");return -1;}printf("addr = %p\n", addr);//输出映射的虚拟地址//4、使用共享内存段while(1){printf("请输入>>>>");fgets(addr, 4096, stdin);//向共享内存中输入数据addr[strlen(addr)-1] = 0; if(strcmp(addr, "quit") == 0){break;}}//取消addr对共享内存的映射关系if(shmdt(addr) == -1){perror("shmdt error");return -1;}return 0;
}