System c

1,128 views
1,070 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,128
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • \n \n \n \n \n
  • System c

    1. 1. Язык С Управление процессами <stdlib.h> <signal.h>
    2. 2. Функции для работы с ОС <ul> <li>getenv( ) </li> </ul> <ul> <li>system() </li> </ul> <ul> <li>atexit() </li> </ul> <ul> <li>exit() </li> </ul> <ul> <li>_Exit() </li> </ul> <ul> <li>abort() </li> </ul>
    3. 3. Функция getenv() <ul> <li>char * getenv ( const char * name ) </li> </ul> <ul> <li>Пример использования </li> </ul> <ul> <ul> <ul> <li>char *buf=getenv( &quot;PATH&quot; ); </li> </ul> </ul> </ul> <ul> <ul> <ul> <li>printf( &quot;Path: %s&quot; ,buf); </li> </ul> </ul> </ul>
    4. 4. Функция system() <ul> <li>int system ( const char * s ); </li> </ul> <ul> <ul> <li>Возвращаемое значение зависит от реализации </li> </ul> </ul> <ul> <li>Пример использования </li> </ul> <ul> <ul> <ul> <li>system( &quot;notepad2.exe&quot; ); </li> </ul> </ul> </ul> <ul> <ul> <ul> <li>system( &quot;cmd /c dir&quot; ); </li> </ul> </ul> </ul>
    5. 5. Функция atexit() <ul> <li>int atexit ( void (* func )( void )) </li> </ul> <ul> <ul> <li>Функция возвращает 0 в случае успеха </li> </ul> </ul> <ul> <ul> <li>Функция может быть вызвана до 32 раз </li> </ul> </ul> <ul> <li>Пример использования </li> </ul> <ul> <ul> <ul> <li>void test() { printf( &quot;...End...&quot; ); } int _tmain( int argc, _TCHAR* argv[]) { atexit(test); while ( true ) printf( &quot;.&quot; ); return 0; } </li> </ul> </ul> </ul>
    6. 6. Результат использования atexit()
    7. 7. Функции exit(), _Exit() и abort() <ul> <li>void exit ( int status ) </li> </ul> <ul> <ul> <li>Завершение программы с вызовом функций, зарегистрированных с помощью atexit </li> </ul> </ul> <ul> <li>void _Exit ( int status ) </li> </ul> <ul> <ul> <li>Завершение программы без вызова функций, зарегистрированных с помощью atexit </li> </ul> </ul> <ul> <li>void abort ( void ) </li> </ul> <ul> <ul> <li>Прерывание выполнения программы </li> </ul> </ul> <ul> <ul> <li>Генерация сигнала SIGABRT </li> </ul> </ul>
    8. 8. Функции для работы с сигналами <ul> <li>signal() </li> </ul> <ul> <li>raise() </li> </ul>
    9. 9. Функция signal() <ul> <li>void ( * signal ( int sig , void (* handler )(int) ) )(int) </li> </ul> <ul> <ul> <li>Функция устанавливает обработчик сигнала </li> </ul> </ul> <ul> <ul> <li>Функция возвращает </li> </ul> </ul> <ul> <ul> <ul> <li>Указатель на установленный ранее обработчик </li> </ul> </ul> </ul> <ul> <ul> <ul> <li>SIG_IGN или SIG_DEF — если ранее не было обработчика </li> </ul> </ul> </ul> <ul> <ul> <ul> <li>SIG_ERR — если произошла ошибка </li> </ul> </ul> </ul>
    10. 10. Возможные значения сигналов <ul> <li>#define SIGFPE 8 </li> </ul> <ul> <ul> <li>Ошибка при вычислении числа с плавающей запятой </li> </ul> </ul> <ul> <li>#define SIGILL 4 </li> </ul> <ul> <ul> <li>Сигнал ошибки инструкции </li> </ul> </ul> <ul> <li>#define SIGSEGV 11 </li> </ul> <ul> <ul> <li>Сигнал при попытке выполнения ошибочной операции с памятью </li> </ul> </ul> <ul> <li>#define SIGABRT 22 </li> </ul> <ul> <ul> <li>Ненормальное завершение программы </li> </ul> </ul> <ul> <li>#define SIGINT 2 </li> </ul> <ul> <ul> <li>Сигнал прерывания </li> </ul> </ul> <ul> <li>#define SIGTERM 15 </li> </ul> <ul> <ul> <li>Сигнал при прерывании программы посредством kill </li> </ul> </ul> <ul> <li>#define SIGBREAK 21 </li> </ul> <ul> <ul> <li>Сигнал при нажатии клавиш Ctrl+Break </li> </ul> </ul>
    11. 11. Пример использования функций signal и raise <ul> <li>void handfunc( int s) { printf( &quot;nOk. program was terminated!n&quot; ); } typedef void (* sign)( int ); int _tmain( int argc, _TCHAR* argv[]) { sign res=signal(SIGBREAK,handfunc); if (res==SIG_DFL) printf( &quot;There is the first handler&quot; ); int i=0; while (i<1000) { if (i==100) raise(SIGBREAK); i++; } return 0; } </li> </ul>
    12. 12. Результат использования функций raise и signal
    13. 13. Конец Вопросы e-mail: a.bovanenko@gmail.com

    ×