I have an embedded board (beagleboard-xm) that runs ubuntu 12.04. I need to read a GPIO continuously to see if the value of the port changes. My code is herebelow:

```
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

FILE *fp;

int main(void)
{
    //linux equivalent code "echo 139 > export" to export the port
    if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL){
            printf("Cannot open export file.\n");
            exit(1);
        }
        fprintf( fp, "%d", 139 );
        fclose(fp);
      //  linux equivalent code "echo low > direction" to set the port as an input 
        if ((fp = fopen("/sys/class/gpio/gpio139/direction", "rb+")) == NULL){
            printf("Cannot open direction file.\n");
            exit(1);
        }
        fprintf(fp, "low");
        fclose(fp);

       // **here comes where I have the problem, reading the value**
        int value2;
        while(1){
        value2= system("cat /sys/class/gpio/gpio139/value");
        printf("value is: %d\n", value2);
        }
    return 0;
}

```

the code above reads the port continuously (`0` by default), however, when I change the port as `1`, `system` call output the correct value, however `printf` still prints `0` as an output. What is the problem with `value2` that does not store the value that `system()` outputs.

If I use the code below instead of `while` loop above, I get an error about opening the `value` file (Cannot open value file.), if I put the `fopen` line outside of `while` loop, it does not show the changes in the `value` file.

```
char buffer[10];
while(1){
    if ((fp = fopen("/sys/class/gpio/gpio139/value", "rb")) == NULL){
            printf("Cannot open value file.\n");
            exit(1);
        }
    fread(buffer, sizeof(char), sizeof(buffer)-1, fp);
    int value = atoi(buffer);
    printf("value: %d\n", value);

    }

```

My question: how do I need to fix the code? or how should I read the `value` file?
As an additional info that I wonder: what is the difference to e.g. export the port by `system("echo 139 > /sys/class/gpio/export")` and `fp = fopen("/sys/class/gpio/export","w"); fprintf(fp,"%d",139);` which method do you suggest me to use? Why?

Thank you in advance.