[СИ] Ввод-вывод. fgetc, getc, fileno.
Язык СИ
ОС UNIX
Вопрос-1.
В каких случаях следует или не следует применять getc вместо fgetc?
Например, СИ-функция общего назначения, т. е. заранее неизвестно где она
будет применяться - возможно в много-потоковой, или иной программе
с особенностями.
Предполагается чтение файла библиотечными getc (или fgetc), fread, rewind.
Быстродействие желательно. В чем опасность getc, что она выделена отдельно?
Вопрос-2.
Есть СИ-функция, в которую передается fd, и которая читает файл read(fd).
А нужна такая же, но чтоб фигурировал аргумент fp, а не fd.
Переделать ее на бибиотечную fread() трудно, и будет двойное
буферирование.
Для нее я сделал обертку, т. к. файл открывается функцией fopen().
Ниже приведена схема.
int fun(int fd)
{
int k;
k=read(fd);
if(k<0) return(-1);
// обработка файла
return(0);
}
int obertka_fun(FILE *fp)
{
int fd, k;
fd=fileno(fp);
k=fun(fd);
return(k);
}
int main()
{
FILE *fp=NULL;
int k;
// этот цикл символизирует бесконечность процесса
while(1){
// получить имя файла
fp=fopen(fname, "r");
if(fp==NULL) continue;
k=obertka_fun(fp);
fclose(fp);
}
exit(0);
}
В чем тут опасность? Осталось ли что-нибудь незакрыто?
Кто знает прошу ответить.