سؤال

الرمز التالي يخرج "البحث غير القانوني":

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    errno = 0;
    getchar();
    getchar();
    getchar();
    ftell( stdin );
    printf( "%s\n", strerror(errno) );
}

يحدث هذا عندما أقوم بتشغيل "Cat Script | ./a.out" وكذلك عندما أقوم فقط بالركض "./A.out". المشكلة مع FTELL ، بالطبع. سؤالي هو: لماذا يحدث هذا؟ أعتقد أن stdin يمكن أن يكون قابلاً للبحث. FSEEK أيضا يسبب نفس الخطأ. إذا كان Stdin غير قابل للبحث ، فهل هناك طريقة يمكنني فعل نفس الشيء؟

أشكركم على الردود الخاصة بك.

هل كانت مفيدة؟

المحلول

FIFOS لا يمكن البحث عنها. هم ببساطة عازلة. بمجرد أن تكون البيانات read() من المخزن المؤقت FIFO ، لا يمكن استرداده أبدًا.

لاحظ أنه إذا قمت بتشغيل برنامجك:

./a.out < script

ثم سيكون المدخلات القياسية أ ملف وليس فيفو, ، لذا ftell() ثم سيفعل ما تتوقعه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top