1. Czytaj bajt po bajcie z pliku i sprawdzaj czy nie jest większy od 127. Jeśli jest, plik nie jest plikiem tekstowym. To metoda niedokładna ale może wystarczająca.
2. Możesz użyć biblioteki libmagic która służy do identyfikacji rodzaju pliku bez względu na jego rozszerzenie. Jest dostępna jako program o nazwie file w dowolnej dystrybucji GNU/Linux (i nie tylko). Tu masz przykład: https://gist.github.com/vivithemage/9489378
A tak wygląda identyfikacja "ręczna":
file --mime-type /etc/ethers /bin/ls
/etc/ethers: text/plain
/bin/ls: application/x-sharedlib