本文整理汇总了C++中ReadDir函数的典型用法代码示例。如果您正苦于以下问题:C++ ReadDir函数的具体用法?C++ ReadDir怎么用?C++ ReadDir使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ReadDir函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Printf
void Fuzzer::Merge(const std::vector<std::string> &Corpora) {
if (Corpora.size() <= 1) {
Printf("Merge requires two or more corpus dirs\n");
return;
}
auto InitialCorpusDir = Corpora[0];
ReadDir(InitialCorpusDir, nullptr);
Printf("Merge: running the initial corpus '%s' of %d units\n",
InitialCorpusDir.c_str(), Corpus.size());
for (auto &U : Corpus)
RunOne(U);
std::vector<std::string> ExtraCorpora(Corpora.begin() + 1, Corpora.end());
size_t NumTried = 0;
size_t NumMerged = 0;
for (auto &C : ExtraCorpora) {
Corpus.clear();
ReadDir(C, nullptr);
Printf("Merge: merging the extra corpus '%s' of %zd units\n", C.c_str(),
Corpus.size());
for (auto &U : Corpus) {
NumTried++;
if (RunOne(U)) {
WriteToOutputCorpus(U);
NumMerged++;
}
}
}
Printf("Merge: written %zd out of %zd units\n", NumMerged, NumTried);
}
开发者ID:byronwwang,项目名称:llvm,代码行数:31,代码来源:FuzzerLoop.cpp
示例2: EnumDir
int EnumDir(char* pchDir)
{
int i;
char buf[256];
char* path;
int dirlen = strlen(pchDir) + 1;
int pathlen = 0;
char** dirlist = NULL;
int dircount = 0;
for (i = ReadDir(pchDir, buf); !i; i = ReadDir(NULL, buf))
{
int len;
if (buf[0] == '.' && (buf[1] == 0 || (buf[1] == '.' && buf[2] == 0))) continue;
len = dirlen + strlen(buf) + 1;
if (len > pathlen)
{
if (pathlen) free(path);
path = malloc(len);
pathlen = len;
}
sprintf(path, "%s/%s", pchDir, buf);
if (IsDir(path))
{
if (!(dircount % PRE_ALLOC_UNIT))
{
dirlist = realloc(dirlist, (dircount + PRE_ALLOC_UNIT) * sizeof(char*));
}
dirlist[dircount++] = strdup(buf);
}
else
{
if (!(filecount % PRE_ALLOC_UNIT))
{
filelist = realloc(filelist, (filecount + PRE_ALLOC_UNIT) * sizeof(char*));
}
filelist[filecount++] = strdup(path + prefixlen);
//printf("%s\n", path);
}
}
for (i = 0; i < dircount; i++)
{
int len = dirlen + strlen(dirlist[i]) + 1;
if (len > pathlen)
{
if (pathlen) free(path);
path = malloc(len);
pathlen = len;
}
sprintf(path, "%s/%s", pchDir, dirlist[i]);
free(dirlist[i]);
EnumDir(path);
}
free(dirlist);
if (pathlen) free(path);
return 0;
}
开发者ID:as2120,项目名称:ZAchieve,代码行数:57,代码来源:httpvod.c
示例3: CopyTaskFilesFromDirectory
/*
* CopyTaskFilesFromDirectory finds all files in the given directory, except for
* those having an attempt suffix. The function then copies these files into the
* database table identified by the given schema and table name.
*/
static void
CopyTaskFilesFromDirectory(StringInfo schemaName, StringInfo relationName,
StringInfo sourceDirectoryName)
{
const char *directoryName = sourceDirectoryName->data;
struct dirent *directoryEntry = NULL;
uint64 copiedRowTotal = 0;
DIR *directory = AllocateDir(directoryName);
if (directory == NULL)
{
ereport(ERROR, (errcode_for_file_access(),
errmsg("could not open directory \"%s\": %m", directoryName)));
}
directoryEntry = ReadDir(directory, directoryName);
for (; directoryEntry != NULL; directoryEntry = ReadDir(directory, directoryName))
{
const char *baseFilename = directoryEntry->d_name;
const char *queryString = NULL;
StringInfo fullFilename = NULL;
RangeVar *relation = NULL;
CopyStmt *copyStatement = NULL;
uint64 copiedRowCount = 0;
/* if system file or lingering task file, skip it */
if (strncmp(baseFilename, ".", MAXPGPATH) == 0 ||
strncmp(baseFilename, "..", MAXPGPATH) == 0 ||
strstr(baseFilename, ATTEMPT_FILE_SUFFIX) != NULL)
{
continue;
}
fullFilename = makeStringInfo();
appendStringInfo(fullFilename, "%s/%s", directoryName, baseFilename);
/* build relation object and copy statement */
relation = makeRangeVar(schemaName->data, relationName->data, -1);
copyStatement = CopyStatement(relation, fullFilename->data);
if (BinaryWorkerCopyFormat)
{
DefElem *copyOption = makeDefElem("format", (Node *) makeString("binary"));
copyStatement->options = list_make1(copyOption);
}
DoCopy(copyStatement, queryString, &copiedRowCount);
copiedRowTotal += copiedRowCount;
CommandCounterIncrement();
}
ereport(DEBUG2, (errmsg("copied " UINT64_FORMAT " rows into table: \"%s.%s\"",
copiedRowTotal, schemaName->data, relationName->data)));
FreeDir(directory);
}
开发者ID:AlexaPopov,项目名称:citus,代码行数:60,代码来源:worker_merge_protocol.c
示例4: main
int main(int argc, const char *argv[])
{
IShell *shell = NULL;
IFileIO *fio = NULL;
char *p = NULL;
IShell_Create(&shell);
IShell_CreateInstance(shell, CID_FILEIO, &fio, 0);
if(argc == 1)
{
char dir[260];
HINSTANCE hInst = NULL;
GetModuleFileName(hInst, dir, sizeof(dir));
//strcpy(dir, argv[0]);
p = strrchr(dir, '\\');
if(p != NULL)
{
*p = '\0';
ReadDir(fio, dir, NULL, TRUE, scan_cb, fio);
}
}
else if(argc == 2)
{
struct _stat st;
_stat(argv[1], &st);
if(_S_IFDIR & st.st_mode)
{
ReadDir(fio, argv[1], NULL, TRUE, scan_cb, fio);
}
else if(_S_IFREG & st.st_mode)
{
convert(fio, argv[1]);
}
}
else if(argc == 3)
{
int width = 0, height = 0;
sscanf(argv[2], "%dx%d", &width, &height);
if(width > 0 && height > 0)
{
convertEx(fio, argv[1], width, height);
}
}
Release(fio);
Release(shell);
return 0;
}
开发者ID:lhc180,项目名称:yuv2bmp,代码行数:51,代码来源:test.c
示例5: SeekToBlock
void CInArchive::ReadDir(CDir &d, int level)
{
if (!d.IsDir())
return;
SeekToBlock(d.ExtentLocation);
UInt64 startPos = _position;
bool firstItem = true;
for (;;)
{
UInt64 offset = _position - startPos;
if (offset >= d.DataLength)
break;
Byte len = ReadByte();
if (len == 0)
continue;
CDir subItem;
ReadDirRecord2(subItem, len);
if (firstItem && level == 0)
IsSusp = subItem.CheckSusp(SuspSkipSize);
if (!subItem.IsSystemItem())
d._subItems.Add(subItem);
firstItem = false;
}
for (int i = 0; i < d._subItems.Size(); i++)
ReadDir(d._subItems[i], level + 1);
}
开发者ID:f059074251,项目名称:interested,代码行数:29,代码来源:IsoIn.cpp
示例6: Dir
void ProcessingDlg::ReadDir(const wxString& DirName)
{
wxDir Dir(DirName);
if ( !Dir.IsOpened() ) return;
Status->SetLabel(_T("Reading dir: ") + DirName);
::wxYield();
if ( StopFlag ) return;
wxString Name;
if ( Dir.GetFirst(&Name,wxEmptyString,wxDIR_FILES|wxDIR_HIDDEN) )
{
do
{
Map[Name].Add(DirName + wxFileName::GetPathSeparator() + Name);
}
while ( Dir.GetNext(&Name) );
}
if ( Dir.GetFirst(&Name,wxEmptyString,wxDIR_DIRS|wxDIR_HIDDEN) )
{
do
{
Map[Name].Add(DirName + wxFileName::GetPathSeparator() + Name);
ReadDir(DirName + wxFileName::GetPathSeparator() + Name);
}
while ( Dir.GetNext(&Name) );
}
}
开发者ID:stahta01,项目名称:EmBlocks,代码行数:31,代码来源:processingdlg.cpp
示例7: WarningBox
bool CFileDialog::UpdateFileList(const char *dir)
{
std::string newdir = m_szDestDir;
newdir += "/";
newdir += dir;
if (chdir(newdir.c_str()))
{
WarningBox("%s\n%s\n%s", GetTranslation("Could not change to directory"), newdir.c_str(), strerror(errno));
return false;
}
char tmp[1024];
if (getcwd(tmp, sizeof(tmp))) m_szDestDir = tmp;
else { WarningBox("Could not read current directory"); return false; }
// Read contents of directory
if (!ReadDir(m_szDestDir)) { WarningBox("Could not read directory"); return false; }
m_pFileList->SetContent(&m_DirItems[0], m_DirItems.size());
m_pFileList->Draw();
UpdateCurDirText();
// HACK: Give textbox content
setCDKEntryValue(m_pFileList->GetAList()->entryField,
chtype2Char(m_pFileList->GetAList()->scrollField->item[m_pFileList->GetAList()->scrollField->currentItem]));
return true;
}
开发者ID:BackupTheBerlios,项目名称:nixstaller-svn,代码行数:29,代码来源:widgets.cpp
示例8: SlruScanDirectory
/*
* Scan the SimpleLRU directory and apply a callback to each file found in it.
*
* If the callback returns true, the scan is stopped. The last return value
* from the callback is returned.
*
* Note that the ordering in which the directory is scanned is not guaranteed.
*
* Note that no locking is applied.
*/
bool
SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data)
{
bool retval = false;
DIR *cldir;
struct dirent *clde;
int segno;
int segpage;
cldir = AllocateDir(ctl->Dir);
while ((clde = ReadDir(cldir, ctl->Dir)) != NULL)
{
if (strlen(clde->d_name) == 4 &&
strspn(clde->d_name, "0123456789ABCDEF") == 4)
{
segno = (int) strtol(clde->d_name, NULL, 16);
segpage = segno * SLRU_PAGES_PER_SEGMENT;
elog(DEBUG2, "SlruScanDirectory invoking callback on %s/%s",
ctl->Dir, clde->d_name);
retval = callback(ctl, clde->d_name, segpage, data);
if (retval)
break;
}
}
FreeDir(cldir);
return retval;
}
开发者ID:panyx0718,项目名称:shadow,代码行数:39,代码来源:slru.c
示例9: db_dir_size
/* Return physical size of directory contents, or 0 if dir doesn't exist */
static int64
db_dir_size(const char *path)
{
int64 dirsize = 0;
struct dirent *direntry;
DIR *dirdesc;
char filename[MAXPGPATH];
dirdesc = AllocateDir(path);
if (!dirdesc)
return 0;
while ((direntry = ReadDir(dirdesc, path)) != NULL)
{
struct stat fst;
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
snprintf(filename, MAXPGPATH, "%s/%s", path, direntry->d_name);
if (stat(filename, &fst) < 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m", filename)));
dirsize += fst.st_size;
}
FreeDir(dirdesc);
return dirsize;
}
开发者ID:shubham2094,项目名称:postgresql_8.2,代码行数:35,代码来源:dbsize.c
示例10: DeleteAllExportedSnapshotFiles
/*
* DeleteAllExportedSnapshotFiles
* Clean up any files that have been left behind by a crashed backend
* that had exported snapshots before it died.
*
* This should be called during database startup or crash recovery.
*/
void
DeleteAllExportedSnapshotFiles(void)
{
char buf[MAXPGPATH];
DIR *s_dir;
struct dirent *s_de;
if (!(s_dir = AllocateDir(SNAPSHOT_EXPORT_DIR)))
{
/*
* We really should have that directory in a sane cluster setup. But
* then again if we don't, it's not fatal enough to make it FATAL.
* Since we're running in the postmaster, LOG is our best bet.
*/
elog(LOG, "could not open directory \"%s\": %m", SNAPSHOT_EXPORT_DIR);
return;
}
while ((s_de = ReadDir(s_dir, SNAPSHOT_EXPORT_DIR)) != NULL)
{
if (strcmp(s_de->d_name, ".") == 0 ||
strcmp(s_de->d_name, "..") == 0)
continue;
snprintf(buf, MAXPGPATH, SNAPSHOT_EXPORT_DIR "/%s", s_de->d_name);
/* Again, unlink failure is not worthy of FATAL */
if (unlink(buf))
elog(LOG, "could not unlink file \"%s\": %m", buf);
}
FreeDir(s_dir);
}
开发者ID:avontd2868,项目名称:postgres,代码行数:39,代码来源:snapmgr.c
示例11: ReadDir
QList<QString> CPathLib::ReadDir(QString sDir)
{
QList<QString> aFiles;
ReadDir(sDir, &aFiles);
return aFiles;
}
开发者ID:freecores,项目名称:bw_tiff_compression,代码行数:8,代码来源:CPathLib.cpp
示例12: pg_ls_dir
/*
* List a directory (returns the filenames only)
*/
Datum
pg_ls_dir(PG_FUNCTION_ARGS)
{
FuncCallContext *funcctx;
struct dirent *de;
directory_fctx *fctx;
if (!superuser())
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
(errmsg("must be superuser to get directory listings"))));
if (SRF_IS_FIRSTCALL())
{
MemoryContext oldcontext;
funcctx = SRF_FIRSTCALL_INIT();
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
fctx = palloc(sizeof(directory_fctx));
fctx->location = convert_and_check_filename(PG_GETARG_TEXT_P(0));
fctx->dirdesc = AllocateDir(fctx->location);
if (!fctx->dirdesc)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open directory \"%s\": %m",
fctx->location)));
funcctx->user_fctx = fctx;
MemoryContextSwitchTo(oldcontext);
}
funcctx = SRF_PERCALL_SETUP();
fctx = (directory_fctx *) funcctx->user_fctx;
while ((de = ReadDir(fctx->dirdesc, fctx->location)) != NULL)
{
int len = strlen(de->d_name);
text *result;
if (strcmp(de->d_name, ".") == 0 ||
strcmp(de->d_name, "..") == 0)
continue;
result = palloc(len + VARHDRSZ);
SET_VARSIZE(result, len + VARHDRSZ);
memcpy(VARDATA(result), de->d_name, len);
SRF_RETURN_NEXT(funcctx, PointerGetDatum(result));
}
FreeDir(fctx->dirdesc);
SRF_RETURN_DONE(funcctx);
}
开发者ID:karthijrk,项目名称:gpdb,代码行数:60,代码来源:genfile.c
示例13: calculate_tablespace_size
/*
* calculate total size of tablespace
*/
static int64
calculate_tablespace_size(Oid tblspcOid)
{
char tblspcPath[MAXPGPATH];
char pathname[MAXPGPATH];
int64 totalsize = 0;
DIR *dirdesc;
struct dirent *direntry;
if (tblspcOid == DEFAULTTABLESPACE_OID)
snprintf(tblspcPath, MAXPGPATH, "base");
else if (tblspcOid == GLOBALTABLESPACE_OID)
snprintf(tblspcPath, MAXPGPATH, "global");
else
snprintf(tblspcPath, MAXPGPATH, "pg_tblspc/%u", tblspcOid);
dirdesc = AllocateDir(tblspcPath);
if (!dirdesc)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open tablespace directory \"%s\": %m",
tblspcPath)));
while ((direntry = ReadDir(dirdesc, tblspcPath)) != NULL)
{
struct stat fst;
CHECK_FOR_INTERRUPTS();
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
snprintf(pathname, MAXPGPATH, "%s/%s", tblspcPath, direntry->d_name);
if (stat(pathname, &fst) < 0)
{
if (errno == ENOENT)
continue;
else
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m", pathname)));
}
if (S_ISDIR(fst.st_mode))
totalsize += db_dir_size(pathname);
totalsize += fst.st_size;
}
FreeDir(dirdesc);
return totalsize;
}
开发者ID:rtzassociates,项目名称:postgresql-8.2.23,代码行数:59,代码来源:dbsize.c
示例14: ResetUnloggedRelations
/*
* Reset unlogged relations from before the last restart.
*
* If op includes UNLOGGED_RELATION_CLEANUP, we remove all forks of any
* relation with an "init" fork, except for the "init" fork itself.
*
* If op includes UNLOGGED_RELATION_INIT, we copy the "init" fork to the main
* fork.
*/
void
ResetUnloggedRelations(int op)
{
char temp_path[MAXPGPATH];
DIR *spc_dir;
struct dirent *spc_de;
MemoryContext tmpctx,
oldctx;
/* Log it. */
elog(DEBUG1, "resetting unlogged relations: cleanup %d init %d",
(op & UNLOGGED_RELATION_CLEANUP) != 0,
(op & UNLOGGED_RELATION_INIT) != 0);
/*
* Just to be sure we don't leak any memory, let's create a temporary
* memory context for this operation.
*/
tmpctx = AllocSetContextCreate(CurrentMemoryContext,
"ResetUnloggedRelations",
ALLOCSET_DEFAULT_MINSIZE,
ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE);
oldctx = MemoryContextSwitchTo(tmpctx);
/*
* First process unlogged files in pg_default ($PGDATA/base)
*/
ResetUnloggedRelationsInTablespaceDir("base", op);
/*
* Cycle through directories for all non-default tablespaces.
*/
spc_dir = AllocateDir("pg_tblspc");
while ((spc_de = ReadDir(spc_dir, "pg_tblspc")) != NULL)
{
if (strcmp(spc_de->d_name, ".") == 0 ||
strcmp(spc_de->d_name, "..") == 0)
continue;
snprintf(temp_path, sizeof(temp_path), "pg_tblspc/%s/%s",
spc_de->d_name, TABLESPACE_VERSION_DIRECTORY);
ResetUnloggedRelationsInTablespaceDir(temp_path, op);
}
FreeDir(spc_dir);
/*
* Restore memory context.
*/
MemoryContextSwitchTo(oldctx);
MemoryContextDelete(tmpctx);
}
开发者ID:AllenDou,项目名称:postgresql,代码行数:63,代码来源:reinit.c
示例15: pgarch_readyXlog
/*
* pgarch_readyXlog
*
* Return name of the oldest xlog file that has not yet been archived.
* No notification is set that file archiving is now in progress, so
* this would need to be extended if multiple concurrent archival
* tasks were created. If a failure occurs, we will completely
* re-copy the file at the next available opportunity.
*
* It is important that we return the oldest, so that we archive xlogs
* in order that they were written, for two reasons:
* 1) to maintain the sequential chain of xlogs required for recovery
* 2) because the oldest ones will sooner become candidates for
* recycling at time of checkpoint
*
* NOTE: the "oldest" comparison will presently consider all segments of
* a timeline with a smaller ID to be older than all segments of a timeline
* with a larger ID; the net result being that past timelines are given
* higher priority for archiving. This seems okay, or at least not
* obviously worth changing.
*/
static bool
pgarch_readyXlog(char *xlog)
{
/*
* open xlog status directory and read through list of xlogs that have the
* .ready suffix, looking for earliest file. It is possible to optimise
* this code, though only a single file is expected on the vast majority
* of calls, so....
*/
char XLogArchiveStatusDir[MAXPGPATH];
char newxlog[MAX_XFN_CHARS + 6 + 1];
DIR *rldir;
struct dirent *rlde;
bool found = false;
snprintf(XLogArchiveStatusDir, MAXPGPATH, XLOGDIR "/archive_status");
rldir = AllocateDir(XLogArchiveStatusDir);
if (rldir == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open archive status directory \"%s\": %m",
XLogArchiveStatusDir)));
while ((rlde = ReadDir(rldir, XLogArchiveStatusDir)) != NULL)
{
int basenamelen = (int) strlen(rlde->d_name) - 6;
if (basenamelen >= MIN_XFN_CHARS &&
basenamelen <= MAX_XFN_CHARS &&
strspn(rlde->d_name, VALID_XFN_CHARS) >= basenamelen &&
strcmp(rlde->d_name + basenamelen, ".ready") == 0)
{
if (!found)
{
strcpy(newxlog, rlde->d_name);
found = true;
}
else
{
if (strcmp(rlde->d_name, newxlog) < 0)
strcpy(newxlog, rlde->d_name);
}
}
}
FreeDir(rldir);
if (found)
{
/* truncate off the .ready */
newxlog[strlen(newxlog) - 6] = '\0';
strcpy(xlog, newxlog);
}
return found;
}
开发者ID:phpadmin,项目名称:postgres,代码行数:75,代码来源:pgarch.c
示例16: calculate_database_size
/*
* calculate size of database in all tablespaces
*/
static int64
calculate_database_size(Oid dbOid)
{
int64 totalsize;
DIR *dirdesc;
struct dirent *direntry;
char dirpath[MAXPGPATH];
char pathname[MAXPGPATH];
AclResult aclresult;
/* User must have connect privilege for target database */
aclresult = pg_database_aclcheck(dbOid, GetUserId(), ACL_CONNECT);
if (aclresult != ACLCHECK_OK)
aclcheck_error(aclresult, ACL_KIND_DATABASE,
get_database_name(dbOid));
/* Shared storage in pg_global is not counted */
/* Include pg_default storage */
snprintf(pathname, MAXPGPATH, "base/%u", dbOid);
totalsize = db_dir_size(pathname);
/* Scan the non-default tablespaces */
snprintf(dirpath, MAXPGPATH, "pg_tblspc");
dirdesc = AllocateDir(dirpath);
if (!dirdesc)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open tablespace directory \"%s\": %m",
dirpath)));
while ((direntry = ReadDir(dirdesc, dirpath)) != NULL)
{
CHECK_FOR_INTERRUPTS();
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
snprintf(pathname, MAXPGPATH, "pg_tblspc/%s/%s/%u",
direntry->d_name, TABLESPACE_VERSION_DIRECTORY, dbOid);
totalsize += db_dir_size(pathname);
}
FreeDir(dirdesc);
/* Complain if we found no trace of the DB at all */
if (!totalsize)
ereport(ERROR,
(ERRCODE_UNDEFINED_DATABASE,
errmsg("database with OID %u does not exist", dbOid)));
return totalsize;
}
开发者ID:markwkm,项目名称:postgres,代码行数:57,代码来源:dbsize.c
示例17: StartupReplicationSlots
/*
* Load all replication slots from disk into memory at server startup. This
* needs to be run before we start crash recovery.
*/
void
StartupReplicationSlots(XLogRecPtr checkPointRedo)
{
DIR *replication_dir;
struct dirent *replication_de;
ereport(DEBUG1,
(errmsg("starting up replication slots")));
/* restore all slots by iterating over all on-disk entries */
replication_dir = AllocateDir("pg_replslot");
while ((replication_de = ReadDir(replication_dir, "pg_replslot")) != NULL)
{
struct stat statbuf;
char path[MAXPGPATH];
if (strcmp(replication_de->d_name, ".") == 0 ||
strcmp(replication_de->d_name, "..") == 0)
continue;
snprintf(path, MAXPGPATH, "pg_replslot/%s", replication_de->d_name);
/* we're only creating directories here, skip if it's not our's */
if (lstat(path, &statbuf) == 0 && !S_ISDIR(statbuf.st_mode))
continue;
/* we crashed while a slot was being setup or deleted, clean up */
if (string_endswith(replication_de->d_name, ".tmp"))
{
if (!rmtree(path, true))
{
ereport(WARNING,
(errcode_for_file_access(),
errmsg("could not remove directory \"%s\"", path)));
continue;
}
fsync_fname("pg_replslot", true);
continue;
}
/* looks like a slot in a normal state, restore */
RestoreSlotFromDisk(replication_de->d_name);
}
FreeDir(replication_dir);
/* currently no slots exist, we're done. */
if (max_replication_slots <= 0)
return;
/* Now that we have recovered all the data, compute replication xmin */
ReplicationSlotsComputeRequiredXmin();
ReplicationSlotsComputeRequiredLSN();
}
开发者ID:AlexHill,项目名称:postgres,代码行数:57,代码来源:slot.c
示例18: ReadDir
int ReadDir(const char *dir)
{
int file_count = 0;
int temp = 0;
struct dirent* ptr;
DIR* srcdir = opendir(dir);
if (srcdir == NULL)
{
perror("opendir");
return -1;
}
while((ptr = readdir(srcdir)) != NULL) // traverse done
{
char* d_name;
d_name = ptr -> d_name;
printf("\n/////////////////////////START SCANNING//////////////////////////\n");
// Open catlog.csv file
FILE* fp;
char html_path[100] = {};
sprintf(html_path, "%s/%s/%s", getcwd(NULL, 0), inputdir, "catlog.csv");
fp = fopen(html_path, "w");
// Open directory
if (ptr -> d_type & DT_DIR) // check whether it is a directory
{
if(strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0)
{
char path[100];
sprintf(path, "%s/%s", dir, d_name);
temp = ReadDir(path);
file_count += temp;
}
}else{
// Check if the type matchs
if (isPNG(d_name) || isGIF(d_name) || isTIFF(d_name)){
fseek(fp, 0L, SEEK_END);
int sz = ftell(fp);
fseek(fp, 0L, SEEK_SET);
fprintf(fp,
}else{
printf("The file is not png/gif/tiff file, skipped it.\n");
}
}
开发者ID:jz685,项目名称:OS,代码行数:50,代码来源:server.c
示例19: SlruRecoverMirrorDir
static int
SlruRecoverMirrorDir(char *slru_dir)
{
DIR *cldir;
struct dirent *clde;
int retval = 0;
char *dir = NULL;
char *mirrorDir = NULL;
int counter = 0;
if (isTxnDir(slru_dir))
{
dir = makeRelativeToTxnFilespace(slru_dir);
mirrorDir = makeRelativeToPeerTxnFilespace(slru_dir);
}
else
{
dir = (char*)palloc(MAXPGPATH);
strncpy(dir, slru_dir, MAXPGPATH);
mirrorDir = (char*)palloc(MAXPGPATH);
strncpy(mirrorDir, slru_dir, MAXPGPATH);
}
cldir = AllocateDir(dir);
while ((clde = ReadDir(cldir, dir)) != NULL) {
if (strlen(clde->d_name) == 4 &&
strspn(clde->d_name, "0123456789ABCDEF") == 4) {
retval = MirrorFlatFile(slru_dir, clde->d_name);
if (retval != 0)
break;
}
counter++;
if (counter % log_count_recovered_files_batch == 0)
{
elog(LOG, "completed recovering %d files", counter);
}
}
elog(LOG, "completed recovering %d files", counter);
FreeDir(cldir);
pfree(dir);
pfree(mirrorDir);
return retval;
}
开发者ID:AnLingm,项目名称:gpdb,代码行数:50,代码来源:slru.c
示例20: copydir
/*
* copydir: copy a directory
*
* If recurse is false, subdirectories are ignored. Anything that's not
* a directory or a regular file is ignored.
*/
void
copydir(char *fromdir, char *todir, bool recurse)
{
DIR *xldir;
struct dirent *xlde;
char fromfile[MAXPGPATH];
char tofile[MAXPGPATH];
if (mkdir(todir, S_IRUSR | S_IWUSR | S_IXUSR) != 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not create directory \"%s\": %m", todir)));
xldir = AllocateDir(fromdir);
if (xldir == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open directory \"%s\": %m", fromdir)));
while ((xlde = ReadDir(xldir, fromdir)) != NULL)
{
struct stat fst;
/* If we got a cancel signal during the copy of the directory, quit */
CHECK_FOR_INTERRUPTS();
if (strcmp(xlde->d_name, ".") == 0 ||
strcmp(xlde->d_name, "..") == 0)
continue;
snprintf(fromfile, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
if (lstat(fromfile, &fst) < 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m", fromfile)));
if (S_ISDIR(fst.st_mode))
{
/* recurse to handle subdirectories */
if (recurse)
copydir(fromfile, tofile, true);
}
else if (S_ISREG(fst.st_mode))
copy_file(fromfile, tofile);
}
FreeDir(xldir);
}
开发者ID:ystk,项目名称:debian-postgresql-8.4,代码行数:56,代码来源:copydir.c
注:本文中的ReadDir函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论