Скачиваний:
18
Добавлен:
08.01.2014
Размер:
1.84 Кб
Скачать
uses linux;

var
  i, input, output, filesize:longint;
  source, target:pchar;
  args:tmmapargs;
const  
  endchar:char=#0;
type 
  oearray=array [0..0] of char;
  poearray=^oearray;
begin
  (* рТПЧЕТЛБ ЮЙУМБ ЧИПДОЩИ РБТБНЕФТПЧ *)
  if paramcount <> 2 then
  begin
    writeln(stderr, 'уЙОФБЛУЙУ: copyfile ЙУФПЮОЙЛ ГЕМШ');
    halt (1);
  end;

  (* пФЛТЩФШ ЧИПДОПК Й ЧЩИПДОПК ЖБКМЩ *)
  input := fdopen (paramstr(1), Open_RDONLY);
  if input = -1 then
  begin
    writeln(stderr, 'пЫЙВЛБ РТЙ ПФЛТЩФЙЙ ЖБКМБ ', paramstr(1));
    halt (1);
  end;

  output := fdopen (paramstr(2), Open_RDWR or Open_CREAT or Open_TRUNC, octal(0666));
  if output = -1 then
  begin
    fdclose (input);
    writeln(stderr, 'пЫЙВЛБ РТЙ ПФЛТЩФЙЙ ЖБКМБ ', paramstr(2));
    halt (2);
  end;

  (* уПЪДБФШ ЧФПТПК ЖБКМ У ФЕН ЦЕ ТБЪНЕТПН, ЮФП Й РЕТЧЩК. *)
  filesize := fdseek (input, 0, SEEK_END);
  fdseek (output, filesize - 1, SEEK_SET);
  fdwrite (output, endchar, 1);

  (* пФПВТБЪЙФШ Ч РБНСФШ ЧИПДОПК Й ЧЩИПДОПК ЖБКМЩ. *)
  args.fd:=input;
  args.flags:=MAP_SHARED;
  args.prot:=PROT_READ;
  args.size:=filesize;
  args.address:=0;
  args.offset:=0;
  source:=pchar(mmap(args));
  if longint(source) = -1 then
  begin
    writeln(stderr, 'пЫЙВЛБ ПФПВТБЦЕОЙС ЖБКМБ 1 Ч РБНСФШ');
    halt (1);
  end;

  args.fd:=output;
  args.flags:=MAP_SHARED;
  args.prot:=PROT_WRITE;
  args.size:=filesize;
  args.address:=0;
  args.offset:=0;
  target:=pchar(mmap(args));
  if longint(target) = -1 then
  begin
    writeln(stderr, 'пЫЙВЛБ ПФПВТБЦЕОЙС ЖБКМБ 2 Ч РБНСФШ');
    halt (1);
  end;

  (* лПРЙТПЧБОЙЕ *)
  for i:=0 to filesize-1 do
    poearray(target)^[i] := poearray(source)^[i];

  (* пФНЕОЙФШ ПФПВТБЦЕОЙЕ ПВПЙИ ЖБКМПЧ *)
  munmap (source, filesize);
  munmap (target, filesize);
  (* ъБЛТЩФШ ПВБ ЖБКМБ *)
  fdclose (input);
  fdclose (output);
  halt (0);
end.
Соседние файлы в папке 12