irnetd.c

来自「linux操作系统下的红外驱动的测试程序」· C语言 代码 · 共 102 行

C
102
字号
/* *	    Automatic PPP connection using irNET * *		Luiz Magalhaes - HPL '00 (luiz_magalhaes@hp.com) *		Jean Tourrilhes - HPL '00 <jt@hpl.hp.com> * *	this program is available under the GNU Public License *	you are welcome to use and change this program as long as *	you keep this notice and make your code available under *	the GPL *//* This program listens to the events in /dev/irnet * and creates a PPP connection if it detects a  * connection request *//* History : * v1.0 : Luiz : just launch ppp * v1.1 : Luiz : add IrDA address selectivity * v1.2 : Jean : Add command line args and more comments * v1.3 : jean : Add "connect-delay 0 idle 10" by default... *//* Usage : * If pppd support the nolock option, just run irnetd. * Otherwise, run : <irnetd noauth> * You can play with more options as you wish... */#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char *argv[]){  char line[255];  char cmd1[] = "pppd /dev/irnet 9600 local ";  char cmd2[] = "noauth nolock connect-delay 0 idle 10 ";  char cmd3[] = "connect \"echo addr \0";  char cmd[255];  char *endp;  char aux[10]= "01235678\"\0";  int i;  FILE *irnet;  /* Start building our command */  strcpy(cmd, cmd1);  /* Check if we have some args to add */  if(argc == 1)    {      /* No arguments - use defaults */      strcat(cmd, cmd2);    }  else    {      /* Put args in the ppp command */      for(i = 1; i < argc; i++)	{	  strcat(cmd, argv[i]);	  strcat(cmd, " ");	}      }  /* Terminate the fixed part of the command */  strcat(cmd, cmd3);  endp = cmd + strlen(cmd);  strcat(cmd, aux);  printf("The command is [%s]\n", cmd);  /* Open IrNET event channel */  irnet = fopen("/dev/irnet","r");  if(irnet == NULL)    {      perror("Error opening /dev/irnet: ");      return(-1);    }  /* Loop forever */  while(1)    {      /* Wait for one event */      fgets(line, 255, irnet);      /* If we have a request...       * Note : we could also trigger on discovery events, but that would       * cause problems in many cases, so we keep to request only */      if(strncmp(line,"Req",3) == 0)	{	  /* Copy over the IrDA address */	  for(i=0; i<8; i++)	    endp[i] = line[i+13];	  /* Run pppd to handle connection */	  if(system(cmd) < 0)	    perror("irnetd: ");	}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?