мне нужно реализовать функцию 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;
}
«Это не работает хорошо» не очень хорошее описание проблемы. –
Да, укажите пример ввода, для которого ваша программа не работает, опишите, что такое ожидаемое поведение (что вы сделали) и каково фактическое поведение. – kaylum