/** * this function is a POSIX compliant version, which will read specified data buffer * length for an open file descriptor. * * @param fd the file descriptor. * @param buf the buffer to save the read data. * @param len the maximal length of data buffer * * @return the actual read data buffer length */ int read(int fd, void *buf, size_t len) { int result; struct dfs_fd *d; /* get the fd */ d = fd_get(fd); if (d == RT_NULL) { rt_set_errno(-DFS_STATUS_EBADF); return -1; } result = dfs_file_read(d, buf, len); if (result < 0) { fd_put(d); rt_set_errno(result); return -1; } /* release the ref-count of fd */ fd_put(d); return result; }
static void copyfile(const char *src, const char *dst) { struct dfs_fd src_fd; rt_uint8_t *block_ptr; rt_int32_t read_bytes; block_ptr = rt_malloc(BUF_SZ); if (block_ptr == RT_NULL) { rt_kprintf("out of memory\n"); return; } if (dfs_file_open(&src_fd, src, DFS_O_RDONLY) < 0) { rt_free(block_ptr); rt_kprintf("Read %s failed\n", src); return; } if (dfs_file_open(&fd, dst, DFS_O_WRONLY | DFS_O_CREAT) < 0) { rt_free(block_ptr); dfs_file_close(&src_fd); rt_kprintf("Write %s failed\n", dst); return; } do { read_bytes = dfs_file_read(&src_fd, block_ptr, BUF_SZ); if (read_bytes > 0) { int length; length = dfs_file_write(&fd, block_ptr, read_bytes); if (length != read_bytes) { /* write failed. */ rt_kprintf("Write file data failed, errno=%d\n", length); break; } } } while (read_bytes > 0); dfs_file_close(&src_fd); dfs_file_close(&fd); rt_free(block_ptr); }
void copy(const char* src, const char* dst) { struct dfs_fd src_fd; rt_uint8_t *block_ptr; rt_uint32_t read_bytes; block_ptr = rt_malloc(BUF_SZ); if (block_ptr == RT_NULL) { rt_kprintf("out of memory\n"); return; } if (dfs_file_open(&src_fd, src, DFS_O_RDONLY) < 0) { rt_free(block_ptr); rt_kprintf("Read %s failed\n", src); return; } if (dfs_file_open(&fd, dst, DFS_O_WRONLY | DFS_O_CREAT) < 0) { rt_free(block_ptr); dfs_file_close(&src_fd); rt_kprintf("Write %s failed\n", dst); return; } do { read_bytes = dfs_file_read(&src_fd, block_ptr, BUF_SZ); if (read_bytes > 0) { dfs_file_write(&fd, block_ptr, read_bytes); } } while (read_bytes > 0); dfs_file_close(&src_fd); dfs_file_close(&fd); rt_free(block_ptr); }
static rt_err_t copyfile(const char *src, const char *dst) { struct dfs_fd src_fd, dst_fd; rt_uint8_t *block_ptr; rt_int32_t read_bytes; block_ptr = rt_malloc(BUF_SZ); if (block_ptr == RT_NULL) { return -RT_ENOMEM; } if (dfs_file_open(&src_fd, src, DFS_O_RDONLY) < 0) { rt_free(block_ptr); return -RT_ERROR; } if (dfs_file_open(&dst_fd, dst, DFS_O_WRONLY | DFS_O_CREAT) < 0) { rt_free(block_ptr); dfs_file_close(&src_fd); return -RT_ERROR; } do { read_bytes = dfs_file_read(&src_fd, block_ptr, BUF_SZ); if (read_bytes > 0) { dfs_file_write(&dst_fd, block_ptr, read_bytes); } } while (read_bytes > 0); dfs_file_close(&src_fd); dfs_file_close(&dst_fd); rt_free(block_ptr); return RT_EOK; }
void cat(const char* filename) { rt_uint32_t length; char buffer[81]; if (dfs_file_open(&fd, filename, DFS_O_RDONLY) < 0) { rt_kprintf("Open %s failed\n", filename); return; } do { rt_memset(buffer, 0, sizeof(buffer)); length = dfs_file_read(&fd, buffer, sizeof(buffer)-1 ); if (length > 0) { rt_kprintf("%s", buffer); } }while (length > 0); dfs_file_close(&fd); }