You might want to check the return value from fopen before using it, if the file open failed then fp will be NULL. After the second line c should contain the first byte in the file.
Use feof() to determine if end of file has been reached (if necessary).
c might need to be declared unsigned char instead of char; this might make later code a bit easier.
To assign the 30th bit to b, the 30th bit will be in the 5th byte (but will it be bit 2 or bit 5?).
When you've read the 5th byte, test the relevant bit with bitwise AND and assign 1 or 0 to b depending on the outcome.