Не в состоянии прочитать файл IIO из пространства пользователя

Я пытаюсь прочитать следующий файл из кода C.

файл: /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 = open(file_name, O_RDONLY);

значение fd равно -1. Как это можно решить?

1 ответ

Большинство оболочек командной строки используют некоторые символы для специальных действий, и если вы пытаетесь использовать их в качестве их действительного символа, вам нужно поставить перед ними обратную косую черту, чтобы избежать их. В этом случае вашей оболочке нужно, чтобы вы закрывали двоеточие при доступе к этому имени файла.

В C у вас нет этой проблемы, поэтому вы можете вставить в свой код имя файла, как оно есть на самом деле, например:

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

Другие вопросы по тегам