1

我正在尝试从 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。如何解决?

4

1 回答 1

3

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

在 C 中,您没有此问题,因此您可以将文件名原样放入代码中,例如:

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

于 2017-12-08T13:24:19.333 回答