//{{{void load_vid_data(struct vid_file *v) void load_vid_data(struct vid_file *v) { if (v->vids != NULL) errx(EX_SOFTWARE, "VID data has already been loaded for file '%s'.", v->file_name); v->vids = (uint32_t *) malloc(v->gqt_header->num_variants*sizeof(uint32_t)); if (!v->vids) err(EX_OSERR, "malloc error"); if (v->type == VID_LOCAL) { if (fseek(v->file.local, sizeof(struct gqt_file_header), SEEK_SET)) err(EX_IOERR, "Error seeking to data in VID file '%s'.", v->file_name); size_t fr = fread(v->vids, sizeof(uint32_t), v->gqt_header->num_variants, v->file.local); check_file_read(v->file_name, v->file.local, v->gqt_header->num_variants, fr); } else { if (knet_seek(v->file.remote, sizeof(struct gqt_file_header), SEEK_SET) == -1) err(EX_IOERR, "Error seeking to data in remote VID file '%s'.", v->file_name); size_t fr = knet_read(v->file.remote, v->vids, v->gqt_header->num_variants*sizeof(uint32_t)); check_remote_file_read(v->file_name, v->gqt_header->num_variants*sizeof(uint32_t), fr); } }
int main(void) { char *buf; knetFile *fp; int type = 4, l; #ifdef _WIN32 knet_win32_init(); #endif buf = calloc(0x100000, 1); if (type == 0) { fp = knet_open("knetfile.c", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 1) { // NCBI FTP, large file fp = knet_open("ftp://ftp.ncbi.nih.gov/1000genomes/ftp/data/NA12878/alignment/NA12878.chrom6.SLX.SRP000032.2009_06.bam", "r"); knet_seek(fp, 2500000000ll, SEEK_SET); l = knet_read(fp, buf, 255); } else if (type == 2) { fp = knet_open("ftp://ftp.sanger.ac.uk/pub4/treefam/tmp/index.shtml", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 3) { fp = knet_open("http://www.sanger.ac.uk/Users/lh3/index.shtml", "r"); knet_seek(fp, 1000, SEEK_SET); } else if (type == 4) { fp = knet_open("http://www.sanger.ac.uk/Users/lh3/ex1.bam", "r"); knet_read(fp, buf, 10000); knet_seek(fp, 20000, SEEK_SET); knet_seek(fp, 10000, SEEK_SET); l = knet_read(fp, buf+10000, 10000000) + 10000; } if (type != 4 && type != 1) { knet_read(fp, buf, 255); buf[255] = 0; printf("%s\n", buf); } else write(fileno(stdout), buf, l); knet_close(fp); free(buf); return 0; }
static off_t net_seek(hFILE *fpv, off_t offset, int whence) { hFILE_net *fp = (hFILE_net *) fpv; return knet_seek(fp->netfp, offset, whence); }