Чтение строк с помощью системного вызова 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 *
, Таким образом, вы спрашиваете, сколько байт занимает указатель на символ. Предположительно, вы хотите размер буфера. Таким образом, ваша функция нуждается в этом в качестве дополнительного параметра.