Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Как заставить tcopy в 32-разрядной системе копировать с ленты на диск файл более 2Gb? (http://forum.oszone.net/showthread.php?t=164700)

Im27th 26-01-2010 11:15 1330149

Как заставить tcopy в 32-разрядной системе копировать с ленты на диск файл более 2Gb?
 
В общем, поскольку не программирую уже больше 10 лет, трудно понять что именно надобно сотворить.
В исходнике tcopy
http://src.opensolaris.org/source/xr.../tcopy/tcopy.c
нет тех функций, к примеру D_FILE_OFFSET_BITS, которые требуют отредактировать в этих документах
http://www.gnu.org/software/coreutil...ined-data-type
http://www.sun.com/software/whitepap...largefiles.pdf

И вообще не смотря на то, что проблема типа стара, я не нашёл ни в одном форуме или блоге, чтобы хоть кто-то описывал, что решил эту проблему. Я думаю за эти годы уже саму tcopy можно было переделать 300 раз.

В общем-то хочется понять что же требуется?
- либо отредактировать функции как для 64-разрядной системы, но ссылки оставить на 32-разрядные библиотеки;
- либо наоборот отредактировать оставить функции, но ссылки сделать на 64-разрядные библиотеки и установить эти бибилиотеки;
Потому что если редактировать всё, то не проще ли взять и скопировать tcopy из 64-разрядной системы?

Заранее благодарен!
Пните в нужном направлении, а то ваще туплю.

ruslandh 31-01-2010 18:04 1335172

Как я понимаю, проблема в sys/types.h или его аналога
Цитата:

Цитата http://www.sun.com/software/whitepapers/wp-largefiles/largefiles.pdf
Setting _FILE_OFFSET_BITS to 64 before including any system headers
enables 64-bit interfaces.

Not defining this macro or setting it as to 32 will result in the regular
compilation environment as discussed above.

IMHO проблема в 32-х разрядной системе неразрешима.

Im27th 15-02-2010 15:22 1347631

Да, всё получилось!

В исходнике поменял в двух местах open() на open64() и откомпилировал:
gcc -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 tcopy2.c -o tcopy2

И на CentOS 5.2. и на Solaris 8 всё откомпилировалось без ошибок.

Но долго не удавалось проверить - не было доступа к ленточным устройствам.

Сегодня получил доступ на Solaris 8 и удалось скопировать с ленты на диск 10-гигабайтный файл.
Правда он всё равно что-то в конце гадостливое сказал на прощание:

file 1: records 223462 to 223463: size 512
file 1: records 223464 to 223523: size 64512
file 1: record 223524: size 52992
file 1: record 223525: size 4
file 1: record 223526: size 512
file 1: records 223527 to 223529: size 64512
file 1: record 223530: size 49824
file 1: record 223531: size 4
file 1: records 223532 to 223635: size 512
file 1: eof after 223635 records: 10195176924 bytes
Write EOF: Inappropriate ioctl for device


Время: 05:12.

Время: 05:12.
© OSzone.net 2001-