Qual é a diferença entre este lseek, fseek, ler, temer?

Estou chamando estas funções:

unsigned blah[5];
lseek(0, 100, SEEK_CUR);
read(0, blah, sizeof(blah));

FILE *fr;
fr = fopen(arg[1], "r");
unsigned blah[5];
fseek(fr, 100, SEEK_CUR);
fread(blah, 1, sizeof(blah), fr);

E eu executo o primeiro código ao executar este comando:

cat TEXTFILE | ./a.out

Executo o segundo código, executando este comando:

./a.out TEXTFILE

No entanto, estou obtendo resultados diferentes. Enquanto o primeiro buscou corretamente, então ele lê o texto correto, o segundo não. Quero usar o segundo formato, então o que fiz de errado?

questionAnswers(6)

yourAnswerToTheQuestion