Komut satırı argümanlarına bağlı olarak, bir dosya tanıtıcısını belirtilen bir dosyaya veya stdin'e (borulama amacıyla) işaret edecek şekilde ayarlıyorum. Ardından bu işaretçiyi dosyadan okumak için bir dizi farklı işleve geçiriyorum. stdin işaret zamanlardaFceek'i stdin'e işaret eden bir dosya tanıtıcısıyla kullanma
FILE *getFile(int argc, char *argv[]) {
FILE *myFile = NULL;
if (argc == 2) {
myFile = fopen(argv[1], "r");
if (myFile == NULL)
fprintf(stderr, "File \"%s\" not found\n", argv[1]);
}
else
myFile = stdin;
return myFile;
}
, fseek
çalışmak görünmüyor: Burada dosya işaretçisi almak için fonksiyonudur. Bununla, onu kullanıyorum ve fgetc
kullanıyorum ve beklenmedik sonuçlar alıyorum. Bu beklenen davranış mı, eğer öyleyse, akıştaki farklı konumlara nasıl geçebilirim? Örneğin
:
int main(int argc, char *argv[]) {
FILE *myFile = getFile(argc, argv); // assume pointer is set to stdin
int x = fgetc(myFile); // expected result
int y = fgetc(myFile); // expected result
int z = fgetc(myFile); // expected result
int foo = bar(myFile); // unexpected result
return 0;
}
int bar(FILE *myFile) {
fseek(myFile, 4, 0);
return fgetc(myFile);
}
Örnek kodunuz benim için iyi görünüyor. (Dosya mevcut olmadığı zaman, ancak bu sizin sorununuz ile ilgili değilse) –
bana uygun görünüyor. hangi derleyici? yazdırmayı deneyebilirsiniz, bar() işlevinin her ikisi de işaretçileri (stdin ve myFile) aynı olduklarını kontrol etmek için. – leonbloy
@leonbloy: Sorunun aslında fseek() ile olduğunu keşfettim. Görünüşe göre işaretçi stdin'e işaret ettiğinde işe yaramıyor mu? Bu konuda bir fikrin var mı? (Soru şu anda) –