Как уже упоминалось, вы не хотите пропускать файловые дескрипторы.Но - это нормально , чтобы открыть один файл несколько раз.Файловые дескрипторы независимы и не будут мешать друг другу (при условии, что вы просто читаете, а не записываете в файл).
#include <stdio.h>
int main()
{
FILE* f1 = fopen("/tmp/foo.txt", "rb");
FILE* f2 = fopen("/tmp/foo.txt", "rb");
FILE* f3 = fopen("/tmp/foo.txt", "rb");
FILE* f4 = fopen("/tmp/foo.txt", "rb");
char buf1[32] = { 0, };
char buf2[32] = { 0, };
char buf3[32] = { 0, };
char buf4[32] = { 0, };
fread(buf1, 1, sizeof(buf1) - 1, f1);
fread(buf2, 1, sizeof(buf2) - 1, f2);
fread(buf3, 1, sizeof(buf3) - 1, f3);
fread(buf4, 1, sizeof(buf4) - 1, f4);
printf("buf1 = '%s'\n", buf1);
printf("buf2 = '%s'\n", buf2);
printf("buf3 = '%s'\n", buf3);
printf("buf4 = '%s'\n", buf4);
fclose(f1);
fclose(f2);
fclose(f3);
fclose(f4);
return 0;
}
Дает вывод, подобный:
$ ./fopen
buf1 = '0123456789ABCDEFGHIJ0123456789a'
buf2 = '0123456789ABCDEFGHIJ0123456789a'
buf3 = '0123456789ABCDEFGHIJ0123456789a'
buf4 = '0123456789ABCDEFGHIJ0123456789a'