linux c读取tty和消息队列的使用demo

来源:互联网 发布:中控科门禁软件下载 编辑:程序博客网 时间:2024/06/04 23:26
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#define TTY0 "/dev/pts/0"#define TTY1 "/dev/pts/12"#define TTY2 "/dev/pts/14"#define TTY3 "/dev/pts/3"void tty_write(char* tty,char* buff){int fd=-1;fd=open(tty,O_RDWR);if(fd<0){printf("open errror\n");//perror("open tty error\n");exit(-1);}write(fd,buff,strlen(buff));close(fd);}int main(int argc, char const *argv[]){char buff[]="test tty... \n";char tty[32]={0};strcpy(tty,TTY1);tty_write(tty,buff);strcpy(tty,TTY2);tty_write(tty,buff);strcpy(tty,TTY0);tty_write(tty,buff);return 0;}

//msg_send.c#include <stdio.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MAX_TEXT 512typedef struct my_msg_st{long int my_msg_type;char some_text[MAX_TEXT];} my_msg_st;//Linux c消息队列的使用int main(int argc, char const *argv[]){int running=1;my_msg_st some_data;int msgid;char buffer[BUFSIZ];printf("BUFSIZ=%d\n", BUFSIZ);msgid=msgget((key_t)1234,0666|IPC_CREAT);if(msgid==-1){fprintf(stderr, "msgget failed with error:%s\n", strerror(errno));exit(-1);}while(running){printf("enter some text:\n");fgets(buffer,BUFSIZ,stdin);some_data.my_msg_type=1;//初始化消息类型strcpy(some_data.some_text,buffer);//添加到消息队列if(msgsnd(msgid,(void*)&some_data,MAX_TEXT,0)==-1){fprintf(stderr, "msgsnd failed\n");exit(-1);}if(strncmp(buffer,"end",3)==0){running=0;}system("ipcs -q");}return 0;}

//msg_recv.c#include <stdio.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MAX_TEXT 512typedef struct my_msg_st{long int my_msg_type;char some_text[MAX_TEXT];} my_msg_st;//Linux c消息队列的使用int main(int argc, char const *argv[]){int running=1;my_msg_st some_data;int msgid;long int msg_to_receive=0;//消息类型msgid=msgget((key_t)1234,0666|IPC_CREAT);if(msgid==-1){fprintf(stderr, "msgget failed with error:%s\n", strerror(errno));exit(-1);}while(running){//从消息队列获取消息,要指定消息类型if(msgrcv(msgid,(void*)&some_data,MAX_TEXT,msg_to_receive,0)==-1){fprintf(stderr, "msgsnd failed\n");exit(-1);}printf("You write:%s\n", some_data.some_text);if(strncmp(some_data.some_text,"end",3)==0){running=0;}}if(msgctl(msgid,IPC_RMID,0)==-1){fprintf(stderr, "msgctl IPC_RMID failed\n");exit(-1);}return 0;}

0 0