2012-04-29 7 views
0

Под этим я имею в виду функцию. Я использую fileno для преобразования FILE * в fd, и он возвращается без какой-либо ошибки, но когда я использую pread для этого возвращаемого значения из fileno, это дает мне плохую ошибку дескриптора файла. IE:Есть ли способ скопировать содержимое файла FILE * в дескриптор файла?

FILE* fin; 
FILE* fout; 
int fd, result; 
fd = open("path", O_RDWR); 
// Do stuff with fin and fout 
// fout is the file with all of the stuff I want to copy to the fd 
fd = fileno(fout); 
result = pread(fd, buf, size, offset); // Bad file descriptor--returns a 9 

Я не могу понять, что вызывает pread, чтобы дать мне эту ошибку, и это сводит меня с ума.

+0

Не можете ли вы открыть оба конца с помощью 'open'? –

+3

Использует ли 'pread' * return * 9 или возвращает -1 и устанавливает' errno' в 9? Если первое, это означает, что осталось 9 байтов, которые можно прочитать, по некоторым совпадениям. Если он возвращает -1, а 'errno' равно 9 (' EBADF'), то что-то уже 'fclose'd' fout'. – torek

+2

Разве вы не хотите использовать 'fout = fopen (« путь »,« rw »);'? Вывешенный вами код показывает, что «fout» не определен, поэтому было бы удивительно, если бы он сделал что-нибудь полезное. –

ответ

1

Я предполагаю, что fout не является допустимым указателем FILE *. Вы это подтвердили? Вы проверили возвращаемое значение fileno?

+0

fileno возвратил положительное целое число, так что он работает нормально. –

+1

Нет, это не значит, что он работает нормально. Это означает, что вы вызывали неопределенное поведение. –

+0

Когда я читал страницу руководства, я думал, что если он вернет число, отличное от -1, это значит, что все работает нормально? –

Смежные вопросы