LinuxThread(ThreadMethod entry, void* args) { if (pthread_create(&this->_thread, NULL, entry, args)) { std::cout << "ERROR: pthread_create failed" << std::endl; } this->_uuid = GenerateUUID(); }
StoreStatus ServerIndex::AddInstance(std::string publicID, std::string patientName, std::string studyID, std::string seriesID) { boost::mutex::scoped_lock lock(mutex_); std::string privateID = GenerateUUID(); InstanceNode* node = new InstanceNode(privateID, publicID, patientName, studyID, seriesID); ServerIndexNodes[publicID] = node; return StoreStatus_Success; }
int TextHandler::build_text_result_file(const TextID & tid, const bool is_bilingual, string & result_file_name) { int ret = SUCCESS; //从数据库读取翻译结果 vector<boost::tuple<string, string, string, size_t> > result_vec; string file_type; string tgt_language; ret = DBOperation::GetTransResult(tid, result_vec, file_type, tgt_language); CLanguage::EnLowercase(file_type); if(SUCCESS != ret) { return ERR_GET_TGT_VEC_FROM_DB; } //后处理辅助翻译的修改结果 bool is_english = (LANGUAGE_ENGLISH == tgt_language ) ? true : false; for(size_t i=0; i<result_vec.size(); ++i) { string & modify_tgt = result_vec[i].get<1>(); if(modify_tgt.size() > 0) { if(is_english) CLanguage::Ch2EnPost(modify_tgt); else CLanguage::En2ChPost(modify_tgt); } } //返回的result_vec顺序由DBOperation保证,根据SentID大小决定 //生成结果文件 string build_id = GenerateUUID(); string base_result_file_path; string result_text; bool is_blank_between_sent = (LANGUAGE_ENGLISH == tgt_language ) ? true : false; if( SUCCESS != (ret = build_base_result_file(tid, build_id, result_vec, is_blank_between_sent, is_bilingual, base_result_file_path, result_text)) ) return ret; return build_txt_result_file(tid, build_id, result_text, result_file_name); }
int main() { const char *uuid = GenerateUUID(); // printf("uuid: %s\n", uuid); char *memory; int fd = shm_open(uuid, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR/*, 0666*/); if(fd == -1) { perror("shm_open"); return 1; } int fdflags = fcntl(fd, F_GETFD); if (fdflags & FD_CLOEXEC) { fdflags &= ~FD_CLOEXEC; fcntl(fd, F_SETFD, fdflags); } size_t shmSize = sizeof(container); shmSize += sizeof(size_t); // we need to save main memory size at the head. int ret = ftruncate(fd, shmSize); if (ret != 0) { printf("ftruncate ret: %d, errno: %d.\n", ret, errno); return 1; } /* // Check the permission mode struct stat st; ret = fstat(fd, &st); int mode = st.st_mode; printf("mode: 0%o \n", mode); */ char *memResult = NULL; memory = mmap(NULL, shmSize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (memory != MAP_FAILED) { *((size_t*)memory) = shmSize; memResult = memory + sizeof(size_t); strncpy(memResult, "hanwei_is_just_a_name_right?_<end>", sizeof(container)); printf("Before child process, size: %zu, memResult: %s\n", shmSize, memResult); } else perror("mmap"); // child process ... char buffer[256]; sprintf(buffer, "./Child %d", fd); // sprintf(buffer, "./Child %d %s", fd, memName); int status = system(buffer); sleep(IntervalsForWaiting); printf("child status: %d\n", status); printf("After child process, memResult: %s\n", memResult); return 0; }
void pSocket::onDataReceived() { #ifdef FUNC_DEBUG qDebug() << '\n' << Q_FUNC_INFO; #endif auto data = _socket->readAll(); if (_packetSize == 0) { int n = data.indexOf("\n\n"); if (n == -1) { qDebug() << "Wrong data received. Disconnect" << _socket->localAddress(); _socket->disconnectFromHost(); return; } QByteArray header = data.left(n); auto content = data.mid(n+2); _buffer = content; QString _generate_id; _generate_id = getValue(header, "generateid"); if (_generate_id == "1") { _uuid = GenerateUUID(); _socket->write(_uuid.toStdString().c_str()); _socket->disconnectFromHost(); } _limit.fetchAndAddAcquire(content.size()); _packetSize = getValue(header, "size").toInt(); _protoVersion = getValue(header, "version"); _fileType = getValue(header, "type"); _uuid = getValue(header, "uuid"); if (_uuid.length()!=0 && !checkUUID(_uuid)) { qDebug() << "UUID is incorrect. Disconnect" << _socket->localAddress(); _socket->disconnectFromHost(); return; } if (_packetSize == 0) { qDebug() << "Client trying to send empty data"; _socket->disconnectFromHost(); } if (_fileType == "" || !Settings::types().contains(_fileType) ) { qDebug() << "Sender type is not exist. Disconnect" << _socket->localAddress(); _socket->disconnectFromHost(); return; } } else { _buffer += data; _limit.fetchAndAddAcquire(data.size()); } if (_buffer.size() > MAX_DATA_SIZE || _limit > MAX_DAY_SIZE) { qDebug() << "File is too big! Disconnect" << _socket->localAddress(); _socket->disconnectFromHost(); _socket->deleteLater(); return; } #ifdef FUNC_DEBUG qDebug() << '\n' << Q_FUNC_INFO << "read"; #endif if (_buffer.size() == _packetSize) { #ifdef FUNC_DEBUG qDebug() << '\n' << Q_FUNC_INFO << "emit"; #endif _packetSize = 0; emit saveFile(_buffer, _fileType, _uuid); #ifdef TIME_DEBUG qDebug() << dTime->elapsed(); #endif } #ifdef FUNC_DEBUG qDebug() << '\n' << Q_FUNC_INFO << "end"; #endif }
int TextHandler::build_detail_result_file(const TextID & tid, string & result_file_name) { int ret = SUCCESS; //从数据库读取翻译结果 vector<boost::tuple<string, string, string, string, string> > result_vec; string domain; string src_language; string tgt_language; ret = DBOperation::GetTransResultDetail(tid, result_vec, domain, src_language, tgt_language); if(SUCCESS != ret) { return ERR_GET_TGT_VEC_FROM_DB; } //生成TMX 格式数据 string tmx_data; // //[Language] //[Total Number] // //[Sent 0 ] // [ Pre ] // [ Rules ] // [ Decode ] // [ UsrModify ] // [ Final ] //[-------] // //[Sent 1 ] // [ Pre ] // [ Rules ] // [ Decode ] // [ UsrModify ] // [ Final ] //[-------] //[END] stringstream data; data << "[Domain] : " << domain << "\r\n"; data << "[Language] " << src_language << " --> " << tgt_language << "\r\n"; data << "[Total Number] " << result_vec.size() << "\r\n"; data << "\r\n"; data << "\r\n"; for(size_t i=0; i<result_vec.size(); ++i) { data << "[Sent " << i << " ]" << "\r\n"; data << " [ Pre ] " << result_vec[i].get<0>() << "\r\n"; data << " [ Rules ] " << result_vec[i].get<1>() << "\r\n"; data << " [ Decode ] " << result_vec[i].get<2>() << "\r\n"; data << " [ UsrModify ] " << result_vec[i].get<3>() << "\r\n"; data << " [ Final ] " << result_vec[i].get<4>() << "\r\n"; data << "[-------]" << "\r\n"; data << "\r\n"; } data << "[END]" << "\r\n" ; //写入到文件 string build_id = GenerateUUID(); result_file_name = tid + "." + build_id + ".txt"; string tmx_filepath = m_default_file_path + result_file_name; if(false == write_file(tmx_filepath, data.str().c_str(), data.str().size())) { return ERR_OPEN_RESULT_FILE_FAILED; } return SUCCESS; }
// on_create_result_1 int TextHandler::build_tmx_result_file(const TextID & tid, string & result_file_name) { int ret = SUCCESS; //从数据库读取翻译结果 vector<boost::tuple<string, string, string> > result_vec; string tgt_language; ret = DBOperation::GetTransResultPair(tid, result_vec, tgt_language); if(SUCCESS != ret) { return ERR_GET_TGT_VEC_FROM_DB; } //生成TMX 格式数据 string tmx_data; //<?xml version="1.0" encoding=UTF-8" ?> // //<tmx version="1.4"> // <header creationdate="" <!--创建日期--> // creationtool="" <!--创建工具--> // creationtoolversion="" <!--创建工具的版本--> // datatype="unknown" <!--数据类型:有很多种,一般使用默认--> // o-tmf="unknown" <!--源存储格式--> // segtype="block" <!--段值:block,paragraph,sentence,phrase--> // srclang="*all*" <!--源语言:常使用*all*--> // adminlang="en"/> <!--Administrative language--> // // <body> // <tu changedate=""> <!--修改日期--> // <tuv xml:lang="en"><seg>introduction</seg></tuv> // <tuv xml:lang="zh-cn"><seg>简介</seg></tuv> // </tu> // <tu changedate=""> // <tuv xml:lang="en"><seg>conclusion</seg></tuv> // <tuv xml:lang="zh-cn"><seg>总结</seg></tuv> // </tu> // </body> //</tmx> TiXmlDocument * xmlDocs = new TiXmlDocument(); try { //声明 TiXmlDeclaration* dec = new TiXmlDeclaration("1.0", "UTF-8", ""); xmlDocs->LinkEndChild(dec); //tmx 节点 TiXmlElement * tmxElem = new TiXmlElement("tmx"); xmlDocs->LinkEndChild(tmxElem); //header节点 TiXmlElement * headerElem = new TiXmlElement("header"); headerElem->SetAttribute("creationdate", ""); headerElem->SetAttribute("creationtool", "ict_trans"); headerElem->SetAttribute("creationtoolversion", "1.0"); headerElem->SetAttribute("datatype", "unknown"); headerElem->SetAttribute("o-tmf", "unknown"); headerElem->SetAttribute("segtype", "sentence"); headerElem->SetAttribute("srclang", "en"); headerElem->SetAttribute("srclang", "zh-cn"); tmxElem->LinkEndChild(headerElem); //body节点 TiXmlElement * bodyElem = new TiXmlElement("body"); tmxElem->LinkEndChild(bodyElem); //loop tu 节点 for(size_t i=0; i<result_vec.size(); ++i) { //tu节点 TiXmlElement * tuElem = new TiXmlElement("tu"); bodyElem->LinkEndChild(tuElem); //tuv 节点对 string * p_english = NULL; string * p_chinese = NULL; if(LANGUAGE_CHINESE == tgt_language) { p_english = &result_vec[i].get<0>(); if(result_vec[i].get<2>().size() > 0) { CLanguage::En2ChPost(result_vec[i].get<2>()); p_chinese = &result_vec[i].get<2>(); }else { p_chinese = &result_vec[i].get<1>(); } }else { p_chinese = &result_vec[i].get<0>(); if(result_vec[i].get<2>().size() > 0) { CLanguage::Ch2EnPost(result_vec[i].get<2>()); p_english = &result_vec[i].get<2>(); }else { p_english = &result_vec[i].get<1>(); } } //tuv-en TiXmlElement * tuvenElem = new TiXmlElement("tuv"); TiXmlText * tuvenText = new TiXmlText(p_english->c_str()); tuvenElem->SetAttribute("xml:lang", "en"); tuvenElem->LinkEndChild(tuvenText); tuElem->LinkEndChild(tuvenElem); //tuv-ch TiXmlElement * tuvchElem = new TiXmlElement("tuv"); TiXmlText * tuvchText = new TiXmlText(p_chinese->c_str()); tuvenElem->SetAttribute("xml:lang", "zh-ch"); tuvchElem->LinkEndChild(tuvchText); tuElem->LinkEndChild(tuvchElem); } //输出到xmldata TiXmlPrinter print; xmlDocs->Accept(&print); tmx_data = print.CStr(); }catch (...) { lerr << "Create xml-tmx failed." << endl; delete xmlDocs; return ERR_USR_XML_PARSER; } delete xmlDocs; //写入到文件 string build_id = GenerateUUID(); result_file_name = tid + "." + build_id + ".tmx"; string tmx_filepath = m_default_file_path + result_file_name; if(false == write_file(tmx_filepath, tmx_data.c_str(), tmx_data.size())) { return ERR_OPEN_RESULT_FILE_FAILED; } return SUCCESS; }