int main(int argc, char **argv) { char *porigin, *zonefile; dns_fixedname_t forigin, fname; dns_name_t *origin, *name; dns_db_t *db = NULL; dns_dbiterator_t *dbiter; dns_dbnode_t *node; dns_rdatasetiter_t *rdsiter; dns_rdataset_t rdataset; dns_rdata_t rdata = DNS_RDATA_INIT; isc_mem_t *mctx = NULL; isc_entropy_t *ectx = NULL; isc_buffer_t b; isc_result_t result; PGresult *res; if (argc != 5) { printf("usage: %s origin file dbname dbtable\n", argv[0]); printf("Note that dbname must be an existing database.\n"); exit(1); } porigin = argv[1]; zonefile = argv[2]; dbname = argv[3]; dbtable = argv[4]; dns_result_register(); mctx = NULL; result = isc_mem_create(0, 0, &mctx); check_result(result, "isc_mem_create"); result = isc_entropy_create(mctx, &ectx); result_check (result, "isc_entropy_create"); result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); check_result (result, "isc_hash_create"); isc_buffer_init(&b, porigin, strlen(porigin)); isc_buffer_add(&b, strlen(porigin)); dns_fixedname_init(&forigin); origin = dns_fixedname_name(&forigin); result = dns_name_fromtext(origin, &b, dns_rootname, ISC_FALSE, NULL); check_result(result, "dns_name_fromtext"); db = NULL; result = dns_db_create(mctx, "rbt", origin, dns_dbtype_zone, dns_rdataclass_in, 0, NULL, &db); check_result(result, "dns_db_create"); result = dns_db_load(db, zonefile); if (result == DNS_R_SEENINCLUDE) result = ISC_R_SUCCESS; check_result(result, "dns_db_load"); printf("Connecting to '%s'\n", dbname); conn = PQsetdb(NULL, NULL, NULL, NULL, dbname); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database '%s' failed: %s\n", dbname, PQerrorMessage(conn)); closeandexit(1); } snprintf(str, sizeof(str), "DROP TABLE %s", dbtable); printf("%s\n", str); res = PQexec(conn, str); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) fprintf(stderr, "DROP TABLE command failed: %s\n", PQresultErrorMessage(res)); PQclear(res); snprintf(str, sizeof(str), "BEGIN"); printf("%s\n", str); res = PQexec(conn, str); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "BEGIN command failed: %s\n", PQresultErrorMessage(res)); PQclear(res); closeandexit(1); } PQclear(res); snprintf(str, sizeof(str), "CREATE TABLE %s " "(NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT)", dbtable); printf("%s\n", str); res = PQexec(conn, str); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "CREATE TABLE command failed: %s\n", PQresultErrorMessage(res)); PQclear(res); closeandexit(1); } PQclear(res); dbiter = NULL; result = dns_db_createiterator(db, ISC_FALSE, &dbiter); check_result(result, "dns_db_createiterator()"); result = dns_dbiterator_first(dbiter); check_result(result, "dns_dbiterator_first"); dns_fixedname_init(&fname); name = dns_fixedname_name(&fname); dns_rdataset_init(&rdataset); dns_rdata_init(&rdata); while (result == ISC_R_SUCCESS) { node = NULL; result = dns_dbiterator_current(dbiter, &node, name); if (result == ISC_R_NOMORE) break; check_result(result, "dns_dbiterator_current"); rdsiter = NULL; result = dns_db_allrdatasets(db, node, NULL, 0, &rdsiter); check_result(result, "dns_db_allrdatasets"); result = dns_rdatasetiter_first(rdsiter); while (result == ISC_R_SUCCESS) { dns_rdatasetiter_current(rdsiter, &rdataset); result = dns_rdataset_first(&rdataset); check_result(result, "dns_rdataset_first"); while (result == ISC_R_SUCCESS) { dns_rdataset_current(&rdataset, &rdata); addrdata(name, rdataset.ttl, &rdata); dns_rdata_reset(&rdata); result = dns_rdataset_next(&rdataset); } dns_rdataset_disassociate(&rdataset); result = dns_rdatasetiter_next(rdsiter); } dns_rdatasetiter_destroy(&rdsiter); dns_db_detachnode(db, &node); result = dns_dbiterator_next(dbiter); } snprintf(str, sizeof(str), "COMMIT TRANSACTION"); printf("%s\n", str); res = PQexec(conn, str); if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "COMMIT command failed: %s\n", PQresultErrorMessage(res)); PQclear(res); closeandexit(1); } PQclear(res); dns_dbiterator_destroy(&dbiter); dns_db_detach(&db); isc_hash_destroy(); isc_entropy_detach(&ectx); isc_mem_destroy(&mctx); closeandexit(0); exit(0); }
int main(int argc, char** argv) { int status, pid, pid2, pid3[CLIENT_NUM],i,temp; int filefds[CLIENT_NUM]; FILE* fp; int ifp,ifp2; int pipefd[2]; char filebuf[FILEBUFSIZE]; int filebufsize=0; char buf[512]; fp = fopen(ERRORTXT, "w"); if (fp ==0) { printf("fp error\n"); //return 0; } fclose(fp); fp = fopen(RESULTTXT, "w"); if (fp ==0) { //perror("fp"); printf("fp error\n"); //return 0; } fclose(fp); pid = fork(); if (pid == -1) { perror("Fork"); writeToErrorTxt("error fork\n", 11); return 0; } if (pid >0) { printf("PARENT:"); sleep(8); kill(pid,SIGHUP); wait(&status); printf("PARENTEND:"); fp = fopen(RESULTTXT, "r"); memset(filebuf, 0, FILEBUFSIZE); fseek(fp, 0L, SEEK_SET); filebufsize = fread(filebuf,1, FILEBUFSIZE, fp); fclose(fp); remove(OKTXT); remove(DAMETXT); if (result_check(filebuf,filebufsize)) { fp = fopen(OKTXT, "w"); fclose(fp); fprintf(stderr,"ok"); } else { fp = fopen(DAMETXT, "w"); fclose(fp); fprintf(stderr, "dame"); } return 0; } pid2 = fork(); if (pid2 == -1) { perror("Fork"); writeToErrorTxt("error fork\n", 11); return 0; } if (pid2 == 0) { ifp2 = open(TEMPTXT, O_WRONLY | O_APPEND | O_CREAT| O_TEXT, S_IWRITE); if (ifp2 == -1) { writeToErrorTxt("error open\n",12); perror("open"); // return 0; } for (i=0;i<CLIENT_NUM;i++) { temp = makeclient(ifp2,&pid3[i],&filefds[i]); if (temp != 1) { return 0; } } // close(1); // close(2); sleep(1);// server ができるまで待つ sleep(2); // client ができるまで待つ for (i=0;i<CLIENT_NUM;i++) { memset(buf,0,512); snprintf(buf,512,"never give up %d\n",i); write(filefds[i],buf,sizeof(buf) ); } sleep(1); for (i=0;i<CLIENT_NUM;i++) { close(filefds[i]); kill(pid3[i],SIGHUP); } //sleep(1); //kill(pid2,SIGHUP); close(ifp2); wait(&status); printf("pidEND:"); return 0; } printf("CHILD(SERV):"); ifp = open(RESULTTXT, O_WRONLY | O_APPEND | O_CREAT| O_TEXT, S_IWRITE); if (ifp == -1) { writeToErrorTxt("error open\n",12); perror("open"); // return 0; } dup2(ifp,1); dup2(ifp,2); //close(1); //close(2); // サーバを実行する(pid) if (execl("../../chatserver/server", "../../chatserver/server","20000","0",NULL) == -1) { writeToErrorTxt("error exec\n",11); perror("execl"); close(ifp); return 0; } close(ifp); printf("CHILD(SERV)END:"); return 0; }