C, Unix, OPEN(),CLOSE(),READ(), WRITE(): Копирование файлов

Начался новый предмет, новые лабы.

Задачка примерно такая: Есть *nix-операционная система. В ней написать приложение на C, которое умеет копировать файлы при помощи системных вызовов Open(), Close(), Read(), Write();

В моем случае в качестве операционной системы использую Ubuntu 12.04

Такой вариант реализации: (пути до файлов вводятся стандартными средствами языка си):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <fcntl.h>
 
#define BUFFER_SIZE 8096
 
int main ()
{
  char filename [1000],
       destname [1000],
       buffer[BUFFER_SIZE];
  int fd_in = 0,
      fd_out = 0;
  ssize_t ret_in,
          ret_out;
  printf("Enter patch to first file:");
  gets(filename);
  printf("Enter patch to save copy of first file:");
  gets(destname);
  fd_in = open(filename, O_RDONLY);
  if (fd_in == -1)
    printf("error with open source file");
  fd_out = open(destname,O_WRONLY | O_CREAT, 0644);
  if (fd_out == -1)
    printf("error with open dest. file");
  while ((ret_in = read(fd_in, &buffer, BUFFER_SIZE)) > 0)
  {
    ret_out = write(fd_out,  &buffer, (ssize_t) ret_in);
    if (ret_out != ret_in)
      printf("Error with write to dest.");
  }
  close(fd_in);
  close(fd_out);
  return 0;
}
#include <stdio.h>
#include <fcntl.h>

#define BUFFER_SIZE 8096

int main ()
{
  char filename [1000],
       destname [1000],
       buffer[BUFFER_SIZE];
  int fd_in = 0,
      fd_out = 0;
  ssize_t ret_in,
          ret_out;
  printf("Enter patch to first file:");
  gets(filename);
  printf("Enter patch to save copy of first file:");
  gets(destname);
  fd_in = open(filename, O_RDONLY);
  if (fd_in == -1)
    printf("error with open source file");
  fd_out = open(destname,O_WRONLY | O_CREAT, 0644);
  if (fd_out == -1)
    printf("error with open dest. file");
  while ((ret_in = read(fd_in, &buffer, BUFFER_SIZE)) > 0)
  {
    ret_out = write(fd_out,  &buffer, (ssize_t) ret_in);
    if (ret_out != ret_in)
      printf("Error with write to dest.");
  }
  close(fd_in);
  close(fd_out);
  return 0;
}

Исходный код в виде файла можно скачать здесь

Добавить комментарий