ias_query.c

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

C
94
字号
#include <sys/socket.h>#include <sys/types.h>#include <sys/time.h>#include <sys/ioctl.h>#include <sys/stat.h>#include <sys/wait.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include <irda.h>int ias_query(int fd, int daddr, char *class, char *attrib){	struct irda_ias_set query;	int len;	len = sizeof(struct irda_ias_set);	printf("Querying for %s:%s\n", class, attrib);	strncpy(query.irda_class_name, class, IAS_MAX_CLASSNAME);	strncpy(query.irda_attrib_name, attrib, IAS_MAX_ATTRIBNAME);	if(daddr)		query.daddr = daddr;	if (getsockopt(fd, SOL_IRLMP, IRLMP_IAS_QUERY, &query, &len)) {		perror("getsockopt");		exit(-1);	}	if (len > 0) {		printf("Success2\n");		switch (query.irda_attrib_type) {		case IAS_INTEGER:			printf("%s:%s=%d\n", class, attrib, 			       query.attribute.irda_attrib_int);			break;		case IAS_OCT_SEQ:			printf("got octseq\n");			break;		case IAS_STRING:			printf("%s:%s=%s\n", class, attrib, 			       query.attribute.irda_attrib_string.string);			break;		case IAS_MISSING:			printf("Missing!\n");			break;		default:			printf("Unknown type %d!\n", query.irda_attrib_type);			break;		}	}	return 0;}/* * Function main (argc, ) * *     * */int main(int argc, char *argv[]){	int fd;	int iraddr;	/* Create socket */	fd = socket(AF_IRDA, SOCK_STREAM, 0);	if (fd < 0) {		perror("socket");		exit(-1);        }	/* Check args */	if(argc < 4) {		fprintf(stderr, "Usage : %s iraddr class attrib\n", argv[0]);		return 0;	}	/* Convert IrDA address to binary */	if(sscanf(argv[1], "%X", &iraddr) != 1) {		fprintf(stderr, "Invalid address: \"%s\"...\n", argv[1]);		return 0;	}	ias_query(fd, iraddr, argv[2], argv[3]);	return 0;}

⌨️ 快捷键说明

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