Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГЗ.docx
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
277.44 Кб
Скачать

Краткое содержание программы

Программа при выборе флага –а выводит на экран имя домашней директории, при выборе флага –b выводит на экран имя терминала. После чего сохраняет информацию в файл, под названием указанным пользователем

Программа может выполняться двумя разными способами: через функцию библиотеки, и через системные вызовы.

Код программы

#include<unistd.h>

#include<stdio.h>

#include<stdlib.h>

#include<fcntl.h>

#include<sys/types.h>

#include<sys/stat.h>

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

{

int t;

int c;

int aflag=0;

int bflag=0;

int errflag=0;

int flag='?';

char*ofile=NULL;

opterr=0;

if (argc!=4)

{ printf("Использование:%s:[-a|-b][-o файл вывода]\n",argv[0]);

return 1;

}

while((c=getopt(argc,argv,":abo:"))!=-1)

{

switch(c)

{

case 'a':aflag++;

flag=c;

if(bflag)

{

printf("Опции a и b несовместимы\n");

errflag++;

}

break;

case 'b':bflag++;

flag=c;

if(aflag)

{

printf("Опции a и b несовместимы\n");

errflag++;

}

break;

case 'o':ofile=optarg;

break;

case':':printf("Отсутствует аргумент опции -%c\n",optopt);

errflag++;

break;

}

}

if(errflag)

{(void)printf("Использование:%s:[-a|-b][-o файл выхода]\n",argv[0]);

return(1);

}

printf("Заданный флаг:%c\n",flag);

printf("Аргумент опции o: %s\n",ofile);

printf("Остаток командной строки: ");

char pr;

printf("Каким способом Вы хотите выполнить лабу?");

printf("Вы хотите воспользоваться функцией библиотеки [m] /Вы хотите воспользоваться системными вызовами [g] \n");

scanf("%c", &pr);

if (pr=='m')

{

for (;optind<argc;optind++)

{

printf("%s",argv[optind]);

}

printf("\n");

{

int outfile;

char buf[100];

switch(flag)

{

case 'a':

printf("\n");

system("echo 'Imya directorii v kotoroy okazivaetsya koristuva4 posle zapuska v sistemu: ';cd; pwd");

sprintf (buf,"pwd > %s",argv[optind-1]);

system(buf);

break;

case 'b':

system("echo 'Imya terminala: '; tty");

sprintf(buf,"tty > %s",argv[optind-1]);

system(buf);

break;

}

}

}

else

{

for (;optind<argc;optind++)

{

printf("%s",argv[optind]);

}

printf("\n");

char * var;

char buf[100];

switch(flag)

{

case 'a':

var=getenv ("HOME");

printf("Адресс домашней директории:%s\n",var);

sprintf(buf,"Адресс домашней директории:%s\n",var);

break;

case 'b':

var=getenv ("TERM");

printf("Имя терминала:%s\n",var);

sprintf(buf,"Имя терминала:%s\n",var);

break;

}

char t;

int outfile;

outfile=open(argv[optind-1],O_RDWR,0644);

if (outfile!=-1)

{

printf("\nФайл уже существует! \n Добавить текущую информацию в конец файла(если да нажмите [c]? \n Перезаписать? [r]");

scanf("%c",&t);

scanf("%c",&t);

if (t=='y')

lseek(outfile,0,SEEK_END);

}

else if (outfile==-1)

outfile=open(argv[optind-1],O_RDWR|O_CREAT,0644);

write(outfile,buf,100);

{

printf("\n");

close(outfile);

}

}

return (0);

}

Скриншоты

Выводы

Приобрел навыки работы с командной строкой, с файлами и с переменными среды окружения Linux.

В частности научился использовать uname, sysinfo и функции getenv и system.

Функция system передает заданную строку string к интерпретатору команд и обрабатывает эту строку как команду Linux.

17

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]