Пример 1. Запись в файл и чтение из файла. Обратите внимание на обработку параметров командной строки.
/*--------------------------------------------------*/
/* Программа воспринимает в качестве параметра */
/* командной строки имя рабочего файла. Если файл */
/* не существует, он будет создан, если существует, */
/* его содержимое будет потеряно. */
/*--------------------------------------------------*/
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
int fd;
int f1()
{ static int j = 1;
if (j > 10) return 0;
write(fd, &j, sizeof(int));
printf("write %d -- %d\n", fd, j++);
return 1;
}
void f2()
{ int i;
lseek(fd,-sizeof(int), 1);
read(fd, &i, sizeof(int));
printf("read %d -- %d\n", fd, i);
}
void main(int argc, char *argv[])
/* argc – количество параметров командной строки. */
/* *argv[] – указатели на строки параметров */
{ if (argc < 2) puts("Format: rw filename");
else
{ fd = open(argv[1], O_CREAT | O_RDWR);
while(f1()) f2();
close(fd);
}
exit(0);
}
Пример 2. Дублирование дескриптора файла.
/*---------------------------------------------*/
/* Перенаправление стандартного вывода в файл. */
/*---------------------------------------------*/
#include <io.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
void main(void)
{ int outf, std_out;
char *str1 = "Вывод строки в файл ",
*str2 = "Вывод строки на экран";
std_out = dup(1);
/* закрытие стандартного вывода */
close(1);
outf = open("1.dat", O_WRONLY);
puts(str1);
write(std_out,str2,strlen(str2));
/* восстановление предыдущих значений */
close(outf);
outf = open("dev\tty", O_WRONLY);
close(std_out);
exit(0);
}
ВЫПОЛНЕНИЕ ЛАБОРАТОРНОЙ РАБОТЫ
Выполнение работы заключается в написании и отладке программы по одному из вариантов задания (п.5). Ввод текста программы и его редактирование производится с помощью любого редактора UNIX (vi, ed и др.). Компиляция программы осуществляется с помощью следующего вызова:
$ cc имя_файла.с
На выходе получается исполняемый файл "a.out" или список сообщений об ошибках. Расширение указывать обязательно. Если запустить компилятор с опицией -o, можно указать произвольное имя исполняемого файла:
$ cc -o имя_исполняемого_файла имя_файла.c
Для сдачи лабораторной работы требуется работающая программа, распечатка программы с комментариями и аннотацией (фамилия, номер группы, номер варианта и задание), а также знание теоретического материала.