Knihovnı´ funkce jazyka C Petr Sˇaloun 10. listopadu 2003
PJCPP
Knihovnı´ funkce jazyka C
6-1
Popis funkcı´ a maker standardnı´ch knihoven
Makro pouzˇ´ıvane´ prˇi ladeˇnı´. Pra´ce se znaky. isalnum() isalpha () iscntrl () isdigit () isgraph() islower () isprint () ispunct () isspace() isupper() isxdigit () tolower() toupper()
PJCPP
cˇı´slice nebo mala´ cˇi velka´ pı´smena mala´ cˇi velka´ pı´smena ˇr´ıdı´cı´ znaky cˇı´slice znaky s grafickou podobou mala´ pı´smena tisknutelne´ znaky interpunkcˇnı´ znaky bı´le´ znaky velka´ pı´smena hexadecima´lnı´ cˇı´slice konverze velky´ch pı´men na mala´ konverze maly´ch pı´smen na velka´
Knihovnı´ funkce jazyka C
6-2
<math.h> sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) atan2(x,y) sinh(x) cosh(x) tanh(x) exp(x) log(x) log10(x) pow(x,y) sqrt (x) ceil (x) floor (x) fabs((x) ldexp(x,n) frexp(x , exp) modf(x, n) fmod(x,n)
PJCPP
sin(x) cos(x) tan(x) arcsin(x) arccos(x) arctan(x) arkustangents x, y sinh(x) cosh(x) tanh(x) ex ln(x) log(x) y x q ( x) y ∈ Z, y ≥ x, nejmensˇ´ı y ∈ Z, y ≤ x, nejveˇtsˇ´ı |x| x × 2n x = m × 2exp x na celou n a desetinou cˇa´st rea´lny´ zbytek po deˇlenı´ x/y
Knihovnı´ funkce jazyka C
6-3
1. Argumenty matematicky´ch funkcı´ a na´vratove´ hodnoty jsou typu double. 2. Prˇi chybeˇ je v errno EDOM - vstup mimo definicˇnı´ obor funkce. ERANGE - Vy´stup HUGE VAL nebo 0.0.
PJCPP
Knihovnı´ funkce jazyka C
6-4
int i double g ,
f;
p r i n t f (”% f \ n ” , c e i l ( 3 . 1 4 ) ) ; p r i n t f (”% f \ n ” , f l o o r ( 3 . 1 4 ) ) ;
4.000000 3.000000
f = f r e x p ( 3 . 1 4 , &g ) ; p r i n t f (”% f x 2ˆ%d \ n ” ,
0.785000 x 2 ˆ 2
f , i );
f = modf ( −3.14 , & g ) p r i n t f (”% f + % f \ n ” , g , f ) ;
−3.000000
p r i n t f (”% f \ n ” , fmod ( 3 . 1 4 , 2 . 0 ) ) ;
PJCPP
Knihovnı´ funkce jazyka C
1.140000
6-5
Prˇ´ızpu˚sobenı´ C na´rodnı´mu prostrˇedı´. Proble´my • znakova´ sada, naprˇ. isupper(Sˇ ), • desetinna´ tecˇka versus nasˇe desetinna´ cˇa´rka, • za´pisu cˇasu a data, naprˇ. 10. 6. 1995, nebo 6-10-1995, cˇi July 10, 1995. setlocale () localeconv()
PJCPP
nastavuje vracı´
Knihovnı´ funkce jazyka C
6-6
<setjmp.h> Umozˇneˇnı´ „dlouhy´ch“ skoku˚. setjmp() longjmp()
prˇipravı´ podmı´nky a na´vratovy´ bod provede neloka´lnı´ skok.
Funkce setjmp() ulozˇ´ı a funkce longjmp() obnovı´ obsah potrˇebny´ch registru˚ procesoru, typ je jmp buf. Princip jednotne´ reakce na chybu s na´sledny´m restartem programu. # i n c l u d e < s t d i o . h> # i n c l u d e < setjmp . h> v o i d chyba ( v o i d ) ; / ∗ funkcni prototyp ∗ / j m p b u f h l a v n i s m y c k a ; / ∗ g l o b a l n i promenna ∗ / i n t main ( v o i d ) { int i , j; p r i n t f ( ” Zacatek programu h l a v n i s m y c k a = setjmp ( ) ; PJCPP
Knihovnı´ funkce jazyka C
\n ” ) ;
6-7
do { p r i n t f ( ” Zadej dve c i s l a : ” ) ; s c a n f (”%d %d ” , & i , & j ) ; i f ( j !=0) p r i n t f (”%d /% d=%d \ n ” , i , j , i / j ) ; else chyba ( ) ; } while ( i ! = 0 ) ;
} v o i d chyba ( v o i d ) { p r i n t f ( ” Chyba − n u l o v y d e l i t e l \ n \ n ” ) ; longjmp ( hlavni smycka , 1 ) ; }
v o i d chyba ( j m p b u f k a m s e v r a t i t , char ∗ chybova { p r i n t f ( ” Chyba : % s \ n ” , chybova zprava ) ; longjmp ( k a m s e v r a t i t , 1 ) ; }
PJCPP
Knihovnı´ funkce jazyka C
6-8
<signal.h> Zpracova´nı´ signa´lu. signal () raise ()
zavede novou obsluhu signa´lu vysˇle signa´l programu
# i n c l u d e < s t d i o . h> # i n c l u d e < s i g n a l . h> # i n c l u d e < setjmp . h> # d e f i n e POCET POKUSU 2 # d e f i n e vynech 5000 / ∗ znak se v y p i s u j e jednou za vynech ∗ / jmp buf navrat ; char vypisovany znak = ’ # ’ ; void obsluha signalu ( i n t nevyuzity parametr ) { s t a t i c i n t pocet vstupu = 0 ; p o c e t v s t u p u ++; i f ( p o c e t v s t u p u < = pocet pokusu ) { p r i n t f ( ” \ n%d : A zrovna ne \ n ” , p o c e t v s t u p u ) ; vypisovany znak + + ; } longjmp ( n a v r a t , p o c e t v s t u p u ) ; } PJCPP
Knihovnı´ funkce jazyka C
6-9
i n t main ( v o i d ) { long i n t i = 0 ; i n t pid ; void ( ∗ stara adr ) ( i n t ) ; / ∗ zavedeni nove adresy obsluhy SIGQUIT ∗ / s t a r a a d r = s i g n a l ( SIGQUIT , o b s l u h a s i g n a l u ) ; / ∗ z i s k a n i i d e n t i f i k a c n i h o c i s l a procesu ∗ / pid=getpid ( ) ; p r i n t f ( ” \ nPID =%d \ n \ n ” , p i d ) ; p r i n t f ( ” Zadej t r i k r a t p r i k a z : k i l l −%d %d \ n ” , SIGQUIT , p i d ) ; i f ( setjmp ( n a v r a t ) < pocet pokusu ) { while ( 1 ) { i f ( + + i % vynech = = 0 ) { p u t c h a r ( vypisovany znak ) ; f f l u s h ( stdout ) ; } } } p r i n t f ( ” \ n Tak t e d y ano . . . \ n ” ] ; / ∗ obnoveni puvodni adresy obsluhy SIGQUIT ∗ / s i g n a l ( SIGQUIT , s t a r a a d r ) ; }
PJCPP
Knihovnı´ funkce jazyka C
6-9
<stdarg.h> Pra´ce s promeˇnny´m pocˇtem parametru˚. va start () va arg() va end()
nastavı´ na zacˇa´tek da´ dalsˇ´ı polozˇky seznamu ukoncˇı´ pra´ci se seznamem
<stdio.h> Funkce pro vstup a vy´stup.
PJCPP
Knihovnı´ funkce jazyka C
6-10
fopen() freopen() fflush () fclose () remove() rename() tmpfile () tmpnam() setbuf () setvbuf() fprintf () printf () sprintf () vfprintf () vprintf () vsprintf () fscanf () scanf() sscanf() vfscanf () vsscanf() fgetc () getc() fputs () puts() getchar() PJCPP
otevı´ra´ soubor prˇesmeˇruje otevrˇeny´ soubor do jine´ho souboru zapı´sˇe obsah bufferu do souboru uzavrˇe soubor vymazˇe soubor prˇejmenuje soubor vytvorˇ´ı docˇasny´ soubor vytvorˇ´ı docˇasne´ jme´no souboru zmeˇnı´ buffer zmeˇnı´ buffer a zpu˚sob pra´ce s nı´m zapisuje forma´tovaneˇ do souboru zapisuje forma´tovaneˇ do stdout zapisuje forma´tovaneˇ do ˇreteˇzce zapisuje do souboru promeˇnny´ pocˇet parametru˚ zapisuje do stdout promeˇnny´ pocˇet parametru˚ zapisuje do ˇreteˇzce promeˇnny´ pocˇet parametru˚ cˇte forma´tovaneˇ ze souboru cˇte forma´tovaneˇ ze stdin cˇte forma´tovaneˇ z ˇreteˇzce cˇte ze souboru promeˇnny´ pocˇet parametru˚ cˇte ze stdin promeˇnny´ pocˇet parametru˚ cˇte znak ze souboru - vzˇdy funkce cˇte znak ze souboru - mu˚zˇe by´t makro zapisuje ˇreteˇzec do souboru zapisuje ˇreteˇzec do stdout cˇte znak ze stdin Knihovnı´ funkce jazyka C
6-10
<stdio.h> Funkce pro vstup a vy´stup (dokoncˇenı´) fread () cˇte neforma´tovaneˇ ze souboru fwrite () zapisuje neforma´tovaneˇ do souboru fseek() prˇesune se v souboru ftell () vra´tı´ pozici aktua´lnı´ho mı´sta v souboru rewind() prˇesune se na zacˇa´tek souboru fgetpos() ulozˇ´ı pozici aktua´lnı´ho mı´sta v souboru fsetpos() vra´tı´ se na ulozˇenou pozici v souboru clearerr () nuluje indika´tor chyby a konce souboru feof () testuje prˇ´ıznak konce souboru ferror () testuje prˇ´ıznak chyby pra´ce se souborem perror () tiskne chybu podle obsahu errno
PJCPP
Knihovnı´ funkce jazyka C
6-11
<stdlib.h> Obecneˇ vyuzˇitelne´ funkce. atof () atoi () atol () strtod () strtol () strtoul () rand() srand() calloc () malloc() realloc () free () abort () exit () atexit () system() getnev() bsearch() qsort () abs() labs () div(x , y) ldiv (x , y) PJCPP
konverze ˇreteˇzce na double konverze ˇreteˇzce na int konverze ˇreteˇzce na long int konverze ˇreteˇzce na double konverze ˇreteˇzce na long int konverze ˇreteˇzce na unsigned long int genera´tor na´hodne´ho cˇı´sla inicializace genera´toru na´hodne´ho cˇı´sla alokace dynamicke´ pameˇti pro pole objektu˚ alokace bloku dynamicke´ pameˇti zmeˇna velikosti bloku dynamicke´ pameˇti uvolneˇnı´ dynamicke´ pameˇti nestandardnı´ ukoncˇenı´ programu standardnı´ ukoncˇenı´ programu registrace ukoncˇujı´cı´ funkce vola´nı´ syste´move´ho prˇ´ıkazu poskytnutı´ informace o syste´move´ promeˇnne´ bina´rnı´ vyhleda´va´nı´ trˇ´ıdeˇnı´ logaritmem quick–sort absolutnı´ hodnota typu int absolutnı´ hodnota typu long int x/y a x%y soucˇasneˇ pro typy int x/y a x%y soucˇasneˇ pro typy long int Knihovnı´ funkce jazyka C
6-12
Konverze rˇeteˇzcu˚ na cˇı´sla Pozna´mka: ISO C nedefinuje opacˇne´ funkce, tj. pro prˇevod cˇı´sel na ˇreteˇzce, naprˇ. itoa(). V teˇchto prˇ´ıpadech je nutno pouzˇ´ıt funkci sprintf () . char ∗ s , ∗ chyba ; long i n t 1 ; s = ” 1234567”; l = atol (s ); p r i n t f ( ” s=%s l = % l d \ n ” , s , l / ∗ s =1234567 l =1234567 s =”1234567”; l = s t r t o l ( s , & chyba , 1 0 ) ; p r i n t f ( ” s=%s l = % l d \ n ” , s , l / ∗ s =1234567 l =1234567
); ∗/
); ∗/
s =” f f f f ” ; l = s t r t o l ( s , & chyba , 1 6 ) ; p r i n t f ( ” s=%s l = % l d \ n ” , s , l ) ; / ∗ s= f f f f l =65535 ∗ /
PJCPP
Knihovnı´ funkce jazyka C
6-13
s = ” 0 xFGFFF ” l = s t r t o l ( s , & chyba , 1 6 ) ; p r i n t f ( ” s=%s l=%l d \ nchybny znak : % s \ n ” , s , l , chyba ) ; / ∗ s = 0 xFGFFF l = 1 5 ∗ / s = 1111111111111111; l = 1 5 ; GFFF ∗ / / ∗ chybny znak : l = s t r t o l ( s , & chyba , 2 ) ; p r i n t f ( ” s=%s \ n l = % l d \ n ” , s , l ) ; / ∗ s = 11111111111111111 l = 6 5 5 3 5 ∗ /
PJCPP
Knihovnı´ funkce jazyka C
6-14
Genera´tor pseudona´hodny´ch cˇı´sel Pouzˇ´ıvajı´ se dveˇ funkce: 1. int rand(void) Rozsah < 0, RAN D M AX ), prˇi kazˇde´m spusˇteˇnı´ programu je posloupnost stejna´. Pouzˇitı´: rand() % rozsah, naprˇ. rand() % 20 #define real rand ()\ ( ( double ) rand ( ) / ( RAND MAX+ 1 . 0 ) ) 2. void srand(unsigned int start ) Inicializuje genera´tor rand() pocˇa´tecˇnı´ hodnotou start .
PJCPP
Knihovnı´ funkce jazyka C
6-15
# i n c l u d e < s t d i o . h> # i n c l u d e < t i m e . h> i n t main ( v o i d ) { int i ;
srand ( ( unsigned ) t i m e ( NULL ) ) ; p r i n t f ( ” \ nDeset nahodnych c i s e l od 0 do 99 \ n ” ) ; f o r ( i = 0 ; i < 10; i ++) p r i n t f (”%2d ” , rand ( ) % 1 0 0 ) ; }
PJCPP
Knihovnı´ funkce jazyka C
6-16
Funkce pracujı´cı´ s dynamickou pameˇtı´ Funkce typu malloc(). Funkce pro spolupra´ci s operacˇnı´m syste´mem Funkce abort() nestandardneˇ ukoncˇı´ program, tzn. zˇe nezapisuje buffery, nemazˇe docˇasne´ soubory, nespousˇtı´ funkce registrovane´ pomocı´ atexit () , atd. V UNIXU se snazˇ´ı zavrˇ´ıt soubory a generuje soubor core. Funkce atexit () zaregistruje funkci stop funkce(). Zaregistrovana´ funkce se spustı´ po ukoncˇenı´ funkce main(). Lze jich zaregistrovat azˇ 32; jsou vola´ny v obra´cene´m porˇadı´, nezˇ byly registrova´ny.
PJCPP
Knihovnı´ funkce jazyka C
6-17
# i n c l u d e < s t d i o . h> # i n c l u d e < s t d l i b . h> void e x i t f n 1 ( void ) { p r i n t f ( ” 1 . e x i t f u n k c e \n ” ) ; } void e x i t f n 2 ( void ) { p r i n t f (”2. exit funkce \n ” ) ; } i n t main ( v o i d ) { p r i n t f ( ” Zacatek & r e g i s t r a c e e x i t f n \ n ” ) ; atexit ( exit fn1 ); atexit ( exit fn2 ); p r i n t f ( ” Konec programu \ n ” ) ; } Program vypı´sˇe: Zacatek & r e g i s t r a c e e x i t f n Konec programu 2. exit funkce 1. exit funkce
PJCPP
Knihovnı´ funkce jazyka C
6-18
Funkce exit () Standardneˇ ukoncˇı´ prova´deˇnı´ programu, funguje jako prˇ´ıkaz return v main(), tzn. zapı´sˇ´ı se buffery, uzavrˇou se soubory, volajı´ se vsˇechny funkce registrovane´ pomocı´ atexit () , mazˇou se docˇasne´ soubory, atd. i f ( ( f r =fopen ( ” nesmysl . d a t ” , ” r ” ) ) = = NULL ) { p r i n t f ( ” Soubor n e e x i s t u j e \ n ” ) ; exit (1); }
PJCPP
Knihovnı´ funkce jazyka C
6-19
Funkce system() vyvola´ z programu prˇ´ıkaz operacˇnı´ho syste´mu. # i n c l u d e < s t d i o . h> # i n c l u d e < s t d l i b . h> i n t main ( v o i d ) { p r i n t f ( ” V y v o l a n i p r i k a z u d i r z programu \ n ” ) ; system ( ” d i r ∗ . t x t ” ) ;
}
PJCPP
Knihovnı´ funkce jazyka C
6-20
Funkce pro hleda´nı´ a trˇ´ıdeˇnı´ Pouzˇ´ıva´ se funkce: v o i d q s o r t ( v o i d ∗ p o l e t r i d , s i z e t n prv , size t vel prv , i n t (∗ porov fce ) ( const void ∗ , const void ∗ ) ) ; a porov fce() vracı´: < 0 je-li prvnı´ parametr mensˇ´ı nezˇ druhy´,
0 jsou-ji parametry shodne´, > 0 je-li prvnı´ parametr veˇtsˇ´ı nezˇ druhy´. Bina´rnı´ vyhleda´va´nı´ v setrˇ´ıdeˇne´m poli v o i d ∗ bsearch ( c o n s t v o i d ∗ k l i c , const void ∗ p o l e t r i d , s i z e t n prv , size t vel prv , i n t (∗ porov fce ) ( const void ∗ , const void ∗ ) ) ; PJCPP
Knihovnı´ funkce jazyka C
6-21
<string.h> strcpy () strncpy() strcat () strncat () strcmp() strncmp() strchr () strrchr () strstr () strlen () strspn () strcspn() strpbrk () strerror () strtok () memcpy() memmove() memcmp() memchr() memset()
PJCPP
kopı´rova´nı´ ˇreteˇzce kopı´rova´nı´ ˇreteˇzce s omezenı´m de´lky spojenı´ ˇreteˇzcu˚ spojenı´ ˇreteˇzcu˚ porovna´nı´ ˇreteˇzcu˚ porovna´nı´ ˇreteˇzcu˚ hleda´nı´ znaku v ˇreteˇzci hleda´nı´ znaku v ˇreteˇzci od jeho konce hleda´nı´ podrˇeteˇzce v ˇreteˇzci aktua´lnı´ de´lka ˇreteˇzce hleda´nı´ prvnı´ho rozdı´lne´ho znaku hleda´nı´ prvnı´ho shodne´ho znaku pocˇet rozdı´lny´ch znaku˚ poskytnutı´ chybove´ho hla´sˇenı´ deˇlenı´ ˇreteˇzce na cˇa´sti kopı´rova´nı´ bloku˚ bajtu˚ jako memcpy(), bloky se mohou prˇekry´vat porovna´nı´ bloku˚ bajtu˚ hleda´nı´ znaku v bloku bajtu˚ vyplneˇnı´ bloku bajtu˚ konstantou
Knihovnı´ funkce jazyka C
6-22
# i n c l u d e < s t d i o . h> # i n c l u d e < s t r i n g . h>
i n t main ( v o i d ) { char ∗ s1 = ” nazdar ahoj , dobry den ” ; char ∗ s2 = ” qwx radzan ” ; char ∗ s3 = ” qwxr ” ; char ∗ s4 = ” od ” ; i n t pozice ; char ∗ p c ; p o z i c e = s t r s p n ( s1 , s2 ) ; p r i n t f ( ” P r v n i c h %d znaku s1 j e v s2 \ n ” , p o z i c e ) p o z i c e = s t r c s p n ( s1 , s3 ) ; p r i n t f ( ” P r v n i c h %d znaku s1 n e n i v s3 \ n ” , p o z i c p c = s t r p b r k ( s1 , s4 ) ; i f ( p c ! = NULL ) p r i n t f ( ” P r v n i shodny znak s1 a s4 : % c \ n ” , ∗ p c ) else p r i n t f ( ” Zadny shodny znak \ n ” ) ; p c = s t r t o k ( s1 , ” , − ” ) ; / ∗ mezera , carka pomlcka i f ( p c ! = NULL ) p r i n t f (”% s \ n ” , p c ) ; PJCPP
Knihovnı´ funkce jazyka C
6-23
w h i l e ( ( p c = s t r t o k ( NULL , ” , − ” ) ) ! = NULL ) p r i n t f (”% s \ n ” , p c ) ; } Program vypı´sˇe: P r v n i c h 8 znaku s1 j e obsazeno v s2 p r v n i c h 5 znaku s1 n e n i obsazeno v s3 P r v n i shodny znak : d nazdar ahoj dobry den
PJCPP
Knihovnı´ funkce jazyka C
6-23
# i n c l u d e < s t d i o . h> # i n c l u d e < s t r i n g . h> # d e f i n e d e l k a 1000 i n t main ( v o i d ) { i n t a [ delka ] , b [ delka ] ; int i , ∗ p i ;
memset ( ( v o i d ∗ ) a , 0 , ( s i z e t ) ( d e l k a ∗ s i z e o f ( i n t ) ) p r i n t f ( ” memset : a[%d ] = % d \ n ” , d e l k a / 2 , a [ d e l k a [ delka / 2 ] = 1 ; p i = ( i n t ∗ ) memchr ( ( v o i d ∗ ) a , 1 , ( s i z e t ) ( d e l k p r i n t f ( ” memchr : i=%u \ n ” , p i − a ) ; memcpy ( ( v o i d ∗ ) b , ( v o i d ∗ a , ( s i z e t ) ( d e l k a ∗ s i z e o f ( i p r i n t f ( ” memcpy : b[%d]=%d \ n ” , d e l k a / 2 , b [ d e l k a f o r ( i = 1 ; i < 9 ; i ++) a [ i ] = i −1; f o r ( i = 0 ; i < 9 ; i ++) p r i n t f ( ” a[%d]=%d ” , i , a [ i ] ) ; p r i n t f ( ” \ nmemmove : \ n ” ) ; PJCPP
Knihovnı´ funkce jazyka C
6-24
memmove ( ( v o i d ∗ ) & a [ 0 ] , ( v o i d ∗ ) & a [ 1 ] , ( size t )(9∗ sizeof ( i n t ) ) ) ; f o r ( i = 0 ; i < 9 ; i ++) p r i n t f ( ” a[%d]=%d ” , i , a [ i ] ) ; }
PJCPP
Knihovnı´ funkce jazyka C
6-24
memset : memchr : memcpy : a[0]=0 a[5]=4 remove : a[0]=0 a[5]=5
PJCPP
a[500] i =500 b[500] a[1]=0 a[6]=5
=0 =1 a[2]=1 a[3]=2 a [7]=6 a[8]=7
a[1]=1 a[2]=3 a[3]=3 a [6]=6 a [7]=7 a[8]=0
Knihovnı´ funkce jazyka C
a[4]=3
a[4]=4
6-25
Pra´ce s datem a cˇasem. clock () time() difftime () mktime() asctime() ctime() gmtime() localtime () strftime ()
tiku˚ procesoru sekund od 1. ledna 1970 rozdı´l dvou cˇasu˚ pra´ce s polozˇkami cˇasu slozˇky cˇasu do ˇreteˇzce pocˇet sekund na ˇreteˇzec pocˇet sekund na cˇas slozˇky cˇasu z pocˇtu sekund form. slozˇky cˇasu do ˇreteˇzce
pocˇet procesorovy´ch tiku˚ za sekundu, obvykle long, pro funkci clock () , obvykle long, pro ostatnı´ funkce nezˇ clock () , pro ulozˇenı´ slozˇek cˇasu.
PJCPP
Knihovnı´ funkce jazyka C
6-26
Struktura tm obsahuje tyto polozˇky: int tm sec sekundy (0, 59) int tm min minuty (0, 59) int tm hour hodiny (0, 23) int tm mday den v meˇsı´ci (1, 31) int tm mon meˇsı´c od ledna (0, 11) int tm year roky od 1970 (0, ) int tm wdaz dny do nedeˇle (0, 6) int tm ydaz pocˇet dnu˚ od 1. ledna (0, 365) int tm isdst prˇ´ıznak letnı´ho cˇasu clock t
zac , konec ;
zac = c l o c k ( ) ; konec = c l o c k ( ) ; p r i n t f ( ” program t r v a l : %f [ sec ] \ n ” , ( konec−zac ) / ( double ) c l k t c k ) ; time t
pocet sec , n sec ;
p o c e t s e c = t i m e (& n sec ) ; p o c e t s e c = t i m e (& p o c e t s e c ) ; p o c e t s e c = t i m e ( NULL ) ;
PJCPP
Knihovnı´ funkce jazyka C
6-27
s t r u c t tm tm promenna , ∗ p tm ; t i m e t cas ; t i m e (& cas ) ; tm promenna = ∗ l o c a t l i m e (& cas ) ; / ∗ p r i r a z e n i s t r i f ( tm promenna . tm min = = 2 ) p tm = l o c a l t i m e (& cas ) ; /∗ p r i r a z e n i ukazate i f ( p tm−>tm min = = 2 ) ... Mon Jun 1 9 1 6 : 0 0 : 1 4 1 9 9 5 time t t ; t i m e (& t ) ; p r i n t f (”% s \ n ” , asctime ( l o c a l t i m e (& t ) ) ) ; p r i n t f (”% s \ n ” , c t i m e (& t ) ) ; Program vypı´sˇe: Mon Jun 1 9 1 6 : 0 0 : 1 4 1 9 9 5 Mon Jun 1 9 1 6 : 0 0 : 1 4 1 9 9 5
PJCPP
Knihovnı´ funkce jazyka C
6-28
# i n c l u d e < s t u d i o . h> # i n c l u d e < t i m e . h> # d e f i n e posun 20000 i n t main ( v o i d ) { s t r u c t tm ∗ p pak ; t i m e t ted ;
char ∗ dny [ ] = { ” Ne ” , ” Po ” , ” Ut ” , ” St ” , ” Ct ” , ” Pa ” , ” So ” } t i m e (& t e d ) ; p pak= l o c a l t i m e ( & t e d ) ; p pak−>tm min + = posun ; mktime ( p pak ) ; p r i n t f ( ” Za %d bude %s . \ n ” , posun , dny [ p pak−>tm wday ] ) ;
PJCPP
Knihovnı´ funkce jazyka C
6-29
Prˇ´ıklad: Na´sledujı´cı´ program bude pokracˇovat ve sve´ cˇinnosti dnes ve 20 hodin plus tolik minut, kolik je nynı´, plus jesˇteˇ 15 minut. s t r u c t tm ∗ p pak ; t i m e t ted , s p u s t e n i ; t i m e (& t e d ) ; p pak = l o c a l t i m e (& t e d ) ; p pak −> tm min + = 1 5 ; /∗ prirustkove ∗/ /∗ absolutni ∗/ p pak −> tm hour = 2 0 ; s p u s t e n i = mktime ( p pak ) ; w h i l e ( d i f f t i m e ( t i m e ( NULL ) , s p u s t e n i ) < 0 ) / ∗ prazdny c y k l u s c e k a n i ∗ /
PJCPP
Knihovnı´ funkce jazyka C
6-30