t_file *new_file(t_args *a, char *path, char *name) { t_file *file; char *tmp; //acl_t ac; int i; tmp = set_filename(path, name, 0); i = 0; if ((file = (t_file*)malloc(sizeof(t_file)))) { file->next = NULL; lstat(tmp, &file->s); init_print(name, &file->s, a->mask, &file->p); /*if ((ac = acl_get_file(tmp, ACL_TYPE_EXTENDED))) { file->p.acl = 1; acl_free((void *)ac); }*/ if ((file->s.st_mode & S_IFMT) == S_IFLNK && (i = readlink(tmp, file->p.lnk, sizeof(char) * 1024))) file->p.lnk[i] = 0; //file->p.attr = listxattr(tmp, NULL, 0, i ? // XATTR_SHOWCOMPRESSION | XATTR_NOFOLLOW : 0); } free(tmp); return (file); }
/* 主机端的主程序简单示例 */ main() { unsigned char xdata data_to_send[200]; /* 缓冲区 */ unsigned char str_to_print[]="OK, support text print\n"; unsigned char s; mDelaymS( 200 ); set_usb_mode( 6 ); /* 设置USB主机模式 */ while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB打印机连接上来 */ /* 如果设备端是CH341转打印口或者是CH37X,那么以下步骤是可选的,如果是其它USB芯片,那么可能需要执行以下步骤 */ #define USB_RESET_FIRST 1 /* USB规范中未要求在USB设备插入后必须复位该设备,但是计算机的WINDOWS总是这样做,所以有些USB设备也要求在插入后必须先复位才能工作 */ #ifdef USB_RESET_FIRST set_usb_mode( 7 ); /* 复位USB设备,CH375向USB信号线的D+和D-输出低电平 */ /* 如果单片机对CH375的INT#引脚采用中断方式而不是查询方式,那么应该在复制USB设备期间禁止CH375中断,在USB设备复位完成后清除CH375中断标志再允许中断 */ mDelaymS( 10 ); /* 复位时间不少于1mS,建议为10mS */ set_usb_mode( 6 ); /* 结束复位 */ mDelaymS( 100 ); while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待复位之后的设备端再次连接上来 */ #endif mDelaymS( 200 ); /* 有些USB设备要等待数百毫秒才能正常工作 */ if ( init_print()!=USB_INT_SUCCESS ) while(1); /* 错误 */ while ( 1 ) { s = get_port_status( ); if ( s!=0xFF ) { /* if ( s&0x20 ) printf("No paper!\n"); if ( (s&0x08) == 0 ) printf("Print ERROR!\n");*/ } send_data( strlen(str_to_print), str_to_print ); /* 输出数据给打印机,与通过并口方式输出一样 */ send_data( sizeof(data_to_send), data_to_send ); /* 输出的数据必须按照打印机的格式要求或者遵循打印描述语言 */ /* 可以再次继续发送数据或者接收数据 */ } }
int ft_vlprintf(const char *format, va_list ap) { t_printf_special_function print_format[NB_SPECIAL_FUNCTION]; t_printf_set_function set_mode[NB_MODE_FUNCTION]; t_printf_mode mode; int length; long int tlength; init_print(print_format); init_set(set_mode); tlength = 0; while (*format) { length = print_no_format(format); tlength += length; if (!*(format += length)) break ; ft_bzero((void *)&mode, sizeof(t_printf_mode)); mode.precision = -1; if (*(format += set_format_mode(format, &mode, set_mode, ap))) format++; tlength += print_format[get_special_index(SPECIAL_CSET, \ mode.special)](mode, ap); } return (tlength); }
int main ( void ) { init_print (); int0_init (); initializeScheduler (); createTask ( &function_1, "fun_one", 1, 200 ); createTask ( &function_2, "fun_two", 2, 200 ); createTask ( &function_3, "fun_three", 3, 200 ); createTask ( &function_4, "fun_four", 4, 50 ); startScheduler (); return 0; }