Не в состоянии прочитать файл 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"