}
Файл bbb.c
#include “defs.h”
void bbb ()
{
printf(“I am bbb\n”);
ccc();
}
Файл ccc.c
#include “defs.h”
void ccc ()
{
printf(“I am ccc\n”);
printf(“That is all”);
}
Файлы сборки проектов
Файл mf1
program: main.o aaa.o bbb.o ccc.o
qcc –o program main.o aaa.o bbb.o ccc.o
main.o: main.c defs.h
qcc –c main.c
aaa.o: aaa.c defs.h
qcc –c aaa.c
bbb.o: bbb.c defs.h
qcc –c bbb.c
ccc.o: ccc.c defs.h
qcc –c ccc.c
Файл mf2
program: main.o aaa.o bbb.o ccc.o
qcc –o program main.o aaa.o bbb.o ccc.o
main.o aaa.o bbb.o ccc.o: defs.h
Файлmf3
OBJ=main.o aaa.o bbb.o ccc.o
program: $(OBJ)
qcc –o program $(OBJ)
$(OBJ): defs.h
Файлmf4
OBJ=main.o aaa.o bbb.o ccc.o
program: $(OBJ)
$(СС) –o $@ $(OBJ)
$(OBJ): defs.h
Файлmf5
OBJ=main.o aaa.o bbb.o ccc.o
program: $(OBJ)
$(СС) –o $@ $(OBJ)
$(OBJ): defs.h
clean:
$(RM) program $(OBJ)
Файлmf6
OBJ=main.o aaa.o bbb.o ccc.o
.PHONY=clean
program: $(OBJ)
$(СС) –o $@ $(OBJ)
$(OBJ): defs.h
clean:
$(RM) program $(OBJ)
Задание 2
Если вариант студента четный то следует создать статическую библиотеку, если нечетный то библиотеку разделяемую (библиотеку динамической компоновки), содержащую функции aaa,bbb,ccc из задания 1. В случае создания статической библиотеки следует использовать файл static.mf в случае создания разделяемой(dll – Dynamic Link Library) библиотекииспользовать shared.mf. Компиляцию, компоновку и сборку проекта следует, как и в первом задании проводить при помощи команды make –f имя проектного make-файла.
Окончательную сборку проекта в случае использования статической библиотеки следует проводить при помощи команды:
qcc –o my_static –L ./ main.c –lmy
Опция –L для указания пути к библиотеке ./
-l для указания имени библиотеки (префикс lib и постфикс .а компоновщик добавит самостоятельно)
Окончательную сборку проекта в случае использования разделяемой библиотеки следует проводить при помощи команды:
qcc –o my_static –L ./ main.c -Bdynamic –lmy –Wl, -rpat ./
Опция –B для указания, что библиотека динамической компоновки
-l для указания имени библиотеки (префикс lib и постфикс .so компоновщик добавит самостоятельно)
-rpath для указания путей где искать разделяемые объекты
Файл static.mf
OBJ=aaa.o bbb.o ccc.o
.PHONY=clean
libmy.a : $(OBJ)
ar –q libmy.a $(OBJ)
$(OBJ): defs.h
clean:
$(RM) *.o libmy.a
Файл shared.mf
OBJ=aaa.o bbb.o ccc.o
CFLAGS+=-shared
.PHONY=clean
libmy.so : $(OBJ)
$(CC) –o $@ -shared $(OBJ)
$(OBJ): defs.h
clean:
$(RM) *.o libmy.so
В случае создания библиотеки динамической компоновки следует вместо main.c использовать файл dll.c.
Файл dll.с
#include <dlfcn.h>
#include “defs.h”
int main()
{
void *dll;
void (*myf)();
printf (“I am main”);
dll = dlopen (“libmy.so”, RTLD_NOW);
if (!dll)
{
perror (“dll not found”);
exit (1);
}
myf = dlsym(dll,”aaa”);
(*myf)();
return 0;
}
Задание 3
Нужно обязательно помнить, что любой файл сценария должен заканчиваться переводом строки. Все переменные и знаки операций разделяются пробелами.
Общим для всех сценариев в задании являются следующие строки, первая из которых задает интерпретатор, в котором разработан сценарий, а последующие демонстрируют работу с переменными (Ivanov Ivan следует изменить на фамилию и имя студента выполняющего задание):
#!/bin/ksh
MY_VAR=Ivannov
MY_VAR1=Ivan
MY_VAR2=’Ivanov Ivan’
MY_VAR3=123 #it is string ‘123’
echo ‘Parametrs = ’ ${#}
echo ‘Param0 = ’ $0
echo ‘Param1 = ’ $1
shift 1
echo ‘Param0 = ’ $0
echo Ivannov Ivan
echo $MY_VAR2
echo $MY_VAR $MY_VAR1
echo ‘What is your?’
read A B
A=$MY_VAR
Echo $A
X=100
Y=20
a = ‘expr $x + $y’: echo a=$a
b = ‘expr $x - $y’: echo a=$a
c = ‘expr $x % $y’: echo a=$a
d = ‘expr $x / $y’: echo a=$a
e = ‘expr $x “*” $y’: echo a=$a
Далее следует продемонстрировать умение запускать сценарии и использовать операторы Korn shell при программировании сценариев
S1 запустить интерпретатор указав ему имя сценария в качестве аргумента
sh lab.sh
S2 запустить интерпретатор связав стандартный поток ввода с сценарием
sh<lab.sh
S3 выполнить сценарий командой точка
. lab.sh
S4 установить атрибут исполняемый для сценария
chmod 755 cmd
lab.sh
P1 test
P2 if
P3 case
P4 until
P5 while
P6 for
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.