Установка QNX Neutrino RTOS 6,3,2 и QNX Momentics IDE, изучение утилит входящих в комплект QNX Neutrino и командного интерпретатора ksh, страница 2

}

Файл 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