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

ほとんどのコマンド ライン シェルは、特別なアクションのためにいくつかの文字を使用します。それらを実際の文字として使用しようとする場合は、バックスラッシュを前に付けてエスケープする必要があります。この場合、シェルはそのファイル名にアクセスするときにコロンをエスケープする必要があります。

C ではこの問題は発生しないため、次のようにファイル名をそのままコードに入れることができます。

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

于 2017-12-08T13:24:19.333 に答える