int main(int argc,char*argv[]) { int error; /*错误值*/ int sock_UNIX; /*socket*/ struct sockaddr_un addr_UNIX; /*AF_UNIX族地址*/ int len_UNIX; /*AF_UNIX族地址长度*/ const char path[] = "/demon/path"; /*路径名*/ /* *建立套接字 */ sock_UNIX = socket(AF_UNIX,SOCK_STREAM,0); if(sock_UNIX == -1) display_err("socket()"); /* *由于之前已经使用了path路径用于其他用途 *需要将之前的绑定取消 */ unlink(path); /* *填充地址结构 */ memset(&addr_UNIX,0,sizeof(addr_UNIX)); addr_UNIX.sun_family = AF_LOCAL; strcpy(addr_UNIX.sun_path,path); len_UNIX = sizeof(struct sockaddr_un); /* *绑定地址到socket sock_UNIX */ error = bind(sock_UNIX, (struct sockaddr*)&addr_UNIX, len_UNIX); if(error == -1) display_err("bind()"); /* *关闭socket */ close(sock_UNIX); unlink(path); return 0; }
/* select the numbered adapter */ static WINERR select_adapter(HANDLE irh, int adapter) { WINERR status; ULONG i; PADAPTER pdev; /* If adapter == -1, choose the first appropriate adapter. */ if (adapter == -1) { for (i = 0; i < ndevs; i++) { pdev = &devlist[i]; if (pdev->type == IR_WIRELESS) { adapter = i; break; } } if (i == ndevs) { fprintf(stderr, "%s: No wireless adapters were found\n", dhdu_av0); return ERROR_INVALID_HANDLE; } } if (adapter < 0 || (ULONG) adapter >= ndevs) { fprintf(stderr, "%s: Cannot find wireless adapter #%d\n", dhdu_av0, adapter); status = ERROR_INVALID_HANDLE; } else { pdev = &devlist[adapter]; if (pdev->type != IR_WIRELESS) { fprintf(stderr, "%s: Selected adapter #%d is not an BRCM wireless adapter\n", dhdu_av0, adapter); status = ERROR_INVALID_HANDLE; } else { status = ir_bind(irh, pdev->name); if (status != ERROR_SUCCESS) display_err("select_adapter:ir_bind:", status); } } return status; }
i4 main (int argc, char **argv) { STATUS status=OK; PTR drvH=NULL; char **list=NULL; ATTR_ID **attrList=NULL; char **defAttr=NULL; i4 count=0, attrCount = 0, retcount; i4 i; bool badCmdLine = FALSE, rmPkg = FALSE, has_default = FALSE, has_alt = FALSE, isReadOnly = FALSE, mgrSpecified = FALSE, batch = FALSE, def_or_alt=FALSE; i4 pathType = OCFG_SYS_PATH; char altPath[OCFG_MAX_STRLEN] = "\0"; char drvMgr[OCFG_MAX_STRLEN] = "\0"; char line[MAXLINE],prompt[MAXLINE]; char driverPath[OCFG_MAX_STRLEN]; char *dirPath; char driverName[OCFG_MAX_STRLEN]; char *ii_installation; char *p = NULL; char custName[OCFG_MAX_STRLEN]; char etxt[512]; ATTR_ID driverList[6] = { { DRV_ATTR_DRIVER, "\0" }, { DRV_ATTR_DRIVER_ODBC_VER, DRV_STR_VERSION }, { DRV_ATTR_DRIVER_READONLY, DRV_STR_N }, { DRV_ATTR_DRIVER_TYPE, DRV_STR_INGRES }, { DRV_ATTR_VENDOR, DRV_STR_INGRES_CORP }, { DRV_ATTR_DONT_DLCLOSE, DRV_STR_ONE } }; int drvCount = sizeof(driverList) / sizeof(driverList[0]); ATTR_ID **drvList = (ATTR_ID **)MEreqmem( (u_i2) 0, (u_i4)drvCount, TRUE, (STATUS *) NULL); for (i = 0; i < drvCount; i++) { drvList[i] = (ATTR_ID *)MEreqmem( (u_i2) 0, (u_i4)sizeof(ATTR_ID), TRUE, (STATUS *) NULL); drvList[i]->id = driverList[i].id; drvList[i]->value = (char *)MEreqmem( (u_i2) 0, (u_i4)OCFG_MAX_STRLEN, TRUE, (STATUS *) NULL); STcopy(driverList[i].value, drvList[i]->value); } if ( argc > 7 ) badCmdLine = TRUE; /* ** Parse the command line. Reject invalid arguments. */ if ( !badCmdLine && argc > 1 ) { if (checkArgs("-h", argc, argv, NULL, NULL ) ) { display_help(); PCexit(0); } if (checkArgs("-help", argc, argv, NULL, NULL ) ) { display_help(); PCexit(0); } if ( checkArgs("-batch", argc, argv, NULL, NULL ) ) batch = TRUE; if ( checkArgs("-rmpkg", argc, argv, NULL, NULL ) ) rmPkg = TRUE; if (checkArgs("-r", argc, argv, NULL, NULL ) ) isReadOnly = TRUE; if ( checkArgs("-p", argc, argv, altPath, NULL ) ) pathType = OCFG_ALT_PATH; if ( checkArgs("-m", argc, argv, NULL, drvMgr ) ) mgrSpecified = TRUE; } /* ** Set driver manager according to user input. Default is unixODBC. */ if (mgrSpecified && !STbcompare( drvMgr, 0, MGR_STR_CAI_PT, 0, TRUE ) ) driverManager = MGR_VALUE_CAI_PT; else driverManager = MGR_VALUE_UNIX_ODBC; /* ** If none of the arguments are recognized, flag an error. */ if ( !batch && !rmPkg && !isReadOnly && pathType != OCFG_ALT_PATH && !mgrSpecified && argc > 1) badCmdLine = TRUE; if ( badCmdLine ) { display_help(); PCexit(FAIL); } if ( isReadOnly ) STcopy(DRV_STR_Y, drvList[2]->value); else STcopy(DRV_STR_N, drvList[2]->value); if ( !writeMgrFile( altPath ) ) { SIprintf("Aborting due to error writing %s/files/%s\n", SYSTEM_LOCATION_SUBDIRECTORY, MGR_STR_FILE_NAME); PCexit(FAIL); } defAttr = getDefaultInfo(); if (defAttr == NULL) { SIprintf("Aborting due to error reading %s/install/%s\n", SYSTEM_LOCATION_VARIABLE, INFO_STR_FILE_NAME); PCexit(FAIL); } /* ** Get the path of the driver library and create the path/libname string. */ NMgtAt(SYSTEM_LOCATION_VARIABLE,&dirPath); /* usually II_SYSTEM */ if (dirPath != NULL && *dirPath) STlcopy(dirPath,driverPath,sizeof(driverPath)-20-1); else { SIprintf("Error--%s is not defined\n",SYSTEM_LOCATION_VARIABLE); PCexit(FAIL); } # ifdef VMS STcat(driverPath,"["); STcat(driverPath,SYSTEM_LOCATION_SUBDIRECTORY); /* usually "ingres" */ STcat(driverPath,".library]"); if ( isReadOnly ) STcat(driverPath,defAttr[INFO_ATTR_RONLY_DRV_FNAME]); else STcat(driverPath,defAttr[INFO_ATTR_DRIVER_FILE_NAME]); # else STcat(driverPath,"/"); STcat(driverPath,SYSTEM_LOCATION_SUBDIRECTORY); /* usually "ingres" */ STcat(driverPath,"/lib/"); if ( isReadOnly ) STcat(driverPath,defAttr[INFO_ATTR_RONLY_DRV_FNAME]); else STcat(driverPath,defAttr[INFO_ATTR_DRIVER_FILE_NAME]); # endif /* ifdef VMS */ STcopy(driverPath,drvList[0]->value); /* ** Initialize the cache from the odbcinst.ini file. */ openConfig(NULL, pathType, altPath, &drvH, &status); if (status != OK) { STprintf(etxt,"Could not open from path %s.\n", pathType == OCFG_ALT_PATH ? altPath : "/usr/local/etc"); display_err(etxt,status); PCexit(FAIL); } if (rmPkg) { delConfigEntry( drvH, defAttr[INFO_ATTR_DRIVER_NAME], &status ); delConfigEntry( drvH, defAttr[INFO_ATTR_ALT_DRIVER_NAME], &status ); closeConfig(drvH, &status); PCexit(OK); } /* ** Get the driver count. */ retcount = listConfig( drvH, count, list, &status ); if (status != OK) { STprintf(etxt,"Could not list drivers.\n"); display_err(etxt,status); PCexit(FAIL); } count = retcount; if (count) { /* ** Get the list of recognized drivers. */ list = (char **)MEreqmem( (u_i2) 0, (u_i4)(count * sizeof(char *)), TRUE, (STATUS *) NULL); for (i = 0; i < count; i++) list[i] = (char *)MEreqmem( (u_i2) 0, (u_i4)OCFG_MAX_STRLEN, TRUE, (STATUS *) NULL); listConfig( drvH, count, list, &status ); if (status != OK) { STprintf(etxt,"Could not list drivers.\n"); display_err(etxt,status); PCexit(FAIL); } } for (i = 0; i < count; i++) { def_or_alt = FALSE; if (!has_default) { has_default = STbcompare( list[i], 0, defAttr[INFO_ATTR_DRIVER_NAME], 0, TRUE ) == 0 ? TRUE : FALSE; if (has_default) def_or_alt = TRUE; } if (!has_alt) { has_alt = STbcompare( list[i], 0, defAttr[INFO_ATTR_ALT_DRIVER_NAME], 0, TRUE ) == 0 ? TRUE : FALSE; if (has_alt) def_or_alt = TRUE; } if (def_or_alt) { if ( !batch ) { STprintf(prompt, "\tInstallation has pre-defined version of %s.\n\tOverwrite? (Yes/No)", list[i]); if ( line_get( prompt, "", FALSE, line ) == EOF ) { SIprintf("ODBC driver installation safely aborted\n"); PCexit(OK); } STzapblank(line,line); if ( line[0] != 'y' && line [0] != 'Y' ) { SIprintf( "%s left untouched\n", list[i] ); continue; } } /* if (!batch) */ STcopy(list[i],driverName); setConfigEntry( drvH, driverName, drvCount, drvList, &status ); if (status != OK) { STprintf(etxt,"Could not write driver entry.\n"); display_err(etxt,status); PCexit(FAIL); } } /* if (has_default || has_alt) */ else if ( !batch ) { STprintf(prompt, "\tInstallation has custom version of %s.\n\tDelete? (Yes/No)", list[i]); if ( line_get( prompt, "", FALSE, line ) == EOF ) { SIprintf("ODBC driver installation safely aborted\n"); PCexit(OK); } STzapblank(line,line); if ( line[0] != 'y' && line [0] != 'Y' ) { SIprintf( "%s left untouched\n", list[i] ); continue; } STcopy(list[i],driverName); delConfigEntry( drvH, driverName, &status ); if (status != OK) { STprintf(etxt,"Could not write driver entry.\n"); display_err(etxt,status); PCexit(FAIL); } } /* if (!batch) && !has_default */ } /* for (count... */ if (!has_default) { setConfigEntry( drvH, defAttr[INFO_ATTR_DRIVER_NAME], drvCount, drvList, &status ); if (status != OK) { STprintf(etxt,"Could not write driver entry.\n"); display_err(etxt,status); PCexit(FAIL); } } if (!has_alt) { setConfigEntry( drvH, defAttr[INFO_ATTR_ALT_DRIVER_NAME], drvCount, drvList, &status ); if (status != OK) { STprintf(etxt,"Could not write driver entry.\n"); display_err(etxt,status); PCexit(FAIL); } } closeConfig(drvH, &status); if (status != OK) { STprintf(etxt,"Could not close driver info.\n"); display_err(etxt,status); PCexit(FAIL); } if (count) { for (i = 0; i < count; i++) MEfree((PTR)list[i]); MEfree((PTR)list); } for (i = 0; i < drvCount; i++) { MEfree((PTR)drvList[i]->value); MEfree((PTR)drvList[i]); } MEfree((PTR)drvList); PCexit(OK); }
int main(int argc, char **argv) { HANDLE irh; WINERR err = ERROR_SUCCESS; int ap_mode = 0; cmd_t *cmd = NULL; int init_err = TRUE; char *ifname = NULL; int help = 0; int status; /* initialize irelay and select default adapter */ irh = INVALID_HANDLE_VALUE; if ((err = ir_init(&irh)) != ERROR_SUCCESS) goto done; ndevs = ARRAYSIZE(devlist); if (((err = ir_adapter_list(irh, &devlist[0], &ndevs)) != ERROR_SUCCESS) || ((err = select_adapter(irh, -1)) != ERROR_SUCCESS)) goto done; init_err = FALSE; for (++argv; *argv;) { /* command line option */ if ((status = dhd_option(&argv, &ifname, &help)) == CMD_OPT) { /* print usage */ if (help) break; /* select different adapter */ if (ifname) { ir_unbind(irh); if ((err = select_adapter(irh, atoi(ifname))) != ERROR_SUCCESS) break; if (dhd_check((void *)irh)) break; } continue; } if (dhd_check((void *)irh)) break; /* search for command */ for (cmd = dhd_cmds; cmd->name && strcmp(cmd->name, *argv); cmd++); /* defaults to using the set_var and get_var commands */ if (cmd->name == NULL) cmd = &dhd_varcmd; /* do command */ if (cmd->name) err = (WINERR) (*cmd->func)((void *) irh, cmd, argv); break; } done: /* In case of COMMAND_ERROR, command has already printed an error message */ if (!cmd) dhd_usage(NULL); else if (err == USAGE_ERROR) dhd_cmd_usage(cmd); else if (err == IOCTL_ERROR) display_err("main:", err); if (irh != INVALID_HANDLE_VALUE) { ir_unbind(irh); ir_exit(irh); } return err; }
int zn_shell_exec(command *cmd) { pid_t pid; int status = 0; char* arglist[MAX_ARG_LIST]; char* appname = command_next_arg(cmd); char path_buffer[FILENAME_MAX]; arglist[0] = appname; bool wait_for_pid = true; if (*appname != '/') { appname = _find_file_in_path(path_buffer, appname); if (!appname) { display_err("%s not found\n", arglist[0]); return -1; } } int c = 1; while (c < MAX_ARG_LIST) { char* arg = (char*)command_next_arg(cmd); if (arg && strcmp(arg, "&") == 0) { wait_for_pid = false; } else { arglist[c++] = arg; } if (arg == NULL) break; /* break after writing null to term the list. */ } /* Special shell view should be suspended until shell resumes. */ close_view(); switch(pid = fork()) { case -1: /* Fork failed! */ fprintf(stderr, "Failed to execute.\n"); break; case 0: /* Child process */ status = execve(appname, arglist, zn_env); /* If we got here, exec failed. TODO: Figure out why. */ fprintf(stderr, "Failed to execute %s.\n", appname); exit(status); default: /* Parent */ if (wait_for_pid) { if (waitpid(pid, &status, 0) < 0) { /* Wait for pid failed!! */ fprintf(stderr, "System error tracking process %s\n", appname); } if ( !WIFEXITED(status)) { fprintf(stderr, "Debug, system error -- exit failure?\n"); } } else { printf("Started Process %d\n", pid); } initialize_view(); } return status; }