static int io_popen (lua_State *L) { #ifndef POPEN luaL_verror(L, "`popen' not supported"); return 0; #else FILE *f = popen(luaL_check_string(L, 1), luaL_opt_string(L, 2, "r")); return setnewfile(L, f); #endif }
scanFile::scanFile(const char * base_name , const char * index_name) { assert(basename!=NULL && index_name!=NULL); index = new indexFile(index_name,indexFile::R); int len = strlen(base_name); basename = new char [len + 1]; strcpy(basename,base_name); filefd = 0; setnewfile(0); offset.push_back(0); page_content = new char [96000]; init(); }
char * scanFile::locate(const int page_num) { int number = page_num / MAXFILELIMIT; if (number!=currentfilenumber) { //update filefd , currentfilenumber , currentfilenumber setnewfile(number); } int size_offset = offset.at(page_num-1); int size = pagesize.at(page_num-1); //找到数据文件的指定序号的开始位置 lseek(filefd,size_offset,SEEK_SET); //从上面的文件位置,进行读取 read(filefd,page_content,size); page_content[size] = '\0'; return page_content; }
static int io_tmpfile (lua_State *L) { return setnewfile(L, tmpfile()); }
static int io_open (lua_State *L) { FILE *f = fopen(luaL_check_string(L, 1), luaL_opt_string(L, 2, "r")); return setnewfile(L, f); }