簡體   English   中英

嘗試將fmemopen文件描述符與stdin關聯時出現錯誤的文件描述符錯誤

[英]Bad file descriptor error when trying to associate fmemopen file descriptor with stdin

我試圖插入最初從stdin讀取的fscanf函數,例如fscanf(stdin,"%ms", &secret) 在我插入的函數中,我試圖使其從使用字符串創建的輸入文件中讀取。 以下是我在做什么:

int fscanf(FILE *stream, const char *format, ...){

   FILE * in ;
   char * buffer = "secretString";
   size_t length = strlen(buffer);

  in = fmemopen(buffer, length, "r");
  if (in== NULL){
  handle_error("fmemopen");}
  // This is the part where I'm trying to feed my file as stdin
  // since original fscanf expects stdin which I'm trying to hack
  int dptr = fileno(in);
  dup2(dptr, 0);
  va_list args;
  va_start(args, format);

  int p = vfscanf(in, format, args);
    va_end(ap);
    fclose(in);
    return p;
}

但是,我收到了Bad file descriptor錯誤。 如果有人可以告訴我我在做什么錯,我將不勝感激。

我不清楚您從哪里想到應該嘗試像這樣替換stdin的文件描述符。 它不能那樣工作,因為fmemopen的全部要點是它后面沒有底層文件(因此也沒有文件描述符)。 它只是內存緩沖區對stdio API的改編。

幸運的是,我認為沒有理由需要或不想重新映射文​​件描述符以執行所需的操作。 如果要攔截fscanf並使用其他FILE*參數重新調用vfscanf ,則不會使用stdin ,因此對其進行的任何更改均無效。

fmemopen(3)寫道:

筆記

沒有與此函數返回的文件流關聯的文件描述符(即,如果在返回的流上調用,fileno(3)將返回錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM