📄 test.c
字号:
#ifndef AUTO_SCRIPTE#define AUTO_SCRIPTE#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <unistd.h>#include <sys/stat.h>#include <sys/select.h>#include <sys/time.h>#include <time.h>#include <sys/mman.h>#include <fcntl.h>#include <errno.h>#define DEV_PATH "/dev/test"typedef enum _IOCTL_CMD{ IOCTL_SET_SOCKET_FD = 0x7F, /*用户态向内核态 SET一个socket 描述字*/ IOCTL_TEST_OPTION = 0x80, /*用来测试的IOCTL选项*/ IOCTL_SEND_UDP_PACKET = 0x81, /*发送一个 UDP 数据报文*/ IOCTL_WRITE_UDP_PACKET = 0x82, /*write 一个UDP数据报文,结果同上*/ IOCTL_SEND_TCP_PACKET = 0x83, /*发送TCP数据报文*/} ioctl_cmd_enum;/* * 发送数据包的数据结构 * TCP同 调用了connect 函数的UDP只需要前面4个参数够了 * 而没有connect 的 UDP套件字描述符,需要填充后面两个参数 */typedef struct _SEND_PACKET_INFO_{ unsigned int fd; unsigned char *data; unsigned int len; unsigned int flags; struct sockaddr addr; unsigned int addr_len;} send_packet_info_t;send_packet_info_t send_packet_info;int sock_dev_fd = -1;int main( int argc, char *argv[] ){ int tmp_fd = -1, ret = -1; int index; int value = 0; unsigned char *tmp_text = NULL; if( argc == 2 ) value = atoi( argv[1] ); sock_dev_fd = open( DEV_PATH, O_RDWR ); if( 0 > sock_dev_fd ) { fprintf( stderr, "Open %s failed: %s\n", DEV_PATH, strerror( errno ) ); return -1; } tmp_text = ( unsigned char* )mmap( 0, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, sock_dev_fd, 0 ); if( MAP_FAILED == tmp_text ) { fprintf( stderr, "mmap failed: %s.\n", strerror( errno ) ); goto out; } //tmp_text[3] = 'z'; //tmp_text[4] = 'y'; for( index=0; index < 20; index++ ) printf( "%2x \n", tmp_text[index] ); munmap( tmp_text, 0 ); ioctl( sock_dev_fd, 0x44, NULL );out: close( sock_dev_fd ); return 0;}#endif /*#ifdef AUTO_SCRIPTE*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -