Téléphone : 01 64 42 60 45
A+| A-| A
02 0

Publié par  dans 

시스템 호출은 Linux 커널에서 구현됩니다. 프로그램이 시스템 호출을 하면 인수가 패키징되어 커널로 전달되며, 이 인수는 호출이 완료될 때까지 프로그램 실행을 대신합니다. 시스템 호출은 일반적인 함수 호출이 아니며 커널로 제어를 전송하려면 특별한 절차가 필요합니다. 그러나 GNU C 라이브러리(GNU/Linux 시스템과 함께 제공되는 표준 C 라이브러리의 구현)는 Linux 시스템 호출을 함수로 래핑하여 쉽게 호출할 수 있습니다. 열기 및 읽기와 같은 낮은 수준의 I/O 함수는 Linux의 시스템 호출의 예입니다. 다음은 setitimer()를 사용하여 DoStuff()를 주기적으로 호출하는 예제입니다. 라이브러리 함수는 프로그램 외부의 라이브러리에 있는 일반 함수입니다. 지금까지 제시한 대부분의 라이브러리 함수는 표준 C 라이브러리인 libc에 있습니다. 예를 들어 getopt_long 및 mkstemp는 C 라이브러리에 제공되는 함수입니다. 프로그램에서 시스템 호출 및 신호를 시청하려면 추적을 호출한 다음 프로그램 및 명령줄 인수를 호출하면 됩니다. 예를 들어 hostname 1 명령에 의해 호출되는 시스템 호출을 보려면 이 명령을 사용합니다. setitimer() 함수는 값으로 가리키는 구조에 지정된 값으로 지정된 타이머를 설정하고 ovalue가 null 포인터가 아닌 경우 ovalue가 가리키는 구조에 타이머의 이전 값을 저장합니다.

Linux에서 이 값은 new_value 필드가 0인 호출과 동일한 것으로 처리됩니다. 즉, 타이머가 비활성화됩니다. 이 리눅스 잘못 된 기능을 사용 하지 마십시오: 그것은 비휴대용 및 불필요. strace가 구조 인수의 필드(sys 및 node)에 도움이 되는 레이블을 지정하는 것을 지켜야 합니다. 이 구조는 시스템 호출에 의해 채워지며 Linux는 sys 필드를 운영 체제 이름으로 설정하고 노드 필드를 시스템의 호스트 이름으로 설정합니다. uname 호출은 섹션 8.15, « uname »에서 더 자세히 설명합니다. 많은 시스템(Solaris, BSD 및 기타 시스템)은 이를 이와 동등하게 취급합니다. old_value가 NULL이 아닌 경우 타이머의 이전 값이 저장됩니다. . 신호의 생성 및 전달은 서로 다르며 위에 나열된 각 신호의 인스턴스 하나만 프로세스에 대해 보류 중일 수 있습니다. 매우 무거운 하중에서는 이전 만료의 신호가 전달되기 전에 ITIMER_REAL 타이머가 만료될 수 있습니다. 이러한 이벤트의 두 번째 신호가 손실됩니다.

gettimeofday (2), 시그 액션 (2), 신호 (2), timer_create (2), timerfd_create (2), 시간 (7) . POSIX.1은 setitimer()와 세 개의 인터페이스 알람(2), 절전(3) 및 usleep(3) 간의 상호 작용을 지정하지 않은 채 둡니다. POSIX.1-2001은 tv_usec 값이 0에서 999999 범위를 벗어난 경우 setitimer()가 실패해야 한다고 말합니다. 그러나 2.6.21까지의 커널에서 Linux는 오류를 제공하지 않고 타이머에 대해 해당 초 값을 자동으로 조정합니다. 커널 2.6.22 이후부터 이 부적합은 복구되었습니다: 부적절한 tv_usec 값으로 인해 EINVAL 오류가 발생합니다. . tv_sec과 tv_usec 는 타이머의 지속 시간을 결정하는 데 중요합니다. Home > 기사 > 운영 체제, 서버 > 리눅스 / UNIX / 오픈 소스 제한 키워드는 ISO / IEC 9899 :1999 표준과 정렬을위한 세티 타이머 () 프로토 타입에 추가됩니다. 라이브러리 함수에 대한 호출은 다른 함수 호출과 같습니다.

인수는 프로세서 레지스터 또는 스택에 배치되며 실행은 일반적으로 로드된 공유 라이브러리에 있는 함수 코드의 시작 부분으로 전송됩니다. new_value, old_value 또는 curr_value는 포인터가 유효하지 않습니다.

'.