Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
22
Добавлен:
18.09.2019
Размер:
5 Мб
Скачать
☆

16. Напишите программу, которая ожидает ввода с клавиатуры в течение 10 секунд.Если ничего не введено – печатает «Нет ввода», иначе – «Спасибо».

#include <signal.h>

#include <stdio.h>

int timeout=0;

void f(int s)

{timeout=1;

puts("Нет ввода!");

exit(0); }

main ()

{char buf[256];

struct sigaction s1,s2;

sigfillset(&(s1.sa_mask));

s1.sa_handler=f;

sigaction(SIGALRM, &s1, &s2);

printf("Введите строку ");

alarm(10);

gets(buf);

printf("Спасибо!\n");

sigaction(SIGALRM, &s2, NULL); }

17. Используя файловую систему /proc, получите информацию об открытых всеми процессами файлах

#include<dirent.h>

#include<sys/stat.h>

#include<stdio.h>

#include<stdlib.h>

main()

{ DIR *dp, *d2;

struct dirent *elem, *e2;

int pid;

char name[200],fullname[200],realname[300];

struct stat st;

dp=opendir("/proc");

if(dp==NULL)

{ perror("Ошибка чтения /proc");

return 1;

}

while((elem=readdir(dp))!=NULL)

{ pid=atoi(elem->d_name);

if(pid>0)

{ sprintf(name,"/proc/%s",elem->d_name);

if(stat(name,&st)==0)

{ if(S_ISDIR(st.st_mode))

{ strcat(name,"/fd");

d2=opendir(name);

if(d2!=NULL)

{ printf("Файлы, открытые в процессе %d:\n",pid);

while(e2=readdir(d2))

{ printf("\tDeskriptor %s:",e2->d_name);

strcpy(fullname,name);

strcat(fullname,"/");

strcat(fullname,e2->d_name);

readlink(fullname,realname,299);

printf("%s\n",realname);

}

closedir(d2);

}}}}}

closedir(dp);

}

18. Напишите функцию mysleep(n), задерживающую выполнение программы на n секунд.

#include <signal.h>

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/types.h>

int alarm_flag = 0;

void setflag(int s)

{alarm_flag = 1; }

int mysleep(int n)

{int prev_timer;

pid_t pid;

static struct sigaction act;

act.sa_handler=setflag;

sigaction(SIGALRM, &act, NULL);

printf("Программа остановлена на %d секунд\n", n);

prev_timer=alarm(n);

pause();

if (alarm_flag=1) printf("Программа возобновлена!\n");

else mysleep(n);

alarm(prev_timer);

return 0; }

main ()

{mysleep(5);

19. Составьте программу вывода строк файла в инверсном отображении

#include <fcntl.h>

#include <stdio.h>

#include <sys/stat.h>

main()

{char c, name[80];

long fl, i;

int fd; struct stat st;

printf ("Введите имя файла: ");

scanf("%s", name);

if (stat (name, &st)==-1)

{perror (name);

return 1; }

fl=st.st_size;

if ((st.st_mode & S_IRUSR)==0)

{printf("Файл %s не удается прочитать!\n", name); }

fd=open(name, O_RDONLY);

for(i=fl-1; i>=0; i--)

{lseek(fd,i,SEEK_SET);

if (read(fd, &c, 1)<1) break;

putchar(c); }

close (fd); }

20. Создайте аналог команды df

#include <sys/types.h>

#include <sys/statvfs.h>

#include <stdlib.h>

#include <stdio.h>

main(int argc, char **argv)

{ struct statvfs buf;

if(argc != 2)

{ fprintf(stderr, "Применение: fsys имя_фaйлa\n");

exit(1); }

if(statvfs(argv[1], &buf) != 0)

{ fprintf(stderr, "Ошибка вызова statvfs\n");

exit(2); }

printf("%s:

полное число блоков по %d байт \t%d

всего занятых блоков \t\t\t%d

свободных блоков \t\t\t%d\nсвободных индексных дескрипторов \t%d

идентификатор файловой системы \t\t%d\n",

argv[1], buf.f_frsize, buf.f_blocks,

buf.f_blocks-buf.f_bfree, buf.f_bfree,buf.f_ffree,buf.f_fsid);

exit(0);}

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