2017-12-08 11 views
1

다음 코드를 C 코드에서 읽으려고합니다.사용자 공간에서 iio 파일을 읽을 수 없습니다.

파일 : 나는 점점 오전 /sys/bus/iio/devices/iio\:device0/in_voltage7_raw

하지만, 파일 포인터는 -1입니다.

cat 명령을 사용하여 파일을 읽을 수 있습니다.

하지만 다음과 같이 내 코드에서 같은 읽기 위해 노력하고 있어요 :

nos_int32 nos_adc_read_port (ADC_PORT_DB *p_port, nos_int32 *data) 
{ 

    char file_name[VALUE_MAX]; 
    int value; 
    char buffer[BUFFER_LENGTH]; 
    char intBuffer[INT_BUFFER_LENGTH]; 
    int fd; 

    sprintf(file_name, "/sys/bus/iio/devices/iio\\:device0/in_voltage7_raw"); 

    fd = open(file_name, O_RDONLY); 

    if (fd == -1) { 
     return(-1); 
    } 
    if (read(fd, buffer, BUFFER_LENGTH) == -1) { 
     return(-1); 
    } 
    close(fd); 
    memcpy(intBuffer, buffer, BUFFER_LENGTH); 
    intBuffer[INT_BUFFER_LENGTH-1] = '\0'; 
    value = atoi(intBuffer); 
    *data = value; 
    return(0); 
} 

선 후 : FD의 fd = open(file_name, O_RDONLY);

값은 -1입니다. 어떻게 해결 될 수 있습니까?

+1

이'sudo'하여 사용자 공간 코드를 실행 해보십시오 : 당신은 같은 진정으로 그것을 같이 코드에서 파일 이름을 넣을 수 있도록

는 C에서이 문제가 없습니다. – Gaurav

+2

백 슬래시가 실제로 파일 이름에 있습니까? 아니면 쉘에서 콜론을 이스케이프 처리합니까? –

+0

동일한 코드를 사용하여/sys/class/gpio/gpio70을 읽을 수 있습니다. –

답변

2

대부분의 명령 줄 셸은 특수 문자로 사용되며 실제 문자로 사용하려는 경우 백 슬래시를 사용하여 이스케이프 처리해야합니다. 이 경우 쉘은 파일 이름에 액세스 할 때 콜론을 이스케이프 처리해야합니다.

"/sys/bus/iio/devices/iio:device0/in_voltage7_raw"

+0

백 슬래시가 포함되어 파일 이름에 백 슬래시를 이스케이프합니다. 실제 파일 이름은/sys/bus/iio/devices/iio \ : device0/in_voltage7_raw입니다. –