Чтение строк с помощью системного вызова read() в C

Мне нужно реализовать функцию C

ssize_t readString(int filedes, char* buf, ssize_t max);

который читает строку из файла, связанного с дескриптором файла 'filedes', в буфер 'buf' и возвращает количество прочитанных байтов. Переменная 'max' не обязательна.

Другими словами, я хочу использовать

readString(fileDescriptor, buf);

так же, как я бы использовал

fscanf(inputFile, "%s", buf);

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

Спасибо

ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;
    ssize_t rbytes = 0; /* bytes read */
    size_t cbyte = sizeof(char);

    /* check if file is empty */
    if (read(filedes, temp, cbyte) < 1)
        return 0;

    /* eat spaces */
    while ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
        if (read(filedes, temp, cbyte) < 1)
            return 0;

    /* read string */
    for (i=0; i<n-1; i++){
        buf[i] = *temp;
        rbytes++;

        /* check if file is over */
        if (read(filedes, temp, cbyte) < 1)
            return rbytes;
        /* check if string is over */
        if ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
            break;
    }

    buf[++i] = '\0';
    return rbytes;
}

1 ответ

ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;

Я думаю, что вы неправильно поняли, что sizeof делает. Он вычисляет размер вещи, которую вы просите, чтобы определить размер. В этом случае это buf, который является char *, Таким образом, вы спрашиваете, сколько байт занимает указатель на символ. Предположительно, вы хотите размер буфера. Таким образом, ваша функция нуждается в этом в качестве дополнительного параметра.

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