无法从用户空间读取iio文件

时间:2017-12-08 11:46:46

标签: c 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 个答案:

答案 0 :(得分:3)

大多数命令行shell使用某些字符进行特殊操作,如果您尝试将它们用作实际字符,则需要在其前面加上反斜杠以对其进行转义。在这种情况下,您的shell需要您在访问该文件名时转义冒号。

在C中,您没有遇到此问题,因此您可以将代码放入代码中,例如:

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