Ftell (stdin) يسبب خطأ في السعي غير قانوني
سؤال
الرمز التالي يخرج "البحث غير القانوني":
#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()
ثم سيفعل ما تتوقعه.
لا تنتمي إلى StackOverflow