C read binary stdin

前端 未结 8 2203
难免孤独
难免孤独 2020-11-30 04:51

I\'m trying to build an instruction pipeline simulator and I\'m having a lot of trouble getting started. What I need to do is read binary from stdin, and then store it in me

8条回答
  •  执念已碎
    2020-11-30 05:42

    I had to piece the answer together from the various comments from the kind people above, so here is a fully-working sample that works - only for Windows, but you can probably translate the windows-specific stuff to your platform.

    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "windows.h"
    #include 
    #include 
    
    int main()
    {
        char rbuf[4096];
        char *deffile = "c:\\temp\\outvideo.bin";
        size_t r;
        char *outfilename = deffile;
        FILE *newin;
    
        freopen(NULL, "rb", stdin);
        _setmode(_fileno(stdin), _O_BINARY);
    
        FILE *f = fopen(outfilename, "w+b");
        if (f == NULL)
        {
            printf("unable to open %s\n", outfilename);
            exit(1);
        }
    
        for (;; )
        {
            r = fread(rbuf, 1, sizeof(rbuf), stdin);
            if (r > 0)
            {
                size_t w;
                for (size_t nleft = r; nleft > 0; )
                {
                    w = fwrite(rbuf, 1, nleft, f);
                    if (w == 0)
                    {
                        printf("error: unable to write %d bytes to %s\n", nleft, outfilename);
                        exit(1);
                    }
                    nleft -= w;
                    fflush(f);
                }
            }
            else
            {
                Sleep(10); // wait for more input, but not in a tight loop
            }
        }
    
        return 0;
    }
    

提交回复
热议问题