本文整理汇总了C++中AllocateFile函数的典型用法代码示例。如果您正苦于以下问题:C++ AllocateFile函数的具体用法?C++ AllocateFile怎么用?C++ AllocateFile使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了AllocateFile函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: utl_file_fcopy
/*
* CREATE FUNCTION utl_file.fcopy(
* src_location text,
* src_filename text,
* dest_location text,
* dest_filename text,
* start_line integer DEFAULT NULL
* end_line integer DEFAULT NULL)
*/
Datum
utl_file_fcopy(PG_FUNCTION_ARGS)
{
char *srcpath;
char *dstpath;
int start_line;
int end_line;
FILE *srcfile;
FILE *dstfile;
NOT_NULL_ARG(0);
NOT_NULL_ARG(1);
NOT_NULL_ARG(2);
NOT_NULL_ARG(3);
srcpath = get_safe_path(PG_GETARG_TEXT_P(0), PG_GETARG_TEXT_P(1));
dstpath = get_safe_path(PG_GETARG_TEXT_P(2), PG_GETARG_TEXT_P(3));
start_line = PG_GETARG_IF_EXISTS(4, INT32, 1);
if (start_line <= 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("start_line must be positive (%d passed)", start_line)));
end_line = PG_GETARG_IF_EXISTS(5, INT32, INT_MAX);
if (end_line <= 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("end_line must be positive (%d passed)", end_line)));
srcfile = AllocateFile(srcpath, "rt");
if (srcfile == NULL)
{
/* failed to open src file. */
IO_EXCEPTION();
}
dstfile = AllocateFile(dstpath, "wt");
if (dstfile == NULL)
{
/* failed to open dst file. */
fclose(srcfile);
IO_EXCEPTION();
}
if (copy_text_file(srcfile, dstfile, start_line, end_line))
IO_EXCEPTION();
FreeFile(srcfile);
FreeFile(dstfile);
PG_RETURN_VOID();
}
开发者ID:50wu,项目名称:gpdb,代码行数:62,代码来源:file.c
示例2: FindMyDatabase
/*
* FindMyDatabase -- get the critical info needed to locate my database
*
* Find the named database in pg_database, return its database OID and the
* OID of its default tablespace. Return TRUE if found, FALSE if not.
*
* Since we are not yet up and running as a backend, we cannot look directly
* at pg_database (we can't obtain locks nor participate in transactions).
* So to get the info we need before starting up, we must look at the "flat
* file" copy of pg_database that is helpfully maintained by flatfiles.c.
* This is subject to various race conditions, so after we have the
* transaction infrastructure started, we have to recheck the information;
* see InitPostgres.
*/
static bool
FindMyDatabase(const char *name, Oid *db_id, Oid *db_tablespace)
{
bool result = false;
char *filename;
FILE *db_file;
char thisname[NAMEDATALEN];
TransactionId db_frozenxid;
filename = database_getflatfilename();
db_file = AllocateFile(filename, "r");
if (db_file == NULL)
ereport(FATAL,
(errcode_for_file_access(),
errmsg("could not open file \"%s\": %m", filename)));
while (read_pg_database_line(db_file, thisname, db_id,
db_tablespace, &db_frozenxid))
{
if (strcmp(thisname, name) == 0)
{
result = true;
break;
}
}
FreeFile(db_file);
pfree(filename);
return result;
}
开发者ID:RuchikaGupta,项目名称:fa12,代码行数:45,代码来源:postinit.c
示例3: CreateAsyncSource
static Source *
CreateAsyncSource(const char *path, TupleDesc desc)
{
AsyncSource *self = palloc0(sizeof(AsyncSource));
self->base.read = (SourceReadProc) AsyncSourceRead;
self->base.close = (SourceCloseProc) AsyncSourceClose;
self->size = INITIAL_BUF_LEN;
self->begin = 0;
self->end = 0;
self->buffer = palloc0(self->size);
self->errmsg[0] = '\0';
self->eof = false;
self->fd = AllocateFile(path, "r");
if (self->fd == NULL)
ereport(ERROR, (errcode_for_file_access(),
errmsg("could not open \"%s\" %m", path)));
#if defined(USE_POSIX_FADVISE)
posix_fadvise(fileno(self->fd), 0, 0, POSIX_FADV_SEQUENTIAL | POSIX_FADV_NOREUSE | POSIX_FADV_WILLNEED);
#endif
pthread_mutex_init(&self->lock, NULL);
if (pthread_create(&self->th, NULL, AsyncSourceMain, self) != 0)
elog(ERROR, "pthread_create");
return (Source *) self;
}
开发者ID:bwtakacy,项目名称:prev_pg_bulkload_repo,代码行数:30,代码来源:source.c
示例4: pg_record_shmem_shutdown
/* Dumps the histogram data into a file (with a md5 hash of the contents at the beginning). */
static
void pg_record_shmem_shutdown(int code, Datum arg) {
FILE * file;
/* do we need to write the queries? */
if (query_buffer->next == 0) {
return;
}
prepare_file(log_file, query_buffer, query_buffer->next);
file = AllocateFile(log_file->curr_filename, PG_BINARY_A);
if (file == NULL)
goto error;
/* now write the actual shared segment */
if (fwrite(query_buffer->buffer, query_buffer->next, 1, file) != 1)
goto error;
FreeFile(file);
return;
error:
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not write query buffer to the file \"%s\": %m",
log_file->curr_filename)));
if (file)
FreeFile(file);
}
开发者ID:tvondra,项目名称:query_recorder,代码行数:34,代码来源:record.c
示例5: XLogArchiveNotify
/*
* XLogArchiveNotify
*
* Create an archive notification file
*
* The name of the notification file is the message that will be picked up
* by the archiver, e.g. we write 0000000100000001000000C6.ready
* and the archiver then knows to archive XLOGDIR/0000000100000001000000C6,
* then when complete, rename it to 0000000100000001000000C6.done
*/
void
XLogArchiveNotify(const char *xlog)
{
char archiveStatusPath[MAXPGPATH];
FILE *fd;
/* insert an otherwise empty file called <XLOG>.ready */
StatusFilePath(archiveStatusPath, xlog, ".ready");
fd = AllocateFile(archiveStatusPath, "w");
if (fd == NULL)
{
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not create archive status file \"%s\": %m",
archiveStatusPath)));
return;
}
if (FreeFile(fd))
{
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not write archive status file \"%s\": %m",
archiveStatusPath)));
return;
}
/* Notify archiver that it's got something to do */
if (IsUnderPostmaster)
SendPostmasterSignal(PMSIGNAL_WAKEN_ARCHIVER);
}
开发者ID:JiannengSun,项目名称:postgres,代码行数:40,代码来源:xlogarchive.c
示例6: buffer_write
/* Dumps the histogram data into a file (with a md5 hash of the contents at the beginning). */
static
void buffer_write() {
FILE * file;
prepare_file(log_file, query_buffer, query_buffer->next);
file = AllocateFile(log_file->curr_filename, PG_BINARY_A);
if (file == NULL)
goto error;
/* now write the actual shared segment */
if (fwrite(query_buffer->buffer, query_buffer->next, 1, file) != 1)
goto error;
FreeFile(file);
return;
error:
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not write query histogram file \"%s\": %m",
log_file->curr_filename)));
if (file)
FreeFile(file);
}
开发者ID:tvondra,项目名称:query_recorder,代码行数:29,代码来源:record.c
示例7: pg_backup_start_time
/*
* Returns start time of an online exclusive backup.
*
* When there's no exclusive backup in progress, the function
* returns NULL.
*/
Datum
pg_backup_start_time(PG_FUNCTION_ARGS)
{
Datum xtime;
FILE *lfp;
char fline[MAXPGPATH];
char backup_start_time[30];
/*
* See if label file is present
*/
lfp = AllocateFile(BACKUP_LABEL_FILE, "r");
if (lfp == NULL)
{
if (errno != ENOENT)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not read file \"%s\": %m",
BACKUP_LABEL_FILE)));
PG_RETURN_NULL();
}
/*
* Parse the file to find the START TIME line.
*/
backup_start_time[0] = '\0';
while (fgets(fline, sizeof(fline), lfp) != NULL)
{
if (sscanf(fline, "START TIME: %25[^\n]\n", backup_start_time) == 1)
break;
}
/* Check for a read error. */
if (ferror(lfp))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not read file \"%s\": %m", BACKUP_LABEL_FILE)));
/* Close the backup label file. */
if (FreeFile(lfp))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not close file \"%s\": %m", BACKUP_LABEL_FILE)));
if (strlen(backup_start_time) == 0)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("invalid data in file \"%s\"", BACKUP_LABEL_FILE)));
/*
* Convert the time string read from file to TimestampTz form.
*/
xtime = DirectFunctionCall3(timestamptz_in,
CStringGetDatum(backup_start_time),
ObjectIdGetDatum(InvalidOid),
Int32GetDatum(-1));
PG_RETURN_DATUM(xtime);
}
开发者ID:Gordiychuk,项目名称:postgres,代码行数:65,代码来源:xlogfuncs.c
示例8: ErrorLogWrite
/*
* Write into the error log file. This opens the file every time,
* so that we can keep it simple to deal with concurrent write.
*/
static void
ErrorLogWrite(CdbSreh *cdbsreh)
{
HeapTuple tuple;
char filename[MAXPGPATH];
FILE *fp;
pg_crc32 crc;
Assert(OidIsValid(cdbsreh->relid));
ErrorLogFileName(filename, MyDatabaseId, cdbsreh->relid);
tuple = FormErrorTuple(cdbsreh);
INIT_CRC32C(crc);
COMP_CRC32C(crc, tuple->t_data, tuple->t_len);
FIN_CRC32C(crc);
LWLockAcquire(ErrorLogLock, LW_EXCLUSIVE);
fp = AllocateFile(filename, "a");
if (!fp)
{
mkdir(ErrorLogDir, S_IRWXU);
fp = AllocateFile(filename, "a");
}
if (!fp)
ereport(ERROR,
(errmsg("could not open \"%s\": %m", filename)));
/*
* format:
* 0-4: length
* 5-8: crc
* 9-n: tuple data
*/
if (fwrite(&tuple->t_len, 1, sizeof(tuple->t_len), fp) != sizeof(tuple->t_len))
elog(ERROR, "could not write tuple length: %m");
if (fwrite(&crc, 1, sizeof(pg_crc32), fp) != sizeof(pg_crc32))
elog(ERROR, "could not write checksum: %m");
if (fwrite(tuple->t_data, 1, tuple->t_len, fp) != tuple->t_len)
elog(ERROR, "could not write tuple data: %m");
FreeFile(fp);
LWLockRelease(ErrorLogLock);
heap_freetuple(tuple);
}
开发者ID:LJoNe,项目名称:gpdb,代码行数:50,代码来源:cdbsreh.c
示例9: remove_duplicate
static void
remove_duplicate(Spooler *self, Relation heap, IndexTuple itup, const char *relname)
{
HeapTupleData tuple;
BlockNumber blknum;
BlockNumber offnum;
Buffer buffer;
Page page;
ItemId itemid;
blknum = ItemPointerGetBlockNumber(&itup->t_tid);
offnum = ItemPointerGetOffsetNumber(&itup->t_tid);
buffer = ReadBuffer(heap, blknum);
LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer);
itemid = PageGetItemId(page, offnum);
tuple.t_data = ItemIdIsNormal(itemid)
? (HeapTupleHeader) PageGetItem(page, itemid)
: NULL;
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
if (tuple.t_data != NULL)
{
char *str;
TupleDesc tupdesc;
simple_heap_delete(heap, &itup->t_tid);
/* output duplicate bad file. */
if (self->dup_fp == NULL)
if ((self->dup_fp = AllocateFile(self->dup_badfile, "w")) == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open duplicate bad file \"%s\": %m",
self->dup_badfile)));
tupdesc = RelationGetDescr(heap);
tuple.t_len = ItemIdGetLength(itemid);
tuple.t_self = itup->t_tid;
str = tuple_to_cstring(RelationGetDescr(heap), &tuple);
if (fprintf(self->dup_fp, "%s\n", str) < 0 || fflush(self->dup_fp))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not write parse badfile \"%s\": %m",
self->dup_badfile)));
pfree(str);
}
ReleaseBuffer(buffer);
LoggerLog(WARNING, "Duplicate error Record " int64_FMT
": Rejected - duplicate key value violates unique constraint \"%s\"\n",
self->dup_old + self->dup_new, relname);
}
开发者ID:chuongnn,项目名称:pg_bulkload,代码行数:57,代码来源:pg_btree.c
示例10: read_binary_file
/*
* Read a section of a file, returning it as bytea
*
* Caller is responsible for all permissions checking.
*
* We read the whole of the file when bytes_to_read is negative.
*/
bytea *
read_binary_file(const char *filename, int64 seek_offset, int64 bytes_to_read)
{
bytea *buf;
size_t nbytes;
FILE *file;
if (bytes_to_read < 0)
{
if (seek_offset < 0)
bytes_to_read = -seek_offset;
else
{
struct stat fst;
if (stat(filename, &fst) < 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m", filename)));
bytes_to_read = fst.st_size - seek_offset;
}
}
/* not sure why anyone thought that int64 length was a good idea */
if (bytes_to_read > (MaxAllocSize - VARHDRSZ))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("requested length too large")));
if ((file = AllocateFile(filename, PG_BINARY_R)) == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open file \"%s\" for reading: %m",
filename)));
if (fseeko(file, (off_t) seek_offset,
(seek_offset >= 0) ? SEEK_SET : SEEK_END) != 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not seek in file \"%s\": %m", filename)));
buf = (bytea *) palloc((Size) bytes_to_read + VARHDRSZ);
nbytes = fread(VARDATA(buf), 1, (size_t) bytes_to_read, file);
if (ferror(file))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not read file \"%s\": %m", filename)));
SET_VARSIZE(buf, nbytes + VARHDRSZ);
FreeFile(file);
return buf;
}
开发者ID:BioBD,项目名称:Hypothetical_Indexes,代码行数:64,代码来源:genfile.c
示例11: pgss_shmem_shutdown
/*
* shmem_shutdown hook: Dump statistics into file.
*
* Note: we don't bother with acquiring lock, because there should be no
* other processes running when this is called.
*/
static void
pgss_shmem_shutdown(int code, Datum arg)
{
FILE *file;
HASH_SEQ_STATUS hash_seq;
int32 num_entries;
pgssEntry *entry;
/* Don't try to dump during a crash. */
if (code)
return;
/* Safety check ... shouldn't get here unless shmem is set up. */
if (!pgss || !pgss_hash)
return;
/* Don't dump if told not to. */
if (!pgss_save)
return;
file = AllocateFile(PGSS_DUMP_FILE, PG_BINARY_W);
if (file == NULL)
goto error;
if (fwrite(&PGSS_FILE_HEADER, sizeof(uint32), 1, file) != 1)
goto error;
num_entries = hash_get_num_entries(pgss_hash);
if (fwrite(&num_entries, sizeof(int32), 1, file) != 1)
goto error;
hash_seq_init(&hash_seq, pgss_hash);
while ((entry = hash_seq_search(&hash_seq)) != NULL)
{
int len = entry->key.query_len;
if (fwrite(entry, offsetof(pgssEntry, mutex), 1, file) != 1 ||
fwrite(entry->query, 1, len, file) != len)
goto error;
}
if (FreeFile(file))
{
file = NULL;
goto error;
}
return;
error:
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not write pg_stat_statement file \"%s\": %m",
PGSS_DUMP_FILE)));
if (file)
FreeFile(file);
unlink(PGSS_DUMP_FILE);
}
开发者ID:HBPSP8Repo,项目名称:NoDB,代码行数:63,代码来源:pg_stat_statements.c
示例12: pg_read_file
/*
* Read a section of a file, returning it as text
*/
Datum
pg_read_file(PG_FUNCTION_ARGS)
{
text *filename_t = PG_GETARG_TEXT_P(0);
int64 seek_offset = PG_GETARG_INT64(1);
int64 bytes_to_read = PG_GETARG_INT64(2);
char *buf;
size_t nbytes;
FILE *file;
char *filename;
if (!superuser())
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
(errmsg("must be superuser to read files"))));
filename = convert_and_check_filename(filename_t);
if ((file = AllocateFile(filename, PG_BINARY_R)) == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open file \"%s\" for reading: %m",
filename)));
if (fseeko(file, (off_t) seek_offset,
(seek_offset >= 0) ? SEEK_SET : SEEK_END) != 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not seek in file \"%s\": %m", filename)));
if (bytes_to_read < 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("requested length cannot be negative")));
/* not sure why anyone thought that int64 length was a good idea */
if (bytes_to_read > (MaxAllocSize - VARHDRSZ))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("requested length too large")));
buf = palloc((Size) bytes_to_read + VARHDRSZ);
nbytes = fread(VARDATA(buf), 1, (size_t) bytes_to_read, file);
if (ferror(file))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not read file \"%s\": %m", filename)));
SET_VARSIZE(buf, nbytes + VARHDRSZ);
FreeFile(file);
pfree(filename);
PG_RETURN_TEXT_P(buf);
}
开发者ID:karthijrk,项目名称:gpdb,代码行数:60,代码来源:genfile.c
示例13: load_dh_file
/*
* Load precomputed DH parameters.
*
* To prevent "downgrade" attacks, we perform a number of checks
* to verify that the DBA-generated DH parameters file contains
* what we expect it to contain.
*/
static DH *
load_dh_file(char *filename, bool isServerStart)
{
FILE *fp;
DH *dh = NULL;
int codes;
/* attempt to open file. It's not an error if it doesn't exist. */
if ((fp = AllocateFile(filename, "r")) == NULL)
{
ereport(isServerStart ? FATAL : LOG,
(errcode_for_file_access(),
errmsg("could not open DH parameters file \"%s\": %m",
filename)));
return NULL;
}
dh = PEM_read_DHparams(fp, NULL, NULL, NULL);
FreeFile(fp);
if (dh == NULL)
{
ereport(isServerStart ? FATAL : LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("could not load DH parameters file: %s",
SSLerrmessage(ERR_get_error()))));
return NULL;
}
/* make sure the DH parameters are usable */
if (DH_check(dh, &codes) == 0)
{
ereport(isServerStart ? FATAL : LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid DH parameters: %s",
SSLerrmessage(ERR_get_error()))));
return NULL;
}
if (codes & DH_CHECK_P_NOT_PRIME)
{
ereport(isServerStart ? FATAL : LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid DH parameters: p is not prime")));
return NULL;
}
if ((codes & DH_NOT_SUITABLE_GENERATOR) &&
(codes & DH_CHECK_P_NOT_SAFE_PRIME))
{
ereport(isServerStart ? FATAL : LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid DH parameters: neither suitable generator or safe prime")));
return NULL;
}
return dh;
}
开发者ID:adityavs,项目名称:postgres,代码行数:63,代码来源:be-secure-openssl.c
示例14: pg_file_write
Datum
pg_file_write(PG_FUNCTION_ARGS)
{
FILE *f;
char *filename;
text *data;
int64 count = 0;
requireSuperuser();
filename = convert_and_check_filename(PG_GETARG_TEXT_PP(0), false);
data = PG_GETARG_TEXT_PP(1);
if (!PG_GETARG_BOOL(2))
{
struct stat fst;
if (stat(filename, &fst) >= 0)
ereport(ERROR,
(ERRCODE_DUPLICATE_FILE,
errmsg("file \"%s\" exists", filename)));
f = AllocateFile(filename, "wb");
}
else
f = AllocateFile(filename, "ab");
if (!f)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open file \"%s\" for writing: %m",
filename)));
count = fwrite(VARDATA_ANY(data), 1, VARSIZE_ANY_EXHDR(data), f);
if (count != VARSIZE_ANY_EXHDR(data) || FreeFile(f))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not write file \"%s\": %m", filename)));
PG_RETURN_INT64(count);
}
开发者ID:AmiGanguli,项目名称:postgres,代码行数:41,代码来源:adminpack.c
示例15: set_short_version
/*
* write out the PG_VERSION file in the specified directory
*/
static void
set_short_version(const char *path)
{
char *short_version;
bool gotdot = false;
int end;
char *fullname;
FILE *version_file;
/* Construct short version string (should match initdb.c) */
short_version = pstrdup(PG_VERSION);
for (end = 0; short_version[end] != '\0'; end++)
{
if (short_version[end] == '.')
{
Assert(end != 0);
if (gotdot)
break;
else
gotdot = true;
}
else if (short_version[end] < '0' || short_version[end] > '9')
{
/* gone past digits and dots */
break;
}
}
Assert(end > 0 && short_version[end - 1] != '.' && gotdot);
short_version[end] = '\0';
/* Now write the file */
fullname = palloc(strlen(path) + 11 + 1);
sprintf(fullname, "%s/PG_VERSION", path);
version_file = AllocateFile(fullname, PG_BINARY_W);
if (version_file == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not write to file \"%s\": %m",
fullname)));
fprintf(version_file, "%s\n", short_version);
if (FreeFile(version_file))
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not write to file \"%s\": %m",
fullname)));
pfree(fullname);
pfree(short_version);
}
开发者ID:shubham2094,项目名称:postgresql_8.1,代码行数:53,代码来源:tablespace.c
示例16: tsearch_readline_begin
/*
* Set up to read a file using tsearch_readline(). This facility is
* better than just reading the file directly because it provides error
* context pointing to the specific line where a problem is detected.
*
* Expected usage is:
*
* tsearch_readline_state trst;
*
* if (!tsearch_readline_begin(&trst, filename))
* ereport(ERROR,
* (errcode(ERRCODE_CONFIG_FILE_ERROR),
* errmsg("could not open stop-word file \"%s\": %m",
* filename)));
* while ((line = tsearch_readline(&trst)) != NULL)
* process line;
* tsearch_readline_end(&trst);
*
* Note that the caller supplies the ereport() for file open failure;
* this is so that a custom message can be provided. The filename string
* passed to tsearch_readline_begin() must remain valid through
* tsearch_readline_end().
*/
bool
tsearch_readline_begin(tsearch_readline_state *stp,
const char *filename)
{
if ((stp->fp = AllocateFile(filename, "r")) == NULL)
return false;
stp->filename = filename;
stp->lineno = 0;
stp->curline = NULL;
/* Setup error traceback support for ereport() */
stp->cb.callback = tsearch_readline_callback;
stp->cb.arg = (void *) stp;
stp->cb.previous = error_context_stack;
error_context_stack = &stp->cb;
return true;
}
开发者ID:0x0FFF,项目名称:postgres,代码行数:39,代码来源:ts_locale.c
示例17: XLogArchiveForceDone
/*
* XLogArchiveForceDone
*
* Emit notification forcibly that an XLOG segment file has been successfully
* archived, by creating <XLOG>.done regardless of whether <XLOG>.ready
* exists or not.
*/
void
XLogArchiveForceDone(const char *xlog)
{
char archiveReady[MAXPGPATH];
char archiveDone[MAXPGPATH];
struct stat stat_buf;
FILE *fd;
/* Exit if already known done */
StatusFilePath(archiveDone, xlog, ".done");
if (stat(archiveDone, &stat_buf) == 0)
return;
/* If .ready exists, rename it to .done */
StatusFilePath(archiveReady, xlog, ".ready");
if (stat(archiveReady, &stat_buf) == 0)
{
if (rename(archiveReady, archiveDone) < 0)
ereport(WARNING,
(errcode_for_file_access(),
errmsg("could not rename file \"%s\" to \"%s\": %m",
archiveReady, archiveDone)));
return;
}
/* insert an otherwise empty file called <XLOG>.done */
fd = AllocateFile(archiveDone, "w");
if (fd == NULL)
{
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not create archive status file \"%s\": %m",
archiveDone)));
return;
}
if (FreeFile(fd))
{
ereport(LOG,
(errcode_for_file_access(),
errmsg("could not write archive status file \"%s\": %m",
archiveDone)));
return;
}
}
开发者ID:JiannengSun,项目名称:postgres,代码行数:52,代码来源:xlogarchive.c
示例18: CreateFileSource
static Source *
CreateFileSource(const char *path, TupleDesc desc)
{
FileSource *self = palloc0(sizeof(FileSource));
self->base.read = (SourceReadProc) FileSourceRead;
self->base.close = (SourceCloseProc) FileSourceClose;
self->fd = AllocateFile(path, "r");
if (self->fd == NULL)
ereport(ERROR, (errcode_for_file_access(),
errmsg("could not open \"%s\" %m", path)));
#if defined(USE_POSIX_FADVISE)
posix_fadvise(fileno(self->fd), 0, 0, POSIX_FADV_SEQUENTIAL | POSIX_FADV_NOREUSE | POSIX_FADV_WILLNEED);
#endif
return (Source *) self;
}
开发者ID:bwtakacy,项目名称:prev_pg_bulkload_repo,代码行数:18,代码来源:source.c
示例19: write_nondefault_variables
void
write_nondefault_variables(GucContext context)
{
int elevel;
FILE *fp;
int i;
Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP);
elevel = (context == PGC_SIGHUP) ? LOG : ERROR;
/*
* Open file
*/
fp = AllocateFile(CONFIG_EXEC_PARAMS_NEW, "w");
if (!fp)
{
ereport(elevel,
(errcode_for_file_access(),
errmsg("could not write to file \"%s\": %m",
CONFIG_EXEC_PARAMS_NEW)));
return;
}
for (i = 0; i < num_guc_variables; i++)
{
write_one_nondefault_variable(fp, guc_variables[i]);
}
if (FreeFile(fp))
{
ereport(elevel,
(errcode_for_file_access(),
errmsg("could not write to file \"%s\": %m",
CONFIG_EXEC_PARAMS_NEW)));
return;
}
/*
* Put new file in place. This could delay on Win32, but we don't hold
* any exclusive locks.
*/
rename(CONFIG_EXEC_PARAMS_NEW, CONFIG_EXEC_PARAMS);
}
开发者ID:pganalyze,项目名称:collector,代码行数:44,代码来源:src_backend_utils_misc_guc.c
示例20: CreateLogger
void
CreateLogger(const char *path, bool verbose, bool writer)
{
memset(&logger, 0, sizeof(logger));
logger.verbose = verbose;
logger.writer = writer;
if (!is_absolute_path(path))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("relative path not allowed for LOGFILE: %s", path)));
logger.logfile = pstrdup(path);
logger.fp = AllocateFile(logger.logfile, "at");
if (logger.fp == NULL)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not open loader log file \"%s\": %m",
logger.logfile)));
}
开发者ID:Komzpa,项目名称:pg_bulkload,代码行数:21,代码来源:logger.c
注:本文中的AllocateFile函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论