📄 ser.c
字号:
#include <stdio.h>#include <string.h>#include <pthread.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <termios.h>#include <fcntl.h>#include <errno.h>#include <sys/socket.h>#include <netinet/in.h>#include "ser.h"//#include <sys/pthreadtypes.h>int gi=0;FILE *fp;void thread1(void) { int i; while(1) { i=i+1; gi=gi+1; printf("this is thread1\n"); sleep(10); } }// read card id threadvoid read_id(){unsigned char read_command[7]={0x05,0x00,0x01,0x02,0xbc,0x57};char *dev="/dev/ttyS1";int fd,nread;char receive_buffer[0x30];int i;fd=OpenSerDev(dev);while(1) { write(fd,read_command,6); if((nread=read(fd,receive_buffer,20))>0) { printf("char "); for(i=0;i<nread;i++) { printf("%x",receive_buffer[i]); }// printf("%s\n",receive_buffer); printf("\n"); usleep(100000); }// printf("\n"); }}//socket process threadvoid socket_process_thread(int *socketfd){char receive_buffer[0x20];int receive_length;int accept_fd=*socketfd;while((receive_length=recv(accept_fd,receive_buffer,sizeof(receive_buffer),0))>0) { printf("receive char %s\n",receive_buffer); fseek(fp,10,SEEK_END); fwrite(receive_buffer,sizeof(receive_buffer),1,fp); } //send(accept_fd,"abcdefghijk",20,0);close(accept_fd);}void NetServer(){struct sockaddr_in server_addr,client_addr;int sockfd;int addr_length;int accept_fd;int receive_length;char receive_buffer[0xff];pthread_t id;sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0) { perror("socket create error\n"); return; }memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(9000);if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr))) { perror("bind error\n"); return; }if(listen(sockfd,32)<0) { perror("listen error\n"); return; }addr_length=sizeof(client_addr);while(1) { accept_fd=accept(sockfd,(struct sockaddr *)&client_addr,&addr_length); printf("accept\n"); if(accept_fd>0) { pthread_create(&id,NULL,(void *)socket_process_thread,&accept_fd); } }}void thread2(void){NetServer();}int OpenSerDev(char *Dev){ struct termios options; int fd=open(Dev,O_RDWR|O_NOCTTY|O_NDELAY); if(fd==-1) { perror("can't open serial port\n"); return -1; } else { tcgetattr(fd,&options); options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG); options.c_cc[VMIN]=4; // options.c_oflag&=~OPOST; options.c_cc[VTIME]=3; fcntl(fd,F_SETFL,O_APPEND);//FASYNC); //O_APPEND);// cfmakeraw(&options); tcsetattr(fd,TCSANOW,&options); } return fd;}//open or creat the filevoid OpenFile(){//FILE *fp;char *str="abcdefghijljlasjdfj\n";if((fp=fopen("/mnt/test.txt","w+"))==NULL) { perror("create file failure\n"); }fputs(str,fp);//fclose(fp);}int main(void) { int ret; pthread_attr_t attr; pthread_t id,id2,id3; int fd; int nread; char buff[0x20]; size_t stack; // set_speed(fd,19200); OpenFile(); ret=pthread_attr_init(&attr); if(ret!=0) printf("pthread init faulure\n"); pthread_attr_getstacksize(&attr,&stack); printf("stack size %x \n",stack); ret=pthread_create(&id,NULL,(void *)(thread1),NULL); if(ret!=0) printf("thread1 create failure\n"); ret=pthread_create(&id2,NULL,(void *)(thread2),NULL); if(ret!=0) printf("thread2 create failure %x\n",ret); ret=pthread_create(&id3,NULL,(void *)(read_id),NULL); if(ret!=0) printf("read_id thread create failure\n"); while(1) { sleep(10); } pthread_join(id,NULL); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -