本文整理汇总了C++中pread64函数的典型用法代码示例。如果您正苦于以下问题:C++ pread64函数的具体用法?C++ pread64怎么用?C++ pread64使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pread64函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: fusecow_read
static int fusecow_read(const char *path, char *buf, size_t size,
off64_t offset, struct fuse_file_info *fi)
{
int res;
long long int block_number = offset / block_size;
if(offset + size > (block_number+1)*block_size) {
size = (block_number+1)*block_size - offset; // read only one block
}
if(write_map_get(block_number)) {
res=pread64(fd_write, buf, size, offset);
} else if(read_map_get(block_number)) {
res=pread64(fd_read, buf, size, offset);
} else {
res=pread64(fd, buf, size, offset);
// Data was never read yet, write to copy-on-read file.
if (res != write_read(buf, size, offset) && read_only)
res = -errno;
}
if (res == -1)
res = -errno;
return res;
}
开发者ID:dellastreet,项目名称:fusecoraw,代码行数:27,代码来源:fusecoraw.c
示例2: PPSSPP_PLATFORM
size_t LocalFileLoader::ReadAt(s64 absolutePos, size_t bytes, size_t count, void *data, Flags flags) {
#if PPSSPP_PLATFORM(ANDROID)
// pread64 doesn't appear to actually be 64-bit safe, though such ISOs are uncommon. See #10862.
if (absolutePos <= 0x7FFFFFFF) {
#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS < 64
return pread64(fd_, data, bytes * count, absolutePos) / bytes;
#else
return pread(fd_, data, bytes * count, absolutePos) / bytes;
#endif
} else {
// Since pread64 doesn't change the file offset, it should be safe to avoid the lock in the common case.
std::lock_guard<std::mutex> guard(readLock_);
lseek64(fd_, absolutePos, SEEK_SET);
return read(fd_, data, bytes * count) / bytes;
}
#elif !defined(_WIN32)
#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS < 64
return pread64(fd_, data, bytes * count, absolutePos) / bytes;
#else
return pread(fd_, data, bytes * count, absolutePos) / bytes;
#endif
#else
DWORD read = -1;
OVERLAPPED offset = { 0 };
offset.Offset = (DWORD)(absolutePos & 0xffffffff);
offset.OffsetHigh = (DWORD)((absolutePos & 0xffffffff00000000) >> 32);
auto result = ReadFile(handle_, data, (DWORD)(bytes * count), &read, &offset);
return result == TRUE ? (size_t)read / bytes : -1;
#endif
}
开发者ID:AmesianX,项目名称:ppsspp,代码行数:30,代码来源:LocalFileLoader.cpp
示例3: ADIOI_HFS_ReadContig
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status, int *error_code)
{
MPI_Count err=-1, datatype_size, len;
#ifndef PRINT_ERR_MSG
static char myname[] = "ADIOI_HFS_READCONTIG";
#endif
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
#ifdef SPPUX
fd->fp_sys_posn = -1; /* set it to null, since we are using pread */
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
err = pread64(fd->fd_sys, buf, len, offset);
else { /* read from curr. location of ind. file pointer */
err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
fd->fp_ind += err;
}
#endif
#ifdef HPUX
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
if (fd->fp_sys_posn != offset)
lseek64(fd->fd_sys, offset, SEEK_SET);
err = read(fd->fd_sys, buf, len);
fd->fp_sys_posn = offset + err;
/* individual file pointer not updated */
}
else { /* read from curr. location of ind. file pointer */
if (fd->fp_sys_posn != fd->fp_ind)
lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
err = read(fd->fd_sys, buf, len);
fd->fp_ind += err;
fd->fp_sys_posn = fd->fp_ind;
}
#endif
#ifdef HAVE_STATUS_SET_BYTES
if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
#endif
if (err == -1 ) {
#ifdef MPICH
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
#elif defined(PRINT_ERR_MSG)
*error_code = (err == -1) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
#else /* MPICH-1 */
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
myname, "I/O Error", "%s", strerror(errno));
ADIOI_Error(fd, *error_code, myname);
#endif
}
else *error_code = MPI_SUCCESS;
}
开发者ID:00datman,项目名称:ompi,代码行数:58,代码来源:ad_hfs_read.c
示例4: btrfs_read_dev_super
int btrfs_read_dev_super(int fd, struct btrfs_super_block *sb, u64 sb_bytenr)
{
u8 fsid[BTRFS_FSID_SIZE];
int fsid_is_initialized = 0;
struct btrfs_super_block buf;
int i;
int ret;
u64 transid = 0;
u64 bytenr;
if (sb_bytenr != BTRFS_SUPER_INFO_OFFSET) {
ret = pread64(fd, &buf, sizeof(buf), sb_bytenr);
if (ret < sizeof(buf))
return -1;
if (btrfs_super_bytenr(&buf) != sb_bytenr ||
buf.magic != cpu_to_le64(BTRFS_MAGIC))
return -1;
memcpy(sb, &buf, sizeof(*sb));
return 0;
}
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
ret = pread64(fd, &buf, sizeof(buf), bytenr);
if (ret < sizeof(buf))
break;
if (btrfs_super_bytenr(&buf) != bytenr )
continue;
/* if magic is NULL, the device was removed */
if (buf.magic == 0 && i == 0)
return -1;
if (buf.magic != cpu_to_le64(BTRFS_MAGIC))
continue;
if (!fsid_is_initialized) {
memcpy(fsid, buf.fsid, sizeof(fsid));
fsid_is_initialized = 1;
} else if (memcmp(fsid, buf.fsid, sizeof(fsid))) {
/*
* the superblocks (the original one and
* its backups) contain data of different
* filesystems -> the super cannot be trusted
*/
continue;
}
if (btrfs_super_generation(&buf) > transid) {
memcpy(sb, &buf, sizeof(*sb));
transid = btrfs_super_generation(&buf);
}
}
return transid > 0 ? 0 : -1;
}
开发者ID:AK47POMA,项目名称:btrfs-progs,代码行数:57,代码来源:disk-io.c
示例5: pci_vfio_get_msix_bar
/* get PCI BAR number where MSI-X interrupts are */
static int
pci_vfio_get_msix_bar(int fd, int *msix_bar, uint32_t *msix_table_offset,
uint32_t *msix_table_size)
{
int ret;
uint32_t reg;
uint16_t flags;
uint8_t cap_id, cap_offset;
/* read PCI capability pointer from config space */
ret = pread64(fd, ®, sizeof(reg),
VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
PCI_CAPABILITY_LIST);
if (ret != sizeof(reg)) {
RTE_LOG(ERR, EAL, "Cannot read capability pointer from PCI "
"config space!\n");
return -1;
}
/* we need first byte */
cap_offset = reg & 0xFF;
while (cap_offset) {
/* read PCI capability ID */
ret = pread64(fd, ®, sizeof(reg),
VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
cap_offset);
if (ret != sizeof(reg)) {
RTE_LOG(ERR, EAL, "Cannot read capability ID from PCI "
"config space!\n");
return -1;
}
/* we need first byte */
cap_id = reg & 0xFF;
/* if we haven't reached MSI-X, check next capability */
if (cap_id != PCI_CAP_ID_MSIX) {
ret = pread64(fd, ®, sizeof(reg),
VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
cap_offset);
if (ret != sizeof(reg)) {
RTE_LOG(ERR, EAL, "Cannot read capability pointer from PCI "
"config space!\n");
return -1;
}
/* we need second byte */
cap_offset = (reg & 0xFF00) >> 8;
continue;
}
/* else, read table offset */
else {
开发者ID:emmericp,项目名称:dpdk,代码行数:56,代码来源:eal_pci_vfio.c
示例6: handle_read
static int handle_read(struct fuse* fuse, struct fuse_handler* handler,
const struct fuse_in_header* hdr, const struct fuse_read_in* req)
{
struct handle *h = id_to_ptr(req->fh);
__u64 unique = hdr->unique;
__u32 size = req->size;
__u64 offset = req->offset;
int res;
/* Don't access any other fields of hdr or req beyond this point, the read buffer
* overlaps the request buffer and will clobber data in the request. This
* saves us 128KB per request handler thread at the cost of this scary comment. */
TRACE("[%d] READ %p(%d) %[email protected]%llu\n", handler->token,
h, h->fd, size, offset);
if (size > sizeof(handler->read_buffer)) {
return -EINVAL;
}
res = pread64(h->fd, handler->read_buffer, size, offset);
if (res < 0) {
return -errno;
}
fuse_reply(fuse, unique, handler->read_buffer, res);
return NO_STATUS;
}
开发者ID:1Anastaska,项目名称:platform_system_core,代码行数:25,代码来源:sdcard.c
示例7: pci_vfio_read_config
int
pci_vfio_read_config(const struct rte_intr_handle *intr_handle,
void *buf, size_t len, off_t offs)
{
return pread64(intr_handle->vfio_dev_fd, buf, len,
VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) + offs);
}
开发者ID:emmericp,项目名称:dpdk,代码行数:7,代码来源:eal_pci_vfio.c
示例8: osd_read
file_error osd_read(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
ssize_t result;
switch (file->type)
{
case SDLFILE_FILE:
#if defined(SDLMAME_DARWIN) || defined(SDLMAME_BSD)
result = pread(file->handle, buffer, count, offset);
if (result < 0)
#elif defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_OS2) || defined(__CELLOS_LV2__)
lseek(file->handle, (UINT32)offset&0xffffffff, SEEK_SET);
result = read(file->handle, buffer, count);
if (result < 0)
#elif defined(SDLMAME_UNIX)
result = pread64(file->handle, buffer, count, offset);
if (result < 0)
#else
#error Unknown SDL SUBARCH!
#endif
return error_to_file_error(errno);
if (actual != NULL)
*actual = result;
return FILERR_NONE;
break;
default:
return FILERR_FAILURE;
}
}
开发者ID:cdenix,项目名称:psmame,代码行数:32,代码来源:sdlfile.c
示例9: fdio_bdev_read
/*
* In order to read from a block-oriented device, we pick up the seek pointer,
* read each containing block, and then copy the desired range of bytes back
* into the caller's buffer. Unfortunately Solaris hardcodes the notion of
* DEV_BSIZE as the transfer unit for such devices; no ioctl() to obtain the
* transfer unit dynamically is currently available. At the end of the
* transfer we reset the seek pointer to where the caller thinks it should be.
*/
static ssize_t
fdio_bdev_read(mdb_io_t *io, void *buf, size_t nbytes)
{
fd_data_t *fdp = io->io_data;
ssize_t resid = nbytes;
uchar_t blk[DEV_BSIZE];
off64_t off;
if (io->io_next != NULL)
return (IOP_READ(io->io_next, buf, nbytes));
if ((off = lseek64(fdp->fd_fd, 0, SEEK_CUR)) == -1)
return (-1); /* errno is set for us */
while (resid != 0) {
off64_t devoff = off & ~(DEV_BSIZE - 1);
size_t blkoff = off & (DEV_BSIZE - 1);
size_t len = MIN(resid, DEV_BSIZE - blkoff);
if (pread64(fdp->fd_fd, blk, DEV_BSIZE, devoff) != DEV_BSIZE)
break; /* errno is set for us, unless EOF */
bcopy(&blk[blkoff], buf, len);
resid -= len;
off += len;
buf = (char *)buf + len;
}
if (resid == nbytes && nbytes != 0)
return (set_errno(EMDB_EOF));
(void) lseek64(fdp->fd_fd, off, SEEK_SET);
return (nbytes - resid);
}
开发者ID:AlainODea,项目名称:illumos-gate,代码行数:42,代码来源:mdb_fdio.c
示例10: defined
void Driver_FILE::get_frame(const int frameid, Frame& frame)
{
#if defined(__MACH__)
pthread_mutex_lock(&spinlock);
#else
pthread_spin_lock(&spinlock);
#endif
if(objmask.find(frameid) != objmask.end()){
// if in hash
#ifdef __MACH__
ret = pread(fd, frame.content, this->framesize_in_byte, 1L*frameid*this->framesize_in_byte);
#else
ret = pread64(fd, frame.content, this->framesize_in_byte, 1L*frameid*this->framesize_in_byte);
#endif
if(ret < 0){
assert(false && "Driver_FILE: fail to read in get()");
}
}else{
assert(false && "Driver_FILE: key not in hash");
}
#if defined(__MACH__)
pthread_mutex_unlock(&spinlock);
#else
pthread_spin_unlock(&spinlock);
#endif
}
开发者ID:zhangce,项目名称:deepdive,代码行数:27,代码来源:driver_file.cpp
示例11: Pread_idle
static ssize_t
Pread_idle(struct ps_prochandle *P, void *buf, size_t n, uintptr_t addr)
{
size_t resid = n;
while (resid > 0) {
map_info_t *mp;
uintptr_t mapoff;
ssize_t len;
off64_t off;
if ((mp = Paddr2mptr(P, addr)) == NULL)
break;
mapoff = addr - mp->map_pmap.pr_vaddr;
len = MIN(resid, mp->map_pmap.pr_size - mapoff);
off = mp->map_offset + mapoff;
if ((len = pread64(P->asfd, buf, len, off)) <= 0)
break;
resid -= len;
addr += len;
buf = (char *)buf + len;
}
return (n - resid);
}
开发者ID:kele,项目名称:illumos-fsd,代码行数:28,代码来源:Pidle.c
示例12: load_and_dump_sb
static int load_and_dump_sb(char *filename, int fd, u64 sb_bytenr, int full,
int force)
{
u8 super_block_data[BTRFS_SUPER_INFO_SIZE];
struct btrfs_super_block *sb;
u64 ret;
sb = (struct btrfs_super_block *)super_block_data;
ret = pread64(fd, super_block_data, BTRFS_SUPER_INFO_SIZE, sb_bytenr);
if (ret != BTRFS_SUPER_INFO_SIZE) {
/* check if the disk if too short for further superblock */
if (ret == 0 && errno == 0)
return 0;
fprintf(stderr,
"ERROR: Failed to read the superblock on %s at %llu\n",
filename, (unsigned long long)sb_bytenr);
fprintf(stderr,
"ERROR: error = '%s', errno = %d\n", strerror(errno), errno);
return 1;
}
printf("superblock: bytenr=%llu, device=%s\n", sb_bytenr, filename);
printf("---------------------------------------------------------\n");
if (btrfs_super_magic(sb) != BTRFS_MAGIC && !force) {
fprintf(stderr,
"ERROR: bad magic on superblock on %s at %llu\n",
filename, (unsigned long long)sb_bytenr);
} else {
dump_superblock(sb, full);
}
return 0;
}
开发者ID:fougner,项目名称:btrfs-progs,代码行数:33,代码来源:btrfs-show-super.c
示例13: read_physical
static int read_physical(struct btrfs_root *root, int fd, u64 offset,
u64 bytenr, u64 len)
{
char *iobuf = malloc(len);
ssize_t done;
size_t total_read = 0;
int ret = 1;
if (!iobuf) {
fprintf(stderr, "No memory\n");
return -1;
}
while (total_read < len) {
done = pread64(fd, iobuf + total_read, len - total_read,
bytenr + total_read);
if (done < 0) {
fprintf(stderr, "Failed to read: %s\n",
strerror(errno));
ret = -1;
goto out;
}
total_read += done;
}
ret = search_iobuf(root, iobuf, total_read, offset);
out:
free(iobuf);
return ret;
}
开发者ID:LTD-Beget,项目名称:btrfs-progs,代码行数:30,代码来源:btrfs-find-root.c
示例14: FSFH_read
bool_t
FSFH_read(FSFileHandle *self, char *dest, int64_t offset, size_t len) {
int64_t check_val;
// Sanity check.
if (offset < 0) {
Err_set_error(Err_new(CB_newf("Can't read from an offset less than 0 (%i64)",
offset)));
return false;
}
// Read.
check_val = pread64(self->fd, dest, len, offset);
if (check_val != (int64_t)len) {
if (check_val == -1) {
Err_set_error(Err_new(CB_newf("Tried to read %u64 bytes, got %i64: %s",
(uint64_t)len, check_val, strerror(errno))));
}
else {
Err_set_error(Err_new(CB_newf("Tried to read %u64 bytes, got %i64",
(uint64_t)len, check_val)));
}
return false;
}
return true;
}
开发者ID:pavansondur,项目名称:lucy,代码行数:27,代码来源:FSFileHandle.c
示例15: read_block
static int read_block(int fd, void *buf, unsigned long block,
unsigned long block_size)
{
char *b;
off64_t offset;
unsigned long remaining;
ssize_t rc;
b = buf;
offset = block * block_size;
remaining = block_size;
while (remaining > 0) {
rc = pread64(fd, b, remaining, offset);
if (rc < 0) {
if (errno == EINTR)
continue;
fprintf(stderr, "write failed: %s\n", strerror(errno));
return -1;
}
b += rc;
offset += rc;
remaining -= rc;
}
return 0;
}
开发者ID:prasad-joshi,项目名称:iob,代码行数:28,代码来源:psync.c
示例16: write_map_set
void write_map_set(long long int block, char val) {
long long int offset = 32 + block/8;
if((mem_write_map!=MAP_FAILED) && (offset > mem_write_map_size) ) {
munmap(mem_write_map, mem_write_map_size);
mem_write_map_size = (block/8/getpagesize()+1)*getpagesize();
ftruncate(fd_write_map, mem_write_map_size);
mem_write_map = mmap(NULL, mem_write_map_size , PROT_READ|PROT_WRITE, MAP_SHARED, fd_write_map, 0);
}
char c;
if(mem_write_map!=MAP_FAILED) {
c = mem_write_map[offset];
} else {
pread64(fd_write_map, &c, 1, offset);
}
char mask = 1 << (block%8);
c &= ~mask;
if(val) {
c |= mask;
}
if(mem_write_map!=MAP_FAILED) {
mem_write_map[offset]=c;
} else {
pwrite64(fd_write_map, &c, 1, offset);
}
}
开发者ID:dellastreet,项目名称:fusecoraw,代码行数:28,代码来源:fusecoraw.c
示例17: root_read
static int
root_read(vnode_t *vp, uio_t *uiop, int ioflag, cred_t *cr, caller_context_t *ct)
{
ASSERT(vp->v_fd != -1);
ASSERT(vp->v_type != VBLK || IS_P2ALIGNED(uiop->uio_loffset, 512));
ASSERT(vp->v_type != VBLK || IS_P2ALIGNED(uiop->uio_iov->iov_len, 512));
int error = 0;
ssize_t iolen = pread64(vp->v_fd, uiop->uio_iov->iov_base, uiop->uio_iov->iov_len, uiop->uio_loffset);
if(iolen == -1) {
error = errno;
perror("pread64");
}
if(iolen != uiop->uio_iov->iov_len)
fprintf(stderr, "root_read(): len: %lli iolen: %lli offset: %lli file: %s\n", (longlong_t) uiop->uio_iov->iov_len, (longlong_t) iolen, (longlong_t) uiop->uio_loffset, vp->v_path);
if(error)
return error;
uiop->uio_resid -= iolen;
return 0;
}
开发者ID:zhihui-slash2,项目名称:slash2-stable,代码行数:25,代码来源:vnode.c
示例18: file_read
extern jlong file_read(JNIEnv *env, jlong fhandle, jlong seek, jlong length, jlong buffer)
{
/* Set fixed values at start and end of buffer: */
prepare_read_buffer(env, buffer, length);
int rc = pread64((int) fhandle, (void*) buffer, (size_t) (int) length, (off64_t) seek);
if (rc == -1)
{
if (errno == 0)
{
PTOD("Errno is zero after a failed read. Setting to 799");
return 799;
}
return errno;
}
else if (rc != length)
{
PTOD1("Invalid byte count. Expecting %lld", length);
PTOD1("but read only %d bytes.", rc);;
return 798;
}
/* Make sure read was REALLY OK: */
return check_read_buffer(env, buffer, length);
}
开发者ID:WoolenWang,项目名称:vdbench,代码行数:27,代码来源:vdblinux.c
示例19: btrfs_read_dev_super
int btrfs_read_dev_super(int fd, struct btrfs_super_block *sb, u64 sb_bytenr)
{
u8 fsid[BTRFS_FSID_SIZE];
struct btrfs_super_block buf;
int i;
int ret;
u64 transid = 0;
u64 bytenr;
if (sb_bytenr != BTRFS_SUPER_INFO_OFFSET) {
ret = pread64(fd, &buf, sizeof(buf), sb_bytenr);
if (ret < sizeof(buf))
return -1;
if (btrfs_super_bytenr(&buf) != sb_bytenr ||
strncmp((char *)(&buf.magic), BTRFS_MAGIC,
sizeof(buf.magic)))
return -1;
memcpy(sb, &buf, sizeof(*sb));
return 0;
}
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
ret = pread64(fd, &buf, sizeof(buf), bytenr);
if (ret < sizeof(buf))
break;
if (btrfs_super_bytenr(&buf) != bytenr ||
strncmp((char *)(&buf.magic), BTRFS_MAGIC,
sizeof(buf.magic)))
continue;
if (i == 0)
memcpy(fsid, buf.fsid, sizeof(fsid));
else if (memcmp(fsid, buf.fsid, sizeof(fsid)))
continue;
if (btrfs_super_generation(&buf) > transid) {
memcpy(sb, &buf, sizeof(*sb));
transid = btrfs_super_generation(&buf);
}
}
return transid > 0 ? 0 : -1;
}
开发者ID:giantdisaster,项目名称:btrfs-progs,代码行数:47,代码来源:disk-io.c
示例20: full_pread64
ssize_t full_pread64(int fd, void *buf, size_t count, int64_t offset)
{
#if CCTOOLS_OPSYS_CYGWIN || CCTOOLS_OPSYS_DARWIN || CCTOOLS_OPSYS_FREEBSD || CCTOOLS_OPSYS_DRAGONFLY
FULL_PIO(pread(fd, buf, count, offset));
#else
FULL_PIO(pread64(fd, buf, count, offset));
#endif
}
开发者ID:Baguage,项目名称:cctools,代码行数:8,代码来源:full_io.c
注:本文中的pread64函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论