Example #1
0
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;
}
Example #4
0
static int io_tmpfile (lua_State *L) {
  return setnewfile(L, tmpfile());
}
Example #5
0
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);
}