Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
01.05.2014
Размер:
247.81 Кб
Скачать

Дисциплина Операционные Системы

Кафедра МОЭВМ

Отчет по лабораторной работе №2

«Написание команды на языке Си, компиляция её в GCC с помощью Make»

Выполнила : Чярина Т.В.

Группа : № 5341

Проверил : Алексеев А.Н.

Санкт-Петербург, 2008г

Постановка задачи:

  • написать программу на Си с параметрами:

program входной файл выходной файл

  • если входной файл или выходной файл не заданы то используется стандартный ввод и вывод (stdin, stdout)

  • программа считывает входной файл

  • в выходной файл пишет копию входного файла, но в началах строк ставит "+" если в строке найдено слово палиндром ,в противном случае "-"

  • написать скрипт тестирующую эту прогу.

  • Использовать makefile для компиляции и сборки программы.

Применение утилиты Make

Создадим MakeFile в котором будет описан сценарий компиляции. Это позволит упростить процедуру компиляции.

prog: prog.o abba.o

gcc -o prog prog.o abba.o

prog.o: abba.h

abba.o: abba.c abba.h

Тестирование программы

#!/bin/bash

echo "Скрипт тестирования программы"

echo "Введите имя входного файла:"

read p1

if [ -e $p1 ]

then

echo "Введите имя выходнго файла:"

read p2

./prog $p1 $p2

else

echo "Входной файл не существует!"

fi

Реализация программы

Программа реализована в трех файлах:

  • Prog.c – запуск программы

  • Abba.c – функции программы

  • Abba.h – модуль

Prog.c:

#include "abba.h"

int main(int argc, char *argv[])

{

char *inp=0;

char *out=0;

if(argc>1){

inp=argv[1];

if(argc>2) out=argv[2];

}

testfile(inp,out);

return 0;

};

Abba.h:

#include <stdio.h>

#include <string.h>

int isabba(char*);

int testfile(char*,char*);

int testline(char*);

Abba.c:

#include "abba.h"

int isabba(char* s)

{

int beg = 0; // начало слова

int end = strlen(s) - 1; // конец слова

while (beg < end)

if (s[beg++] != s[end--])

return 0; // не палиндром

return 1; // палиндром

}

int testline(char* line)

{

char str[512]="";

strcpy(str,line);

char* del = " ,.?!:-;+*=/<>(){}[]\n\t";// разделители слов

char* word = strtok(str, del); // выделяем первое слово в строке

// цикл обработки слов в строке

while(word)

{

if(isabba(word)) // если слово - палиндром

{

return 1;

}

word = strtok(NULL, del); // выделяем следующее слово в строке

}

return 0;

};

int testfile(char* inp,char* outp)

{

FILE *in,*out;

if(inp)

{

in = fopen(inp,"r");

if(in==0)

{

printf("Ошибка не могу открыть файл %s\n",inp);

return 1;

}

}

else

in=stdin;

if(outp)

{

out = fopen(outp,"w");

if(out==0)

{

printf("Ошибка - не могу создать-открыть файл %s\n",outp);

return 2;

}

}

else

out=stdout;

char line[512];

char ch;

while(fgets(line,sizeof(line),in)!=0)

{

if(testline(line)!=0) ch='+';

else ch='-';

fputc(ch,out);

fputs(line,out);

}

if(in) fclose(in);

if(out) fclose(out);

return 0;

};

Соседние файлы в папке Лабораторная работа2