libvirt/src/util/virrotatingfile.h
Daniel P. Berrange 910e65d973 util: add APIs for reading/writing from/to rotating files
Add virRotatingFileReader and virRotatingFileWriter objects
which allow reading & writing from/to files with automation
rotation to N backup files when a size limit is reached. This
is useful for guest logging when a guaranteed finite size
limit is required. Use of external tools like logrotate is
inadequate since it leaves the possibility for guest to DOS
the host in between invokations of logrotate.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2015-11-26 14:28:55 +00:00

63 lines
2.4 KiB
C

/*
* virrotatingfile.h: reading/writing of auto-rotating files
*
* Copyright (C) 2015 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#ifndef __VIR_ROTATING_FILE_H__
# define __VIR_ROTATING_FILE_H__
# include "internal.h"
typedef struct virRotatingFileWriter virRotatingFileWriter;
typedef virRotatingFileWriter *virRotatingFileWriterPtr;
typedef struct virRotatingFileReader virRotatingFileReader;
typedef virRotatingFileReader *virRotatingFileReaderPtr;
virRotatingFileWriterPtr virRotatingFileWriterNew(const char *path,
off_t maxlen,
size_t maxbackup,
bool truncate,
mode_t mode);
virRotatingFileReaderPtr virRotatingFileReaderNew(const char *path,
size_t maxbackup);
const char *virRotatingFileWriterGetPath(virRotatingFileWriterPtr file);
ino_t virRotatingFileWriterGetINode(virRotatingFileWriterPtr file);
off_t virRotatingFileWriterGetOffset(virRotatingFileWriterPtr file);
ssize_t virRotatingFileWriterAppend(virRotatingFileWriterPtr file,
const char *buf,
size_t len);
int virRotatingFileReaderSeek(virRotatingFileReaderPtr file,
ino_t inode,
off_t offset);
ssize_t virRotatingFileReaderConsume(virRotatingFileReaderPtr file,
char *buf,
size_t len);
void virRotatingFileWriterFree(virRotatingFileWriterPtr file);
void virRotatingFileReaderFree(virRotatingFileReaderPtr file);
#endif /* __VIR_ROTATING_FILE_H__ */