DDCHelp Hilfe zur Programmiersprache C Seite 1 von 606
Inhalt
PRÄPROZESSOR-DIREKTIVEN 24
# (Null-Direktive) 24
#define 24
#error 25
#if, #elif, #else, und #endif 25
#ifdef und #ifndef 26
#include 27
#line 27
#pragma 28
#pragma argsused 28
#pragma codeseg 29
#pragma comment 29
#pragma exit und #pragma startup 29
#pragma hdrfile 30
#pragma hdrstop 30
#pragma inline 30
#pragma intrinsic 30
#pragma message 31
#pragma option 31
#pragma saveregs 32
#pragma warn 32
#undef 33
MAKROS MIT PARAMETERN 34
Verschachteln von Klammern und Kommas 34
Token verschmelzen mit ## 34
Umwandlung in Strings mit # 35
Verwenden des Backslash ( zum Aufbrechen von Zeilen 35
Seiteneffekte und andere Gefahren 35
Suche nach einer Header-Datei mit <Header-Dateiname> 35
Suche nach einer Header-Datei mit "Header-Dateiname\ 35
GLOBALE VARIABLEN 35
_8087 36
_argc 36
_argv 36
Beispiel für _argc und _argv 37
_ctype 37
_daylight 37
_directvideo 37
_environ 38
errno 38
_doserrno 39
_sys_errlist 40
_sys_nerr 41
_floatconvert 41
_fmode 41
_new_handler 42
_osmajor 42
_osminor 43
DDCHelp Hilfe zur Programmiersprache C Seite 2 von 606
_osversion 43
_psp 44
__throwExceptionName 44
__throwFileName 44
__throwLineNumber 45
_threadid 45
_timezone 45
_tzname 46
_version 46
_wscroll 46
Veraltete globale Variablen 47
GLOBALE DATENSTRUKTUREN 47
_mexcep (typedef) 47
div_t und ldiv_t (typedef struct) 48
jmp_buf (typedef struct) 48
FILE (typedef struct) 49
dosSearchInfo (typedef struct) 49
atexit_t (type) 49
size_t (type) 49
ptrdiff_t (type) 50
fpos_t (type) 50
time_t (type) 50
clock_t (type) 50
sig_atomic_t (type) 50
wchar_t (type) 51
Struktur ftime 51
Strukturen exception und _exceptionl 51
Strukturen complex und _complexl 52
Struktur tm 52
Struktur timeb 52
Struktur stat 53
Struktur ffblk 53
Struktur fcb 54
Struktur xfcb 54
Struktur dfree 54
Struktur fatinfo 54
Struktur time 55
Struktur date 55
REGS (union) 55
Strukturen BYTEREGS und WORDREGS 55
Struktur SREGS 56
Struktur REGPACK 56
Struktur COUNTRY 56
Struktur devhdr 57
Struktur lconv 57
Struktur DOSERROR 58
/* DOSERROR Beispiel */ 58
Struktur find_t 58
Struktur dirent 59
Struktur dosdate_t 59
Struktur dostime_t 59
DDCHelp Hilfe zur Programmiersprache C Seite 3 von 606
Struktur diskfree_t 59
Struktur utimbuf 60
VORDEFINIERTE BEZEICHNER 60
O_xxxx, vordefinierte Bezeichner 60
SEEK_xxx, vordefinierte Bezeichner 61
SH_xxxx, vordefinierte Bezeichner 62
P_xxxx, vordefinierte Bezeichner 62
SIG_xxx, vordefinierte Bezeichner 62
SIGxxxx, vordefinierte Bezeichner 63
stdaux, stderr, stdin, stdout und stdprn 63
S_Ixxxx, vordefinierte Bezeichner 64
NULL, vordefinierter Bezeichner 64
Bit-Definitionen für fnsplit 64
MAXxxxx, vordefinierte Bezeichner (fnsplit) 65
_F_xxxx, vordefinierte Bezeichner 65
FA_xxxx, vordefinierte Bezeichner 65
EXIT_xxxx, vordefinierte Bezeichner 66
_IOxxx, vordefinierte Bezeichner 66
BUFSIZ, vordefinierter Bezeichner 67
EOF, vordefinierter Bezeichner 67
_IS_xxx, vordefinierte Bezeichner 67
CHAR_xxx, vordefinierte Bezeichner 67
SCHAR_xxx, vordefinierte Bezeichner 68
Uxxxx_MAX, vordefinierte Bezeichner 68
SHRT_xxx, vordefinierte Bezeichner 68
INT_xxx, vordefinierte Bezeichner 68
LONG_xxx, vordefinierte Bezeichner 69
CW_DEFAULT, vordefinierter Bezeichner 69
EDOM, ERANGE, HUGE_VAL, vordefinierte Bezeichner 69
NDEBUG, vordefinierter Bezeichner 69
NFDS, vordefinierter Bezeichner 70
MAXxxxx, vordefinierter Bezeichner (Integer Datentyp) 70
M_E, M_LOGxxx, M_LNxx, vordefinierte Bezeichner 70
PI-Konstanten 70
M_SQRTxx, vordefinierte Bezeichner 71
L_ctermid, vordefinierter Bezeichner 71
L_tmpnam, vordefinierter Bezeichner 71
TMP_MAX, vordefinierter Bezeichner 71
OPEN_MAX, vordefinierter Bezeichner 71
HANDLE_MAX, vordefinierter Bezechner 72
RAND_MAX, vordefinierter Bezeichner 72
BITSPERBYTE, vordefinierter Bezeichner 72
Grenzwerte für float- und double-Typen 72
HIBITx, vordefinierte Bezeichner 73
Fehlernummern in errno <ERRNO.H>errno.h 73
BIT-FELDER 74
SCHLÜSSELWÖRTER 74
auto (Schlüsselwort) 75
break (Schlüsselwort) 75
case (Schlüsselwort) 75
char (Schlüsselwort) 76
DDCHelp Hilfe zur Programmiersprache C Seite 4 von 606
continue (Schlüsselwort) 76
default (Schlüsselwort) 77
do (Schlüsselwort) 77
double (Schlüsselwort) 78
enum (Schlüsselwort) 78
extern (Schlüsselwort) 79
float (Schlüsselwort) 80
for (Schlüsselwort) 81
goto (Schlüsselwort) 81
if (Schlüsselwort) 81
int (Schlüsselwort) 82
long (Schlüsselwort) 82
register (Schlüsselwort) 83
return (Schlüsselwort) 83
signed (Typmodifizierer) 83
short (Typmodifizierer) 84
sizeof (Schlüsselwort) 84
static (Schlüsselwort) 85
struct (Schlüsselwort) 85
switch (Schlüsselwort) 86
typedef (Schlüsselwort) 87
union (Schlüsselwort) 87
unsigned (Typ-Modifizierer) 88
void (Schlüsselwort) 88
while (Schlüsselwort) 89
PARAMETERTYPEN UND MÖGLICHERWEISE VERWENDETE REGISTER 89
DATENTYPEN (16 BIT) 89
DATENTYPEN (32 BIT) 90
REGISTER-PSEUDOVARIABLEN 91
OPERATOREN (ÜBERSICHT) 91
Binäre Operatoren 92
Unäre Operatoren 93
Rangfolge der Operatoren 93
Arithmetische Operatoren 94
Zuweisungsoperatoren 95
Bitweise Operatoren 95
Kommaoperator 96
Bedingungsoperatoren 97
Logische Operatoren 97
Suffix-Operatoren 98
Präprozessor-Operatoren 98
Referenzierungs-/Dereferenzierungsoperatoren 98
Relationale Operatoren 99
Array-Indizierungsoperator 100
Klammer-Operatoren 100
. (Operator für direkte Elementauswahl) 100
-> Operator für indirekte Elementauswahl (Zeigeroperator) 101
L-Werte 101
Inkrement-/Dekrement-Operatoren 102
Argumente per Referenz übergeben 102
DDCHelp Hilfe zur Programmiersprache C Seite 5 von 606
Plus und Minus-Operatoren 103
Multiplikative Operatoren 104
INTERPUNKTIONSZEICHEN 105
Geschweifte Klammern 105
Semikolon 105
Doppelpunkt 105
Ellipsen (...) 106
Gleichheitszeichen 106
HEADER-DATEIEN - EINE ZUSAMMENFASSUNG 106
alloc.h 108
assert.h 109
bios.h 109
conio.h 109
ctype.h 110
dir.h 111
direct.h 112
dirent.h 112
dos.h 112
errno.h 115
fcntl.h 115
float.h 116
generic.h 116
io.h 116
iomanip.h 117
limits.h 118
locale.h 118
malloc.h 119
math.h 119
mem.h 120
memory.h 121
new.h 121
process.h 121
search.h 122
setjmp.h 122
share.h 122
signal.h 123
stdarg.h 123
stddef.h 123
stdio.h 124
stdiostr.h 125
stdlib.h 125
string.h 126
sys.h 126
sys.h 127
sys.h 127
sys.h 127
time.h 127
utime.h 128
values.h 128
varargs.h 129
excpt.h 129
DDCHelp Hilfe zur Programmiersprache C Seite 6 von 606
_defs.h 129
_nfile.h 130
_null.h 130
FUNKTION MAIN 130
Argumente zu main 131
Beispiel für die Übergabe von Argumenten an main( ) 131
Rückgabewert von main 132
Übergabe von Datei-Information an untergeordnete Prozesse 132
EIN-/AUSGABEROUTINEN FÜR DEN TEXTBILDSCHIRM 133
KONVERTIERUNGSROUTINEN 133
DIAGNOSE-ROUTINEN 134
VERZEICHNIS-STEUERROUTINEN 134
EIN-/AUSGABEROUTINEN 135
SCHNITTSTELLENROUTINEN 137
INTERNATIONALE API-ROUTINEN 138
BEARBEITUNGSROUTINEN 139
MATHEMATISCHE ROUTINEN 139
SPEICHERROUTINEN 141
VERSCHIEDENE ROUTINEN 141
ABLAUFSTEUERUNGSROUTINEN 142
ZEIT- UND DATUMS-ROUTINEN 143
ROUTINEN MIT VARIABLER ARGUMENTLISTE 143
BIBLIOTHEKSROUTINEN, NACH NAMEN SORTIERT 144
abort 144
abs 144
access 145
acos, acosl 146
alloca 146
asctime 147
asin, asinl 148
assert 148
atan, atanl 149
atan2, atan2l 149
atexit 150
atof, _atold 150
atoi 151
atol 152
bdos 153
bdosptr 153
_beginthread 154
_beginthreadNT 155
biosequip 155
_bios_equiplist 157
biosmemory 158
_bios_memsize 158
biostime 158
_bios_timeofday 159
bsearch 159
DDCHelp Hilfe zur Programmiersprache C Seite 7 von 606
cabs, cabsl 160
calloc 161
ceil, ceill 161
_c_exit 162
_cexit 162
cgets 163
_chain_intr 163
chdir 164
_chdrive 164
chmod 165
chsize 166
_clear87 166
clearerr 167
clock 167
close, close 167
closedir 168
clreol 169
clrscr 169
_control87 169
cos, cosl 170
cosh, coshl 171
country 171
cprintf 172
cputs 173
creat 173
creatnew 175
creattemp 175
_crotl, _crotr 176
cscanf 177
ctime 177
ctrlbrk 178
cwait 179
delline 180
difftime 180
disable, _disable, enable, _enable 180
div 181
_dos_close 182
_dos_commit 182
_dos_creat 182
_dos_creatnew 183
dosexterr 184
_dos_findfirst 184
_dos_findnext 186
getdate, _dos_getdate, _dos_setdate, setdate 186
_dos_getdiskfree 187
_dos_getdrive, _dos_setdrive 188
_dos_getfileattr, _dos_setfileattr 188
_dos_getftime, _dos_setftime 189
_dos_gettime, _dos_settime 190
_dos_getvect 191
_dos_open 191
DDCHelp Hilfe zur Programmiersprache C Seite 8 von 606
_dos_read 192
_dos_setvect 193
dostounix 194
_dos_write 194
dup 195
dup2 195
ecvt 196
__emit__ 197
_endthread 198
eof 198
execl, execle, execlp, execlpe, execv, execve, execvp, execvpe 199
_exit 201
exit 201
exp, expl 202
_expand 203
fabs, fabsl 203
farcalloc 204
farfree 204
farmalloc 205
farrealloc 205
fclose 206
fcloseall 206
fcvt 207
fdopen 207
feof 208
ferror 209
fflush 209
fgetc 210
fgetchar 211
fgetpos 211
fgets 212
filelength 212
fileno 212
findfirst 213
findnext 215
floor, floorl 215
flushall 216
fmod, fmodl 216
fnmerge 216
fnsplit 217
fopen 218
FP_OFF, FP_SEG 219
_fpreset 220
fprintf 221
fputc 221
fputchar 221
fputs 222
fread 222
free 223
freopen 223
frexp, frexpl 224
DDCHelp Hilfe zur Programmiersprache C Seite 9 von 606
fscanf 225
fseek 226
fsetpos 226
_fsopen 227
fstat, stat 229
_fstr* 230
ftell 231
ftime 231
_fullpath 232
fwrite 233
gcvt 233
geninterrupt 234
getc 234
getcbrk 235
getch 235
getchar 236
getche 236
getcurdir 237
getcwd 237
_getdcwd 238
getdfree 239
getdisk, setdisk 239
getdta 240
getenv 240
getfat 241
getfatd 241
getftime, setftime 242
_get_osfhandle 243
getpass 243
getpid 244
getpsp 244
gets 245
gettext 245
gettextinfo 246
gettime, settime 247
getvect, setvect 247
getverify 248
getw 249
gmtime 249
gotoxy 250
_heapadd 251
heapcheck 251
heapcheckfree 251
heapchecknode 252
_heapchk 252
heapfillfree 253
_heapmin 253
_heapset 253
heapwalk 254
highvideo 254
hypot, hypotl 255
DDCHelp Hilfe zur Programmiersprache C Seite 10 von 606
inp 255
inport 256
inportb 256
inpw 257
insline 257
int86 257
int86x 258
intdos 259
intdosx 260
intr 260
ioctl 261
isalnum 262
isalpha 262
isascii 263
isatty 263
iscntrl 263
isdigit 264
isgraph 264
islower 264
isprint 265
ispunct 265
isspace 265
isupper 266
isxdigit 266
itoa 266
kbhit 267
labs 267
ldexp, ldexpl 268
ldiv 268
lfind 269
localeconv 269
localtime 271
lock 272
locking 272
log, logl 273
log10, log10l 274
longjmp 274
lowvideo 275
_lrotl, _lrotr 276
lsearch 276
lseek 277
ltoa 278
_makepath 278
malloc 279
_matherr, _matherrl 280
max 281
mblen 282
mbstowcs 282
mbtowc 283
memccpy, _fmemccpy 283
memchr, _fmemchr 284
DDCHelp Hilfe zur Programmiersprache C Seite 11 von 606
memcmp, _fmemcmp 284
memcpy, _fmemcpy 285
memicmp, _fmemicmp 285
memmove 286
memset, _fmemset 286
min 287
mkdir 287
MK_FP 288
mktemp 288
mktime 288
modf, modfl 289
movedata 289
movmem 290
movetext 290
_msize 291
normvideo 291
offsetof 292
open 292
opendir 294
_open_osfhandle 295
outp 295
outport, outportb 296
outpw 296
parsfnm 297
_pclose 297
peek 297
peekb 298
perror 298
_pipe 300
poke 301
pokeb 302
poly, polyl 302
_popen 302
pow, powl 303
pow10, pow10l 304
printf 304
print: Format-String 305
printf: Formatieranweisungen 306
printf: Flag-Zeichen 306
Alternative Form der printf-Konvertierung 307
printf: Breitenangaben 308
printf: Präzisionsangaben 308
printf: Typkonvertierungszeichen 310
printf: Modifizierer für Eingabegrößen 311
printf: Konventionen für Formatieranweisungen 311
%e oder %E Konvertierungen 312
%f Konvertierung 312
%g oder %G-Konvertierungen 312
%x oder %X-Konvertierungen 312
...printf-Funktionen 313
putc 313
DDCHelp Hilfe zur Programmiersprache C Seite 12 von 606
putch 313
putchar 314
putenv 315
puts 315
puttext 316
putw 316
qsort 317
raise 318
rand 318
random 319
randomize 319
read 320
readdir 320
realloc 321
remove 322
rename 322
rewind 323
rewinddir 323
rmdir 323
rmtmp 324
_rotl, _rotr 324
_rtl_chmod 325
_rtl_close 326
_rtl_creat 326
_rtl_heapwalk 327
_rtl_open 328
_rtl_read 329
_rtl_write 330
scanf 330
Der ...scanf-Format-String 331
...scanf-Formatieranweisungen 332
...scanf-Typzeichen 333
Eingabefelder für ...scanf-Funktionen 334
...scanf-Zeichen für Zuweisungsunterdrückung 335
...scanf-Breitenangaben 335
...scanf-Zeigergrößen- und -Argumenttyp-Modifikationen 336
...scanf-Konventionen für die Formatieranweisung 336
Konvertierung einzelner Zeichen (%c) 337
Zeichen-Array-Konvertierung (%[W]c) 337
String-Konvertierung (%s) 337
Gleitkomma-Konvertierung (%e, %E, %f, %g, und %G) 338
Vorzeichenlose Konvertierung (%d, %i, %o, %x, %D, %I, %O, %X, %c, und %n) 338
Suchmengen-Konvertierung (%[search_set]) 338
Wenn ...scanf-Funktionen abbrechen 339
...scanf-Funktionen 340
_searchenv 340
searchpath 341
_searchstr 341
segread 342
setbuf 342
DDCHelp Hilfe zur Programmiersprache C Seite 13 von 606
setcbrk 343
_setcursortype 343
setdta 344
setjmp 344
setlocale 345
setmem 348
setmode 348
setvbuf 349
setverify 349
signal 350
sin, sinl 353
sinh, sinhl 353
sleep 354
sopen 354
spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe 356
_splitpath 359
sprintf 360
sqrt, sqrtl 360
srand 361
sscanf 361
stackavail 362
_status87 362
stime 362
stpcpy 363
strcat, _fstrcat 363
strchr, _fstrchr 364
strcmp 364
strcmpi 365
strcoll 365
strcpy 366
strcspn, _fstrcspn 366
_strdate 367
strdup, _fstrdup 367
_strerror 368
strerror 368
strftime 369
strftime Format-String 369
ANSI-definierte Formatieranweisungen 369
POSIX-definierte Formatieranweisungen 370
Posix-definierte Formatieranweisungsmodifikationen 371
stricmp, _fstricmp 371
strlen, _fstrlen 372
strlwr, _fstrlwr 372
strncat, _fstrncat 373
strncmp, _fstrncmp 373
strncmpi 374
strncpy, _fstrncpy 374
strnicmp, _fstrnicmp 374
strnset, _fstrnset 375
strpbrk, _fstrpbrk 375
strrchr, _fstrrchr 376
DDCHelp Hilfe zur Programmiersprache C Seite 14 von 606
strrev, _fstrrev 376
strset, _fstrset 376
strspn, _fstrspn 377
strstr, _fstrstr 377
_strtime 378
strtod, _strtold 378
strtok, _fstrtok 379
strtol 379
strtoul 380
strupr, _fstrupr 381
strxfrm 381
swab 382
system 382
tan, tanl 383
tanh, tanhl 384
tell 384
tempnam 385
textattr 386
textbackground 387
textcolor 388
textmode 389
time 390
tmpfile 390
tmpnam 391
toascii 391
_tolower 392
tolower 392
_toupper 392
toupper 393
tzset 393
ultoa 394
umask 394
ungetc 395
ungetch 395
unixtodos 396
unlink 396
unlock 397
utime 397
va_arg, va_end, va_start 398
vfprintf 399
vfscanf 399
vprintf 400
vscanf 401
vsprintf 402
vsscanf 402
wait 403
wcstombs 404
wctomb 404
wherex 405
wherey 405
window 406
DDCHelp Hilfe zur Programmiersprache C Seite 15 von 606
write 406
BEISPIELE 407
abs Beispiel 407
cabs Beispiel 407
fabs Beispiel 408
labs Beispiel 408
acos Beispiel 409
asin Beispiel 409
atan Beispiel 409
atan2 Beispiel 410
alloca Beispiel 410
asctime Beispiel 410
ctime Beispiel 411
beginthread Beispiel 411
_beginthreadNT Beispiel 412
biosequip Beispiel 413
_bios_equiplist Beispiel 414
biosmemory Beispiel 414
_bios_memsize Beispiel 414
biostime Beispiel 415
_bios_timeofday Beispiel 415
bsearch Beispiel 416
lfind Beispiel 417
lsearch Beispiel 417
qsort Beispiel 418
_rtl_chmod Beispiel 418
_dos_getfileattr Beispiel 419
_dos_setfileattr Beispiel 420
close Beispiel 420
_rtl_close Beispiel 421
_dos_close Beispiel 421
cos Beispiel 422
sin Beispiel 422
tan Beispiel 422
cosh Beispiel 422
sinh Beispiel 423
tanh Beispiel 423
creat Beispiel 423
_rtl_creat Beispiel 424
_dos_creat Beispiel 424
_dos_creatnew Beispiel 425
creatnew Beispiel 425
disable Beispiel 426
_disable Beispiel 427
enable Beispiel 428
_enable Beispiel 429
div Beispiel 429
ldiv Beispiel 430
dup Beispiel 430
dup2 Beispiel 431
ecvt Beispiel 432
DDCHelp Hilfe zur Programmiersprache C Seite 16 von 606
fcvt Beispiel 432
execl Beispiel 433
execlp Beispiel 433
execle Beispiel 434
execlpe Beispiel 434
execv Beispiel 434
execve Beispiel 435
execvp Beispiel 435
execvpe Beispiel 436
_exit Beispiel 436
_c_exit Beispiel 436
exit Beispiel 437
_cexit Beispiel 437
farfree Beispiel 438
free Beispiel 439
fgetc Beispiel 439
fputc Beispiel 440
fgetchar Beispiel 440
fputchar Beispiel 440
fgets Beispiel 441
fputs Beispiel 441
_dos_findfirst and _dos_findnext Beispiel 441
findfirst and findnext Beispiel 442
_fsopen Beispiel 442
fdopen Beispiel 443
fopen Beispiel 443
freopen Beispiel 444
freemem Beispiel 444
fstat Beispiel 445
stat Beispiel 445
getc Beispiel 446
putc Beispiel 446
getch Beispiel 447
getche Beispiel 447
getchar Beispiel 447
putchar Beispiel 448
getcwd Beispiel 448
_getdcwd Beispiel 449
_dos_getdate Beispiel 449
_dos_setdate Beispiel 449
getdate Beispiel 449
setdate Beispiel 450
_dos_getdiskfree Beispiel 450
getdfree Beispiel 451
_chdrive Beispiel 451
_dos_getdrive Beispiel 451
_dos_setdrive Beispiel 452
_getdrive Beispiel 452
getdisk Beispiel 452
setdisk Beispiel 452
getdta Beispiel 453
DDCHelp Hilfe zur Programmiersprache C Seite 17 von 606
setdta Beispiel 453
getfat Beispiel 454
getfatd Beispiel 455
getftime Beispiel 455
setftime Beispiel 456
_dos_getftime Beispiel 456
_dos_setftime Beispiel 457
puts Beispiel 457
gets Beispiel 457
puttext Beispiel 458
gettext Beispiel 458
_dos_gettime Beispiel 459
_dos_settime Beispiel 459
gettime Beispiel 459
settime Beispiel 460
_dos_getvect and _dos_setvect Beispiel 460
getvect and setvect Beispiel 461
getw Beispiel 461
putw Beispiel 462
gmtime Beispiel 463
localtime Beispiel 464
heapcheck and _heapchk Beispiel 464
heapcheckfree Beispiel 465
heapchecknode Beispiel 465
heapfillfree Beispiel 466
heapwalk Beispiel 467
_rtl_heapwalk Beispiel 467
inp Beispiel 468
inpw Beispiel 468
outp Beispiel 468
outpw Beispiel 469
inport Beispiel 469
inportb Beispiel 469
outport Beispiel 469
outportb Beispiel 470
int86 Beispiel 470
int86x Beispiel 470
intdos Beispiel 471
intdosx Beispiel 471
itoa Beispiel 472
ltoa Beispiel 472
ultoa Beispiel 472
keep Beispiel 473
localeconv Beispiel 474
setlocale Beispiel 475
locking Beispiel 475
lock Beispiel 476
unlock Beispiel 476
log Beispiel 477
log10 Beispiel 477
_lrotl and _lrotr Beispiel 478
DDCHelp Hilfe zur Programmiersprache C Seite 18 von 606
_rotl and _rotr Beispiel 478
_makepath Beispiel 479
_splitpath Beispiel 479
fnsplit Beispiel 480
fnmerge Beispiel 481
memmove Beispiel 481
memccpy Beispiel 481
memcpy Beispiel 482
memcmp Beispiel 482
memicmp Beispiel 483
_dos_open Beispiel 483
_rtl_open Beispiel 483
sopen Beispiel 484
open Beispiel 485
cprintf Beispiel 485
fprintf Beispiel 485
printf Beispiel 486
sprintf Beispiel 487
vfprintf Beispiel 487
vprintf Beispiel 488
vsprintf Beispiel 488
_dos_read Beispiel 489
_rtl_read Beispiel 489
read Beispiel 490
farrealloc Beispiel 491
realloc Beispiel 491
cscanf Beispiel 491
fscanf Beispiel 492
scanf Beispiel 492
sscanf Beispiel 493
vfscanf Beispiel 494
vscanf Beispiel 495
vsscanf Beispiel 495
setbuf Beispiel 496
setvbuf Beispiel 496
spawnl Beispiel 497
spawnle Beispiel 497
spawnlp Beispiel 498
spawnlpe Beispiel 498
spawnv Beispiel 499
spawnve Beispiel 499
spawnvp Beispiel 499
spawnvpe Beispiel 500
strcmp Beispiel 500
strcmpi Beispiel 501
stricmp Beispiel 501
strspn Beispiel 502
strcspn Beispiel 502
_strerror Beispiel 502
strerror Beispiel 503
strlwr Beispiel 503
DDCHelp Hilfe zur Programmiersprache C Seite 19 von 606
strupr Beispiel 503
strncmp Beispiel 503
strncmpi Beispiel 504
strnicmp Beispiel 504
strtod Beispiel 505
strtol Beispiel 505
strtoul Beispiel 505
textattr Beispiel 506
textbackground and textcolor Beispiel 506
time Beispiel 506
stime Beispiel 507
tolower Beispiel 507
_tolower Beispiel 507
toupper Beispiel 508
_toupper Beispiel 508
_dos_write Beispiel 509
_rtl_write Beispiel 509
write Beispiel 510
getcurdir Beispiel 510
getenv Beispiel 511
putenv Beispiel 511
getpass Beispiel 512
getpid Beispiel 512
gettextinfo Beispiel 512
getverify Beispiel 513
setverify Beispiel 513
gotoxy Beispiel 514
harderr Beispiel 514
hardresume Beispiel 516
highvideo Beispiel 518
lowvideo Beispiel 519
normvideo Beispiel 519
hypot Beispiel 519
imag Beispiel 520
insline Beispiel 520
intr Beispiel 520
ioctl Beispiel 521
isatty Beispiel 521
kbhit Beispiel 521
ldexp Beispiel 522
setjmp Beispiel 522
longjmp Beispiel 523
lseek Beispiel 523
malloc Beispiel 524
_matherr Beispiel 524
max and min Beispiel 525
memchr Beispiel 525
memset Beispiel 526
mkdir Beispiel 526
rmdir Beispiel 527
mktemp Beispiel 527
DDCHelp Hilfe zur Programmiersprache C Seite 20 von 606
mktime Beispiel 528
modf Beispiel 528
movedata Beispiel 529
movmem Beispiel 529
movetext Beispiel 529
norm Beispiel 530
closedir Beispiel 530
opendir Beispiel 531
parsfnm Beispiel 532
peek Beispiel 532
perror Beispiel 533
poke Beispiel 533
polar Beispiel 533
poly Beispiel 534
pow Beispiel 534
pow10 Beispiel 535
putch Beispiel 535
raise Beispiel 535
rand Beispiel 535
random Beispiel 536
randomize Beispiel 536
real Beispiel 536
remove Beispiel 537
rename Beispiel 537
rewind Beispiel 537
rewinddir Beispiel 538
rmtmp Beispiel 539
_searchenv Beispiel 539
searchpath Beispiel 540
abort Beispiel 540
access Beispiel 540
arg Beispiel 541
assert Beispiel 541
atexit Beispiel 541
atof Beispiel 542
atoi Beispiel 542
atol Beispiel 542
bcd Beispiel 543
bdos Beispiel 543
bdosptr Beispiel 543
calloc Beispiel 544
ceil and floor Beispiel 544
cgets Beispiel 545
_chain_intr Beispiel 545
chdir Beispiel 546
chmod Beispiel 547
chsize Beispiel 548
_clear87 and _status87 Beispiel 548
clearerr Beispiel 548
clock Beispiel 549
clreol Beispiel 549
DDCHelp Hilfe zur Programmiersprache C Seite 21 von 606
clrscr Beispiel 550
complex Beispiel 550
conj Beispiel 550
country Beispiel 551
cputs Beispiel 551
creattemp Beispiel 551
ctrlbrk Beispiel 552
delline Beispiel 552
difftime Beispiel 552
dosexterr Beispiel 553
dostounix Beispiel 553
__emit__ Beispiel 554
eof Beispiel 554
exp and expl Beispiel 554
farcalloc Beispiel 555
farmalloc Beispiel 555
fclose Beispiel 556
fcloseall Beispiel 556
feof Beispiel 557
ferror Beispiel 557
fflush Beispiel 558
fgetpos and fsetpos Beispiel 558
filelength Beispiel 559
fileno Beispiel 560
flushall Beispiel 560
fmod and fmodl Beispiel 560
FP_OFF, FP_SEG, and MK_FP Beispiel 561
fread Beispiel 561
frexp and frexpl Beispiel 562
fseek Beispiel 562
ftell Beispiel 562
ftime Beispiel 563
_fullpath Beispiel 563
fwrite Beispiel 563
gcvt Beispiel 564
geninterrupt Beispiel 564
getcbrk and setcbrk Beispiel 565
segread Beispiel 566
setmem Beispiel 566
setmode Beispiel 566
signal Beispiel 567
sleep Beispiel 568
sqrt Beispiel 568
srand Beispiel 568
stpcpy Beispiel 568
strcat Beispiel 569
strchr Beispiel 569
strcoll Beispiel 569
strcpy Beispiel 570
_strdate Beispiel 570
strdup Beispiel 570
DDCHelp Hilfe zur Programmiersprache C Seite 22 von 606
strftime Beispiel 571
strlen Beispiel 571
strncat Beispiel 571
strncpy Beispiel 572
strnset Beispiel 572
strpbrk Beispiel 572
strrchr Beispiel 573
strrev Beispiel 573
strset Beispiel 573
strstr Beispiel 574
_strtime Beispiel 574
strtok Beispiel 574
strxfrm Beispiel 575
swab Beispiel 575
system Beispiel 575
tell Beispiel 575
tempnam Beispiel 576
textmode Beispiel 576
tmpfile Beispiel 577
tmpnam Beispiel 577
toascii Beispiel 577
tzset Beispiel 578
ungetc Beispiel 578
ungetch Beispiel 578
unixtodos Beispiel 579
unlink Beispiel 580
umask Beispiel 580
utime Beispiel 581
va_arg Beispiel 581
wherex and wherey Beispiel 582
window Beispiel 582
getpsp Beispiel 582
stackavail Beispiel 583
set_new_handler Beispiel 583
isalpha Beispiel 584
isalnum Beispiel 584
isascii Beispiel 584
iscntr Beispiel 584
isdigit Beispiel 585
isgraph Beispiel 585
islower Beispiel 585
isprint Beispiel 585
ispunct Beispiel 586
isspace Beispiel 586
isupper Beispiel 586
isxdigit Beispiel 587
mblen Beispiel 587
mbstowcs Beispiel 587
mbtowc Beispiel 588
MK_FP Beispiel 588
_msize Beispiel 589
DDCHelp Hilfe zur Programmiersprache C Seite 23 von 606
offsetof Beispiel 589
_pipe Beispiel 590
send Beispiel 591
_setcursortype Beispiel 592
_dos_com Beispiel 593
_expand Beispiel 594
_get_osfhandle Beispiel 594
_heapset Beispiel 597
_searchstr Beispiel 599
_popen and _pclose Beispiel 600
wctomb Beispiel 600
wcstombs Beispiel 601
STICHWORTVERZEICHNIS 602
DDCHelp Hilfe zur Programmiersprache C Seite 24 von 606
Präprozessor-Direktiven Präprozessor-Direktiven werden gewöhnlich am Anfang des Quellprogramms platziert, sind aber an jeder beliebigen Stelle des Programms zulässig. Der Präprozessor erkennt Präprozessor-Direktiven (auch Steuerzeilen genannt) und zerlegt sie in die darin enthaltenen Token. Üblich sind die folgenden Präprozessor-Direktiven:
# (Null-Direktive) #ifdef
#define #ifndef
#elif #include
#else #line
#endif #pragma
#error #undef
#if
Jede Zeile, die mit dem Zeichen # beginnt, wird als Präprozessor-Direktive betrachtet, falls das Zeichen # nicht Teil einer Stringkonstanten, einer Zeichenkonstanten oder eines Kommentars ist. Vor und nach dem einleitenden #-Zeichen dürfen Whitespace-Zeichen (außer Zeilenvorschub) stehen.
# (Null-Direktive)
Syntax: #
Beschreibung:
Die Null-Direktive besteht aus einer Zeile, die nur das Zeichen # enthält. Diese Direktive wird stets ignoriert.
#define
Syntax: #define makro_name <token_folge>
Beschreibung:
Die Direktive #define definiert ein Makro. Makros stellen einen Mechanismus zur Verfügung, mit dem Token ersetzt werden können, wobei dies mit oder ohne einen Satz von formalen Parametern (ähnlich wie ein Funktionsaufruf) geschehen kann.
Jedes Mal, wenn makro_name in Ihrem Quellprogramm nach dieser Steuerzeile auftritt, wird er durch die möglicherweise leere token_folge ersetzt, und zwar an seiner Originalposition (es gibt dabei einige Ausnahmen, die später behandelt werden). Diese Ersetzung nennt man Makroerweiterung. Die token_folge wird manchmal Rumpf des Makros genannt.
Eine leere Token-Folge bewirkt, dass der betreffende Makroname an jeder Stelle aus dem Quellprogramm entfernt wird.
Nach jeder einzelnen Makroerweiterung wird der dadurch neu erzeugte Text nochmals durchsucht. Damit wird eine Schachtelung von Makros möglich: Der erweiterte Text kann neue Makronamen enthalten, die auch wieder ersetzt werden. Wenn ein Makro jedoch in einen Text umgewandelt wird, der wie eine Präprozessor-Direktive aussieht, wird diese nicht vom Präprozessor erkannt. Für die Makroerweiterung gibt es folgende Einschränkungen:
Tritt ein Makroname im Quelltext innerhalb von String-Konstanten, Zeichenkonstanten oder Kommentaren auf, so wird keine Erweiterung durchgeführt.
Ein Makro wird nicht während seiner eigenen Erweiterung erweitert (#define A A wird also
nicht unendlich oft erweitert).
Beispiele:
DDCHelp Hilfe zur Programmiersprache C Seite 25 von 606
#define HI "Ich wünsche Ihnen einen schönen Tag!"
#define empty
#define NIL ""
#define GETSTD
#include <stdio.h>
Siehe auch: Schlüsselwörter und reservierte Wörter als Makros
Makros mit Parametern
#undef
Verwenden der Kommandozeilenoptionen -D und -U
#error
Syntax: #error errmsg
Beschreibung:
Die Präprozessor-Direktive #error erzeugt die Botschaft:
Error: Dateiname Zeilennummer# : Error-Direktive: errmsg
Diese Direktive wird gewöhnlich in eine bedingte Präprozessor-Direktive eingefügt, die eine bestimmte unerwünschte Bedingung zur Compilierzeit abfangen soll. Im Normalfall hat diese Bedingung den Wert Falsch. Ist die Bedingung aber Wahr, soll der Compiler eine Fehlermeldung ausgeben und die Übersetzung stoppen. Um dies zu erreichen, setzt man die Direktive #error zusammen mit einer Bedingungs-Direktive ein, die im unerwünschten Fall Wahr ergibt.
Beispiele #if (MYVAL != 0 && MYVAL != 1)
#error MYVAL muss entweder 0 oder 1 sein
#endif
#if, #elif, #else und #endif
Syntax: #if constant-expression-1
<section-1>
<#elif constant-expression-2 newline section-2>
.
.
.
<#elif constant-expression-n newline section-n>
<#else <newline> final-section>
#endif
Beschreibung:
Der Compiler unterstützt die bedingte Kompilierung durch Ersetzen der entsprechenden Quelltextzeilen durch Leerzeilen. Es werden alle Zeilen ignoriert, die mit dem Zeichen # beginnen (mit Ausnahme von #if, #ifdef, #ifndef, #else, #elif und #endif) sowie alle Zeilen, die gemäß Präprozessor-Direktiven nicht kompiliert werden sollen. Alle Direktiven für bedingte Kompilierung müssen in derjenigen Quelltext- oder Include-Datei abgeschlossen werden, in der sie beginnen.
Die Direktiven zur bedingten Kompilierung, #if, #elif, #else und #endif, wirken ähnlich wie die normalen Bedingungsoperatoren von C. Wenn konstantenausdruck_1 (Gegenstand einer Makroerweiterung) einen Wert ungleich Null (Wahr) ergibt, werden die (möglicherweise leeren) Quelltextzeilen in abschnitt_1 (ganz gleich, ob Präprozessor-Direktiven oder normaler Quelltext)
DDCHelp Hilfe zur Programmiersprache C Seite 26 von 606
vom Präprozessor verarbeitet und dann gegebenenfalls dem Compiler übergeben. Andernfalls, wenn also konstantenausdruck_1 den Wert null ergibt, wird abschnitt_1 ignoriert (keine Makroerweiterung und keine Kompilierung).
Im Fall, dass die Bedingung Wahr ist, wird, nachdem abschnitt_1 vom Präprozessor verarbeitet wurde, der Quelltext bis zur zugehörigen #endif-Direktive (die diesen Block der bedingten Kompilierung beendet) übergangen und mit nächster_abschnitt fortgefahren. Ist die Bedingung Falsch, so geht die Kontrolle an die nächste #elif-Zeile (falls vorhanden) über, in der konstantenausdruck_2 berechnet wird. Ergibt sich dabei der Wert Wahr, so wird abschnitt_2 verarbeitet, wonach die Kontrolle zur zugehörigen #endif-Direktive geht. Andernfalls, wenn also konstantenausdruck_2 den Wert Falsch hat, geht die Kontrolle zur nächsten #elif-Direktive, und so geht es weiter, bis entweder #else oder #endif erreicht wird. Die optionale #else-Direktive dient als Alternativzweig, falls alle vorangegangenen Prüfungen den Wert Falsch ergeben haben. Die Direktive #endif schließt die Gruppe der bedingten Anweisungen ab.
Der verarbeitete Abschnitt kann selbst weitere Bedingungs-Direktiven enthalten, die beliebig tief verschachtelt sein können; zu jeder #if-Direktive muss aber genau eine zugehörige #endif-Direktive vorhanden sein.
Das Endergebnis des vorstehenden Beispiels ist, dass nur ein einziger (möglicherweise leerer) Abschnitt weiterverarbeitet wird. Die übergangenen Abschnitte sind nur relevant, um die Struktur verschachtelter Bedingungen nicht zu verletzen und es zu ermöglichen, dass jedem #if das richtige #endif zugeordnet werden kann.
Der Konstantenausdruck, dessen Wert geprüft wird, muss einen konstanten, ganzzahligen Wert liefern.
Siehe auch: Schlüsselwort defined
#ifdef
#ifndef
#ifdef und #ifndef
Syntax: #ifdef identifier
#ifndef identifier
Beschreibung:
Mit den Bedingungs-Direktiven #ifdef und #ifndef können Sie prüfen, ob ein Bezeichner momentan definiert ist oder nicht, ob also eine #define-Direktive für diesen Bezeichner vorausging und noch wirksam ist. Die Zeile
#ifdef bezeichner
hat, wenn bezeichner momentan definiert ist, exakt denselben Effekt wie
#if 1
und wenn bezeichner momentan nicht definiert ist, denselben Effekt wie
#if 0
Die Direktive #ifndef ergibt Wahr, wenn bezeichner momentan nicht definiert ist; deshalb hat die Zeile
#ifndef bezeichner
exakt denselben Effekt wie
#if 0
wenn bezeichner momentan definiert ist, und denselben Effekt wie
#if 1
wenn bezeichner momentan nicht definiert ist.
Die Syntax entspricht demnach der Direktiven #if, #elif, #else und #endif.
DDCHelp Hilfe zur Programmiersprache C Seite 27 von 606
Ein Bezeichner, der als NULL definiert wurde, gilt als definiert.
Siehe auch: Schlüsselwort defined
#include
Syntax: #include <header_name>
#include "header_name"
#include makro_name
Beschreibung:
Die Direktive #include fügt andere, benannte Dateien (Include-Dateien, Header-Dateien oder einfach Header genannt) in das Quellprogramm ein. Die Syntax kennt drei Formen:
Die erste und die zweite Form setzen voraus, dass keine Makroerweiterung stattfinden soll; anders gesagt, header_name wird nicht nach Makronamen durchsucht. header_name muss einen zulässigen DOS-Dateinamen mit Erweiterung (traditionell ist dies .h für Header) und optional mit einer Pfadangabe (und Pfadbegrenzer-Zeichen) darstellen.
Die dritte Form setzt voraus, dass nach #include weder ein < noch ein " als erstes Nicht-Whitespace-Zeichen steht. Außerdem wird vorausgesetzt, dass eine Makrodefinition existiert, die den Makronamen zu einem gültigen, begrenzten Header-Dateinamen im Format <header_name> oder "header_name" erweitert.
Der Präprozessor entfernt die #include-Zeile und ersetzt sie wirkungsmäßig an ihrer Position im Quelltext durch den gesamten Quelltext der Header-Datei. Die Quelldatei selbst wird nicht wirklich verändert, aber der Compiler "sieht" den ergänzten Text. Das Einfügen einer #include-Direktive kann also Gültigkeitsbereich und -dauer von Bezeichnern der eingefügten Datei beeinflussen.
Wenn Sie in header_name explizit einen Pfadnamen angeben, so wird nur das angegebene Verzeichnis durchsucht.
Der Unterschied zwischen den Formen <header_name> und "header_name" liegt in der Suchstrategie für das Auffinden der Include-Datei.
Beispiele:
Die folgende #include-Direktive bewirkt, dass der Präprozessor nach MEININCL.H im voreingestellten Include-Verzeichnis sucht.
#include <meinincl.h>
Die folgende #include-Direktive bewirkt, dass der Präprozessor nach MEININCL.H erst im aktuellen Verzeichnis und danach in den voreingestellten Verzeichnissen sucht.
#include "meinincl.h"
Nach der Makroerweiterung bewirkt die folgende #include-Direktive, dass der Präprozessor nach C:\DEVC\INCLUDE\MEINS.H und nichts anderem sucht.
#define myinclud "C:\DEVC\INCLUDE\MEINS.H"
/* Hinweis: Einfache Backslashs sind hier zulässig, in einer C-Anweisung
müssten Sie aber "C:\\DEVC\\INCLUDE\\MEINS.H" schreiben. */
#include myinclud
/* Makroerweiterung */
#line
Syntax:
DDCHelp Hilfe zur Programmiersprache C Seite 28 von 606
#line integer_konstante <"dateiname">
Beschreibung:
Sie können die #line-Direktive verwenden, um einem Programm Zeilennummern für Querverweise oder Fehlermeldungen zu übergeben. Wenn Ihr Programm aus irgendwelchen anderen Programmen entnommene Passagen enthält, ist es oft sinnvoll, diese Passagen mit den Zeilennummern des ursprünglichen Quellprogramms zu versehen, anstatt das zusammengesetzte Programm komplett sequentiell durchzunummerieren.
Die Direktive #line legt fest, dass die folgende Quelltextzeile ursprünglich die Zeile mit der Nummer integer_konstante der Datei dateiname war. Nachdem der Dateiname einmal registriert ist, kann man bei nachfolgenden #line-Direktiven, die sich auf dieselbe Datei beziehen, auf die explizite Angabe des Arguments dateiname verzichten.
Makros werden in #line-Argumenten genauso wie in der Direktive #include erweitert.
Die Direktive #line wird hauptsächlich von Hilfsprogrammen, die C-Quelltexte erzeugen, benutzt, weniger von "menschlichen" Programmierern.
#pragma
Syntax: #pragma anweisungs_name
Beschreibung:
Mit Hilfe der Direktive #pragma kann der Compiler beliebige gewünschte Anweisungen definieren, ohne dabei mit anderen Compilern in Konflikt zu kommen, die ebenfalls mit #pragma arbeiten. Wenn ein Compiler anweisungs_name nicht kennt, so ignoriert er die gesamte #pragma-Direktive ohne Fehler- oder Warnmeldung.
Folgende #pragma-Direktiven werden unterstützt:
#pragma argsused
#pragma codeseg
#pragma comment
#pragma exit
#pragma hdrfile
#pragma hdrstop
#pragma inline
#pragma intrinsic
#pragma message
#pragma option
#pragma saveregs
#pragma startup
#pragma warn
#pragma argsused
Syntax: #pragma argused
Beschreibung:
Das Pragma argsused ist nur zwischen Funktionsdefinitionen zulässig; es wirkt nur auf die nächstfolgende Funktion. Das Pragma unterbindet die Warnbotschaft:
"Parameter name is never used in function func-name"
Siehe auch:
DDCHelp Hilfe zur Programmiersprache C Seite 29 von 606
Präprozessor-Direktiven:
#pragma codeseg
Syntax #pragma codeseg <seg_name> <"seg_class"> <group>
Beschreibung
Mit der Direktive codeseg können Sie den Segment-, Klassen- oder Gruppennamen für Funktionen angeben. Wenn das Pragma ohne Argumente verwendet wird, so wird das Standard-Code-Segment für Funktionen benutzt.
#pragma comment
Syntax #pragma comment comment type, "string")
Beschreibung
Mit dem Pragma comment können Sie Kommentar-Records in eine OBJ-Datei einfügen. Der Parameter comment type kann dabei einen der folgenden Werte annehmen:
Wert Erklärung
exestr Der Linker schreibt string in eine .OBJ-Datei, die wiederum in das ausführbare Programm eingebunden wird. Dieser so platzierte String wird zwar niemals in den Speicher geladen, kann aber durch geeignete Hilfsprogramme (zum Durchsuchen) in der ausführbaren Programmdatei gefunden werden.
lib Schreibt einen Kommentar-Record in eine OBJ-Datei. Der Kommentar-Record wird vom Linker für das Durchsuchen der Bibliotheken herangezogen. Ein nicht in der Response-Datei des Linkers spezifiziertes Bibliotheksmodul kann durch eine comment LIB Direktive angegeben werden. Dadurch wird der Linker veranlasst, das Modul lib_module_name als letzte Bibliothek einzubinden. Mehrere Module können benannt und in der Reihenfolge ihrer Nennung eingebunden werden.
user Der Compiler schreibt string in eine OBJ-Datei. Der angegebene String wird vom Linker ignoriert.
#pragma exit und #pragma startup
Syntax: #pragma startup funktions_name <priorität>
#pragma exit funktions_name <priorität>
Beschreibung:
Mit diesen beiden Pragmas kann man vom Programm aus Funktionen spezifizieren, die beim Programmstart (vor dem Aufruf von main) beziehungsweise beim Programmende (unmittelbar, bevor die Funktion _exit ausgeführt wird) aufgerufen werden sollen.
Die angegebenen Funktionen müssen vorher deklariert worden sein, dürfen keine Argumente benötigen und müssen ein Ergebnis vom Typ void zurückliefern. Anders gesagt, sie müssen in der Form
void funktion(void);
deklariert werden.
DDCHelp Hilfe zur Programmiersprache C Seite 30 von 606
Hinweis: Die Prioritätswerte von 0 bis 63 werden von den C-Bibliotheken benutzt und sollten deshalb vom Anwendungsprogrammierer nicht verwendet werden.
Der optionale Parameter priorität sollte ein ganzzahliger Wert von 64 bis 255 sein. Der Wert 0 bezeichnet die höchste Priorität. Die Funktionen mit der höchsten Priorität werden beim Programmstart als erste und beim Programmende als letzte aufgerufen. Wenn Sie keine Priorität vorgeben, gilt die Voreinstellung 100.
#pragma hdrfile
Syntax: #pragma hdrfile "dateinam.SYM"
Beschreibung:
Diese Direktive bestimmt den Namen der Datei, in der die vorcompilierten Header gespeichert werden. Für weitere Informationen s. Anhang C im Benutzerhandbuch.
Wenn Sie keine vorcompilierten Header verwenden, hat diese Direktive keine Wirkung. Mit Hilfe der Kommandozeilenoption -H=dateiname oder der Menüeinstellung Vorcompilierte Header (O/C/Codegenerierung) können Sie den Namen der Datei mit den vorcompilierten Headern ändern.
#pragma hdrstop
Syntax: #pragma hdrstop
Beschreibung:
Diese Direktive schließt die Liste der Header-Dateien ab, die für die Vorcompilierung vorgesehen sind. Damit können Sie den für die vorcompilierten Header benötigten Plattenspeicherplatz reduzieren. Für weitere Informationen zu vorcompilierten Headern vgl. Anhang C im Benutzerhandbuch.
#pragma inline
Syntax: #pragma inline
Beschreibung:
Diese Direktive ist äquivalent zur Kommandozeilenoption -B des Compilers oder der inline-Option der IDE. Sie teilt dem Compiler mit, dass der Quelltext Teile in Assemblersprache enthält.
Diese Zeile setzt man am besten an den Anfang des Quelltextes, weil der Compiler sich mit der Option -B selbst erneut startet, wenn er auf die Direktive #pragma inline stößt.
#pragma intrinsic
Syntax: #pragma intrinsic [-]funktions_name
Beschreibung:
Verwenden Sie #pragma intrinsic, um Kommandozeilenoptionen oder IDE-Optionen, die mit Inline-Funktionen zu tun haben, zu übergehen.
Wenn eine Intrinsinc-Funktion in Inline-Form benutzt werden soll, muss stets ein Prototyp für diese Funktion vor ihrer Verwendung ins Programm aufgenommen werden.
DDCHelp Hilfe zur Programmiersprache C Seite 31 von 606
Beispiele
Das folgende Beispiel bewirkt, dass der Compiler den Code für die Funktion strcpy als Teil Ihrer Funktion generiert:
#pragma intrinsic strcpy
Durch folgende Direktive wird der Compiler an letzterem gehindert:
#pragma intrinsic -strcpy
#pragma message
Syntax: #pragma message ("text" ["text"["text" ...]])
#pragma message text
Beschreibung:
Die Anweisung #pragma message dient dazu, vom Benutzer definierte Meldungen innerhalb des Programm-Codes zu spezifizieren.
Die erste (MSC-kompatible) Form verlangt, dass der Text aus mindestens einer String-Konstanten besteht und von runden Klammern eingeschlossen ist. Bei Verwendung der zweiten Form wird der auf die #pragma-Anweisung folgende Text für die Warnmeldung genommen. In jedem Fall werden Makro-Referenzen erweitert, bevor die Meldung angezeigt wird.
Benutzerdefinierte Meldungen werden standardmäßig angezeigt und können mit der IDE-Option Benutzerdefinierte Warnmeldungen ein- bzw. ausgeblendet werden. Diese Auswahlmöglichkeit entspricht dem Compiler-Schalter -wmsg.
Siehe auch:
#pragma warn
Präprozessoranweisungen
#pragma option
Syntax: #pragma option [optionen...]
Beschreibung:
Benutzen Sie #pragma option, wenn Sie Kommandozeilenoptionen gleich in Ihren Quelltext aufnehmen wollen.
optionen kann jede Kommandozeilenoption sein (mit Ausnahme der im nächsten Absatz angegebenen). In einer Direktive kann eine beliebige Anzahl von Optionen kombiniert werden. Alle umschaltbaren Optionen (wie etwa -a oder -K) können wie in der Kommandozeile ein- und ausgeschaltet werden. Bei diesen umschaltbaren Optionen können Sie auch einen Punkt hinter die Option setzen; dadurch wird sie auf den durch die Kommandozeile, die Konfigurationsdatei oder das Optionen-Menü eingestellten Wert gesetzt. Dies ermöglicht es Ihnen, eine Option vorübergehend zu ändern und danach wieder die alte Einstellung zu aktivieren, ohne sich merken zu müssen (oder überhaupt nur wissen zu müssen), welches die alte Einstellung war.
Folgende Optionen dürfen nicht bei #pragma option verwendet werden:
-B -c -dname
-Dname=string -edateiname -E
-Fx -h -ldateiname
-lexset -M -o
-P -Q -S
-T -Uname -V
-X -Y
DDCHelp Hilfe zur Programmiersprache C Seite 32 von 606
Sie können #pragma-, #include-, #define- und einige #if-Direktiven in folgenden Fällen verwenden:
Vor der Verwendung irgendeines Makronamens, der mit zwei Unterstrichen beginnt (und deshalb möglicherweise für ein vordefiniertes Makro steht), in einer #if-, #ifdef-, #ifndef- oder #elif -Direktive
Vor dem Auftreten des ersten echten Tokens (also der ersten C- oder C++ - Deklaration)
Bestimmte Kommandozeilenoptionen können nur vor den eben erwähnten Ereignissen in der Direktive #pragma option stehen, es sind dies die Optionen:
-Edateiname -f -i#
-m* -npfad -odateiname
-u -W -z
*
Andere Optionen können an jeder Stelle geändert werden. Die folgenden Optionen beeinflussen den Compiler nur dann, wenn sie zwischen Funktionen oder Objektdeklarationen geändert werden:
-1 -h -r
-2 -k -rd
-a -N -v
-ff -O -y
-G -p -Z
Die folgenden Optionen können jederzeit geändert werden und wirken sich sofort aus:
-A -gn -zE
-b -jn -zF
-C -K -zH
-d -wxxx
Außerdem kann ihnen auch ein Punkt (.) nachgestellt werden, um sie auf ihre in der Kommandozeile vorgegebene Einstellung zurückzusetzen. Für weitere Informationen vgl. die
#pragma saveregs
Syntax: #pragma saveregs
Beschreibung:
Das Pragma saveregs stellt sicher, dass eine huge-Funktion beim Eintritt in die Funktion keines der Prozessorregister verändert. Diese Direktive wird manchmal für Assembler-Code enthaltende Funktionen benötigt. Diese Direktive sollte unmittelbar vor der Funktionsdefinition stehen; sie gilt ausschließlich für diese Funktion.
#pragma warn
Syntax: #pragma warn [+|-|.]www
Beschreibung:
Das Pragma warn ermöglicht es Ihnen, bestimmte Kommandozeilenoptionen der Form -wxxx zu übergehen oder die Einstellung Warnungen im Dialogfenster Optionen/Compiler/Meldungen zu aktivieren.
Beispiele:
Wenn Ihr Quelltext die folgenden Direktiven enthält
#pragma warn +xxx
#pragma warn -yyy
#pragma warn .zzz
so wird die Warnung xxx ein- und die Warnung yyy ausgeschaltet. Die Warnung zzz wird auf die Einstellung gesetzt, die zu Beginn der Kompilierung der Datei gültig war.
DDCHelp Hilfe zur Programmiersprache C Seite 33 von 606
Siehe Kommandozeilenoptionen für eine vollständige Liste aller Warnungen und ihrer zugehörigen dreibuchstabigen Kürzel.
#undef
Syntax: #undef makro_name
Beschreibung:
Mit der Direktive #undef können Sie ein Makro außer Kraft setzen. Dabei wird eine vorher bestehende Verbindung zwischen Makroname und Token-Folge aufgelöst. Die Makrodefinition wird praktisch "vergessen" und der Makroname ist dann undefiniert. Innerhalb einer #undef-Zeile findet keine Makroerweiterung statt.
Der Status "definiert" bzw. "undefiniert" stellt eine wichtige Eigenschaft eines Bezeichners dar, unabhängig von seiner tatsächlichen Definition. Die Bedingungs-Direktiven #ifdef und #ifndef werden benutzt, um zu prüfen, ob ein Bezeichner momentan definiert ist oder nicht und bieten damit einen flexiblen Mechanismus zur Steuerung vieler Aspekte der Kompilierung.
Nachdem die Definition eines Makronamens aufgehoben worden ist, kann er mit #define neu definiert werden, wobei man die frühere oder eine andere Token-Folge verwenden kann.
Der Versuch, einen bereits definierten Makronamen erneut zu definieren, führt zu einer Warnung, falls die neue Definition nicht exakt Token für Token der existierenden entspricht. Wenn Definitionen in anderen Header-Dateien vorkommen können, ist folgende Strategie empfehlenswert:
#ifndef BLOCK_GROESSE
#define BLOCK_GROESSE 512
#endif
Die mittlere Zeile wird ignoriert, wenn BLOCK_GROESSE zur Zeit definiert ist. Ist BLOCK_GROESSE dagegen zur Zeit nicht definiert, so erfolgt die Definition nunmehr in der mittleren Zeile.
Es ist kein Semikolon (;) erforderlich, um eine Präprozessor-Direktive abzuschließen. Jedes Zeichen in der Token-Folge, einschließlich der Semikolons, taucht in der Makroerweiterung auf. Die Token-Folge endet mit dem ersten Zeilenvorschubzeichen, dem kein Backslash vorangeht. Jede Folge von Whitespace-Zeichen (einschließlich Kommentaren) in der Token-Folge wird durch ein einziges Leerzeichen ersetzt.
Beispiele #define BLOCK_GROESSE 512
.
.
.
#undef BLOCK_GROESSE
/* Das Verwenden von BLOCK_GROESSE ist ab hier unzulässig ("Unbekannter
Bezeichner") */
.
.
.
#define BLOCK_GROESSE 128 /* Neudefinition mit anderem Wert */
Siehe auch: #define
Präprozessor-Direktiven:
Verwenden der Kommandozeilenoptionen -D und -U
DDCHelp Hilfe zur Programmiersprache C Seite 34 von 606
Makros mit Parametern
Für die Definition eines Makros mit Parametern gilt die folgende Syntax:
#define makro_name(<argument_liste>) token_folge
Ein Komma innerhalb von runden Klammern in der Argumentliste wird als Teil des Arguments und nicht als Begrenzer des Arguments betrachtet.
Beachten Sie, dass kein Leerzeichen zwischen dem Makronamen und der runden Klammer ( zulässig ist. Die optionale argument_liste ist eine durch Kommas getrennte Aufzählung von Bezeichnern, ähnlich der Argumentliste einer C-Funktion. Jeder durch Kommas getrennten Bezeichner stellt ein formales Argument (Platzhalter) dar.
Ein solches Makro ruft man in nachfolgenden Programmteilen auf durch
makro_name<whitespace>(<liste_der_aktuellen_argumente>)
Die Syntax ist identisch mit der eines Funktionsaufrufs; tatsächlich sind auch viele Funktionen der C-Standardbibliothek in Wirklichkeit als Makros realisiert. Es gibt jedoch einige wichtige semantische Unterschiede, Seiteneffekte und mögliche "Fallgruben".
Die optionale liste_der_aktuellen_argumente muss exakt dieselbe Anzahl von durch Komma getrennten Token-Folgen (aktuelle Argumente genannt) enthalten wie die formale argument_liste in der #define-Zeile: Für jedes formale Argument muss ein aktuelles angegeben werden. Falls die Zahl der Argumente in beiden Listen unterschiedlich ist, wird eine Fehlermeldung ausgegeben.
Ein Makroaufruf bewirkt zwei Ersetzungsvorgänge. Zuerst werden der Makroname und die in Klammern eingeschlossenen Argumente durch die Token-Folge ersetzt. Danach werden alle in der Token-Folge auftretenden formalen Argumente durch die jeweiligen aktuellen Argumente aus liste_der aktuellen_argumente ersetzt.
Wie bei einfachen Makrodefinitionen erfolgt nun ein erneutes Durchsuchen, um etwaige eingebettete Makronamen zu finden und zu erweitern.
Siehe auch: Strings umwandeln mit #
Verschachteln von Klammern und Kommas
Seiteneffekte und andere Gefahren
Verwenden des Backslash (\) für Fortsetzungszeilen
Token verschmelzen mit ##
Verschachteln von Klammern und Kommas
Die liste_der_aktuellen_argumente darf verschachtelte runde Klammern enthalten, sofern sie korrekt paarig sind. Außerdem dürfen Kommas innerhalb von Anführungszeichen oder runden Klammern stehen, sie werden dann nicht als Argument-Trennzeichen interpretiert.
Token verschmelzen mit ##
Sie können zwei Token verschmelzen, indem Sie die Zeichen ## (plus optionalem Whitespace auf beiden Seiten) dazwischensetzen. Der Präprozessor entfernt Whitespace und ## und verbindet die beiden einzelnen Token zu einem neuen. Auf diese Weise können Sie zum Beispiel Bezeichner "konstruieren".
DDCHelp Hilfe zur Programmiersprache C Seite 35 von 606
Strings umwandeln mit #
Das Zeichen # kann vor ein formales Makroargument gesetzt werden, um das aktuelle Argument nach dem Ersetzen in einen String umzuwandeln.
Verwenden des Backslash (\) für Fortsetzungszeilen
Eine lange Token-Folge kann mit Hilfe des Backslash-Zeichens (\) über eine Zeile hinaus ausgedehnt werden. Der Backslash und das nachfolgende Zeilenvorschub-Zeichen werden entfernt, um die für die Erweiterung erforderliche "echte" Token-Folge zu erhalten.
Seiteneffekte und andere Gefahren
Die Ähnlichkeiten zwischen Funktions- und Makroaufrufen verdecken oft deren Unterschiede. Bei einem Makroaufruf gibt es keine eingebaute automatische Typprüfung, so dass eine Nichtübereinstimmung der Datentypen von formalen und aktuellen Argumenten ohne direkte Fehlermeldung äußerst merkwürdige, schwer nachzuvollziehende Ergebnisse bewirken kann. Makroaufrufe können auch zu unerwünschten Seiteneffekten führen, insbesondere dann, wenn ein aktuelles Argument mehrmals ausgewertet wird.
Header-Datei: Suche danach bei der Form <header_name>
Die Form <header_name> spezifiziert eine der Standard-Include-Dateien. Sie wird nacheinander in jedem der Include-Verzeichnisse (in der Reihenfolge, in der diese definiert worden sind) gesucht. Wenn die Datei in keinem der Standard-Verzeichnisse gefunden wird, erfolgt eine Fehlermeldung.
Header-Datei: Suche danach bei der Form "header_name"
Die Form "header_name" spezifiziert eine vom Programmierer bereitgestellte Include-Datei. Sie wird zuerst im aktuellen Verzeichnis (normalerweise das Verzeichnis mit den gerade kompilierten Dateien) gesucht. Wird die Datei dort nicht gefunden, so wird die Suche in den Include-Verzeichnissen wie bei der Form <header_name> fortgesetzt.
Globale Variablen
Die meisten Compiler stellen Ihnen für viele allgemeine Standardgrößen vordefinierte globale Variablen wie Kalenderdatum und Uhrzeit, Kommandozeilenparameter usw. zur Verfügung. Eine Liste der veralteten Variablen finden Sie unter dem Stichwort Veraltete globale Variablen.
_8087 _osminor
_argc _osversion
_argv _psp
_ctype _sys_errlist
_daylight _sys_nerr
_directvideo _threadid
_doserrno ___throwExceptionName
DDCHelp Hilfe zur Programmiersprache C Seite 36 von 606
_environ __throwFileName
_errno __throwLineNumber
_floatconvert _timezone
_fmode _tzname
_new_handler _version
_osmajor _wscroll
_8087
Syntax extern int _8087;
Header-Datei dos.h
Beschreibung
In einem 16-Bit-Windows-Programm ist der Wert gleich 1, wenn ein Koprozessor entdeckt wird.
Diese Variable wird durch die automatische Erkennung des Startcodes auf einen Wert ungleich 0 gesetzt, wenn ein installierter mathematischer Koprozessor erkannt wurde:
_8087 Mathematischer Wert Koprozessor
1 8087
2 80287
3 80387
0 (nicht erkannt)
Die automatische Erkennungslogik kann außer Kraft gesetzt werden, indem der
Umgebungsvariablen 87 der Wert YES oder NO zugewiesen wird. Die Befehle hierzu sind: SET
87= YES oder SET 87=NO; vor und nach dem Gleichheitszeichen darf dabei kein Leerzeichen
stehen. Ist die Umgebungsvariable korrekt gesetzt, so wird die globale Variable _8087 entsprechend gesetzt.
_argc
Syntax extern int _argc;
Header-Datei dos.h
Beschreibung
_argc enthält die als argc an main übergebene Anzahl der Kommandozeilenparameter.
_argv
Syntax extern char **_argv;
Header-Datei dos.h
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 37 von 606
_argv zeigt auf ein String-Array mit den einzelnen Kommandozeilenparametern, die main beim Programmstart als Elemente von argv[] übergeben wurden.
/* Beispiel für _argc und _argv */
#include <iostream.h>
#include <dos.h> // Globale _arg-Werte holen
void func() {
cout << "argc= " << _argc << endl;
for (int i = 0; i < _argc; ++i)
cout << _argv[i] << endl;
}
void main(int argc, char ** argv) {
func(); // DIESE FUNKTION KENNT ALLE ARGUMENTE VON main()
}
_ctype
Syntax extern char _ctype[];
Header-Datei ctype.h
Beschreibung
_ctype ist ein Array mit Zeichenattributinformationen. Der Index ist der ASCII-Wert + 1. Jeder Eintrag ist ein Satz von Bits, die das Zeichen beschreiben.
Dieses Array wird nur von Routinen verwendet, die von der Locale-Einstellung "C" betroffen sind (wie etwa isdigit, isprint usw.).
_daylight
Syntax extern int _daylight;
Header-Datei time.h
Beschreibung
Die Variable wird zusammen mit den Funktionen für Uhrzeit und Datum verwendet. _daylight muss von tzset, ftime oder localtime auf den Wert 1 gesetzt werden, wenn die Sommerzeit berücksichtigt werden soll; 0 steht für die Standardzeit.
Siehe auch _timezone
_tzname
_directvideo
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 38 von 606
extern int _directvideo;
Header-Datei conio.h
Beschreibung
Über _directvideo wird die Entscheidung getroffen, ob Bildschirmausgaben Ihres Programms (z.B. von cputs) direkt in den Bildschirmspeicher schreiben (_directvideo = 1) oder BIOS-Funktionen verwenden (_directvideo = 0).
Die Voreinstellung _directvideo = 1 (die Ausgabe schreibt in den Bildschirmspeicher) sollte nur verwendet werden, wenn die Video-Hardware Ihres Systems 100% kompatibel zu einer IBM-Grafikkarte ist. Mit _directvideo = 0 benötigen Sie nur ein System, das IBM-BIOS-kompatibel ist.
_directvideo sollte nur in Textanwendungen, nicht aber in 16-Bit-Windows, Win32s- oder Win32-GUI-Anwendungen verwendet werden.
_environ
Syntax extern char ** _environ;
Header-Datei dos.h
Beschreibung
Die Variable _environ ist ein Array von Zeigern auf Strings, über die Umgebungsvariablen des Betriebssystems gelesen und geändert werden können. Jeder String hat die Form
U_Var = Wert
wobei U_Var der Name einer Umgebungsvariable (wie z.B. PATH) und Wert der Stringwert (wie z.B. C:\BIN;C:\DOS) ist, der U_Var zugewiesen wird. Der String Wert kann auch leer sein.
Beim Start eines Programms werden die Umgebungsvariablen des Betriebssystems direkt an das Programm übergeben. Der Inhalt von env, dem dritten Parameter von main, stimmt mit dem Anfangswert von _environ überein.
Auf das Array der Umgebungsvariablen kann auch über getenv zugegriffen werden. Für Änderungen, Löschungen oder Hinzufügungen von Umgebungsvariablen sollten Sie jedoch ausschließlich die Funktion putenv verwenden, da sich die Größe und die Adresse des Array ändern kann, _environ jedoch automatisch angepasst wird und stets auf das Array zeigt.
Siehe auch getenv
putenv
_errno
Syntax extern int _errno;
Header-Datei errno.h
Beschreibung
_errno wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung einer Bibliotheksroutine ein Fehler aufgetreten ist.
Bei einem Fehler nach dem Aufruf einer mathematischen Funktion oder einer Systemfunktion wird
DDCHelp Hilfe zur Programmiersprache C Seite 39 von 606
errno gesetzt, um den Fehlertyp anzuzeigen. Manchmal sind _errno und _doserrno äquivalent, in anderen Fällen enthält _errno, anders als _doserrno, nicht den aktuellen Fehlercode des Betriebssystems. Andererseits setzen bestimmte Fehler nur errno, nicht aber _doserrno.
Beispiel: _errno, _doserrno, _sys_errlist und _sys_nerr
/* Anzeigen der Systemfehler. */
#include <errno.h>
#include <stdio.h>
extern char *_sys_errlist[];
main()
{
int i = 0;
while(_sys_errlist[i++]) printf("%s\n", _sys_errlist[i]);
return 0;
}
_doserrno
Syntax extern int _doserrno;
Header-Datei errno.h
Beschreibung
_doserrno bildet viele Fehlercodes des Betriebssystems auf errno ab; _doserrno wird von perror aber nicht direkt benutzt.
Wenn ein Systemaufruf des Betriebsystems mit einem Fehler endet, wird der entsprechende Fehlercode in _doserrno gespeichert. Die zusätzlich und gleichzeitig mitgeführte Fehlervariable errno stammt von UNIX.
In der folgenden Liste finden Sie die DOS-Fehlercodes, auf die _doserrno gesetzt werden kann. (Dieser _doserrno-Wert kann teilweise über errno auf eine äquivalente Fehlermeldung in _sys_errlist abgebildet werden)
Konstante DOS-Fehlercode
E2BIG Argumentenliste zu lang
EACCES Zugriff verweigert
EACCES Ungültiger Wert für Zugriff
EACCES Ist eingestelltes Verzeichnis
EBADF Handle nicht definiert
EFAULT Reserviert
EINVAL Ungültige Daten
EINVAL Ungültige Funktion
EMFILE Zu viele offene Dateien
ENOENT Datei/Verzeichnis nicht gefunden
ENOEXEC exec-Formatfehler
ENOMEM MCB zerstört
ENOMEM Nicht genügend Speicherplatz
ENOMEM Speicherblock-Adresse ungültig
EXDEV Ungültige Laufwerksangabe
EXDEV Ziel- und Quell-Laufwerk verschieden
DDCHelp Hilfe zur Programmiersprache C Seite 40 von 606
Weitere Informationen über die DOS-Fehlercodes finden Sie im DOS Referenzhandbuch.
_sys_errlist
Syntax extern char * _sys_errlist[ ];
Header-Datei errno.h
Beschreibung
_sys_errlist wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung einer Bibliotheksroutine ein Fehler aufgetreten ist.
Das Array mit den Strings, die die Fehlermeldungen enthalten, steht Ihnen über die Variable _sys_errlist zur Verfügung und erleichtert Ihnen so die Formatierung von Meldungen. Benutzen Sie errno als Index in dieses Array, um den zur aktuellen Fehlernummer gehörenden String aufzufinden. Diese Strings enthalten keine Zeilenvorschubzeichen (\n).
In der folgenden Tabelle finden Sie die in _sys_errlist gespeicherten Werte. Um das Lesen zu erleichtern, ist die Liste alphabetisch sortiert. Die numerische Reihenfolge finden Sie in der Header-Datei errno.h.
Konstante 16-bit Bedeutung 32-bit Bedeutung
E2BIG Argumentliste zu lang Argumentliste zu lang
EACCES Zugriff verweigert Zugriff verweigert
EBADF Ungültige Dateinummer Ungültige Dateinummer
ECONTR Speicher-Kontrollblock zerstört Speicher-Kontrollblock zerstört
ECURDIR Löschversuch des Arbeitsverzeichnisses Löschversuch des Arbeitsverzeichnisses
EDEADLOCK Versuch mehrfacher Sperrung
EDOM Argument außerhalb des Rechenbereichs Argument außerhalb des Rechenbereichs
EEXIST Datei existiert bereits Datei existiert bereits
EFAULT Unbekannter Fehler Unbekannter Fehler
EINTR Unterbrechung eines Funktionsaufrufs
EINVACC Ungültiger Zugriffscode Ungültiger Zugriffscode
EINVAL Ungültiges Argument Ungültiges Argument
EINVDAT Ungültige Daten Ungültige Daten
EINVDRV Ungültiges Laufwerk angegeben Ungültiges Laufwerk angegeben
EINVENV Ungültige Umgebung Ungültige Umgebung
EINVFMT Ungültiges Format Ungültiges Format
EINVFNC Ungültige Funktionsnummer Ungültige Funktionsnummer
EINVMEM Speicherblockadresse ungültig Speicherblockadresse ungültig
EIO Ein-/Ausgabefehler
EMFILE Zu viele offene Dateien Zu viele offene Dateien
ENAMETOOLONG Dateiname zu lang
ENFILE Zu viele Dateien gleichzeitig geöffnet
ENMFILE Keine weiteren Dateieinträge Keine weiteren Dateieinträge
ENODEV Unbekanntes Gerät Unbekanntes Gerät
ENOENT Datei/Verzeichnis nicht gefunden Datei/Verzeichnis nicht gefunden
ENOEXEC exec-Formatfehler exec-Formatfehler
ENOFILE Datei/Verzeichnis nicht gefunden Datei/Verzeichnis nicht gefunden
ENOMEM Nicht genügen Speicherplatz Nicht genügen Speicherplatz
ENOPATH Pfad nicht gefunden Pfad nicht gefunden
ENOSPC Nicht genügend Speicherplatz auf externem Medium
ENOTSAM Nicht dasselbe Gerät Nicht dasselbe Gerät
DDCHelp Hilfe zur Programmiersprache C Seite 41 von 606
ENXIO Unbekanntes Gerät bzw. ungültige Adresse
EPERM Unerlaubte Operation
EPIPE Unterbrochene Pipe
ERANGE Ergebnis außerhalb des Rechenbereichs Ergebnis außerhalb des Rechenbereichs
EROFS Dateisystem nur zum Lesen
ESPIPE Ungültige Suche
EXDEV RENAME kann nicht kopieren RENAME kann nicht kopieren
EZERO Kein Fehler Kein Fehler
Weitere Informationen über die DOS-Fehlercodes finden Sie im DOS Referenzhandbuch.
_sys_nerr
Syntax extern int _sys_nerr;
Header-Datei errno.h
Beschreibung
_sys_nerr wird von perror bei der Ausgabe von Fehlermeldungen verwendet, wenn bei der Ausführung einer Bibliotheksroutine ein Fehler aufgetreten ist.
Diese Variable enthält die Anzahl der Fehlermeldungs-Strings in _sys_errlist.
_floatconvert
Syntax extern int _floatconvert;
Header-Datei stdio.h
Beschreibung
Die Ausgabe von Gleitkommawerten macht das Linken der von printf, scanf etc. verwendeten Konvertierungsroutinen erforderlich. Zur Verringerung der Programmgröße werden diese Konvertierungsroutinen nicht automatisch gelinkt. Dies geschieht nur dann, wenn Ihr Programm eine mathematische Routine benutzt oder die Adresse einer Gleitkommazahl ausgewertet wird. Ist beides nicht der Fall, dann können die fehlenden Konvertierungsroutinen zu einem Laufzeitfehler führen
Beispiel: _floatconvert
/* VORBEREITUNG DER AUSGABE VON FLIEßKOMMAZAHLEN. */
#include <stdio.h>
#pragma extref _floatconvert
void main() {
printf("d = %lf\n", 1);
}
_fmode
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 42 von 606
extern int _fmode;
Header-Datei fcntl.h
Beschreibung
_fmode legt fest, ob Dateien im Text- oder im Binärmodus geöffnet und übersetzt werden. Die Voreinstellung für _fmode ist O_TEXT, wodurch Dateien im Textmodus gelesen werden. Um Dateien im Binärmodus zu öffnen und zu lesen, muss _fmode auf O_BINARY gesetzt werden. Die Konstanten O_TEXT und O_BINARY sind in fcntl.h definiert.
Im Textmodus werden bei der Eingabe CR/LF-Kombinationen (Wagenrücklauf/Zeilenvorschub) in ein einzelnes LF-Zeichen übersetzt. Bei der Ausgabe werden umgekehrt einzelne LF-Zeichen in CR/LF-Kombinationen übersetzt.
Im Binärmodus findet keinerlei Übersetzung statt.
Der durch _fmode voreingestellte Modus kann durch Angabe eines t (für Textmodus) oder b (für Binärmodus) als Parameter type bei den Bibliotheksfunktionen fopen, fdopen und freopen geändert werden. Auch beim Aufruf der Funktion open kann durch Angabe einer der beiden Konstanten O_BINARY oder O_TEXT im Parameter access Binärmodus bzw. Textmodus für die zu öffnende Datei explizit gewählt werden.
_new_handler
Syntax typedef void (*pvf)();
pvf _new_handler;
Header-Datei new.h
Beschreibung
_new_handler beinhaltet einen Zeiger auf eine Funktion, der keine Parameter übergeben werden und die einen Rückgabewert vom Typ void hat. Wenn der Operator new() den benötigten Speicherplatz nicht reservieren kann, wird die Funktion aufgerufen, auf die _new_handler zeigt. Nach der Rückkehr von dieser Funktion wird erneut versucht, den Speicherplatz zu reservieren. Per Voreinstellung weist _new_handler auf eine Funktion, die das Programm beendet. Das Programm kann diesen Handler durch eine Funktion ersetzen, die versucht, Speicherplatz freizugeben. Dies kann über eine direkte Zuweisung an _new_handler oder durch den Aufruf der Funktion _set_new_handler geschehen. set_new_handler liefert einen Zeiger auf den früheren Handler zurück.
Alternativ können Sie auch die Funktion set_new_handler wie folgt verwenden:
pvf set_new_handler(pvf p);
_new_handler wird primär aus Kompatibilitätsgründen zur C++ Version 1.2 von AT&T bereitgestellt. In den meisten Fällen erreicht man diese Funktionalität besser durch Überladen von des Operators new().
_osmajor
Syntax extern unsigned char _osmajor;
Header-Datei dos.h
Beschreibung
_osmajor beinhaltet die Hauptversionsnummer des Betriebssystems. Bei Verwendung der DOS-Version 3.2 ist beispielsweise der Wert von _osmajor auf 3 gesetzt.
DDCHelp Hilfe zur Programmiersprache C Seite 43 von 606
Diese Variablen sind hilfreich, wenn ein Programm unter DOS-Versionen 2.x und 3.x laufen soll. Einige Bibliotheksfunktionen verhalten sich in Abhängigkeit von der DOS-Versionsnummer unterschiedlich, andere funktionieren nur unter DOS 3.x. Vergleichen Sie hierzu beispielsweise die Beschreibungen von _rtl_pen, creatnew und ioctl
Siehe auch _osminor
_osversion
_version
_osminor
Syntax extern unsigned char _osminor;
Header-Datei dos.h
Beschreibung
_osminor beinhaltet die Hauptversionsnummer des Betriebssystems. Bei Verwendung der DOS-Version 3.2 ist beispielsweise der Wert von _osminor auf 20 gesetzt.
Diese Variablen sind hilfreich, wenn ein Programm unter DOS-Versionen 2.x und 3.x laufen soll. Einige Bibliotheksfunktionen verhalten sich in Abhängigkeit von der DOS-Versionsnummer unterschiedlich, andere funktionieren nur unter DOS 3.x. Vergleichen Sie hierzu beispielsweise die Beschreibungen von _rtl_open, creatnew und ioctl
Siehe auch _osmajor
_osversion
_version
_osversion
Syntax extern unsigned _osversion;
Header-Datei dos.h
Beschreibung
_osversion enthält die Nummer der Betriebssystemversion, die Hauptversionsnummer im höherwertigen Byte und die Nebenversionsnummer im niederwertigen Byte. Bei 32-Bit-Anwendungen bezieht sich diese Anordnung auf das niederwertige Wort. Bei der DOS-Version x.y ist x die Haupt- und y die Nebenversionsnummer.
_osversion besitzt die gleiche Funktionalität wie _version.
Siehe auch _osmajor
_osminor
DDCHelp Hilfe zur Programmiersprache C Seite 44 von 606
_psp
Syntax extern unsigned int _psp;
Header-Dateien dos.h
process.h
stdlib.h
Beschreibung
Die Variable _psp enthält die (normalisierte) Segmentadresse des Programmsegmentpräfixes beim Start eines Programms - eines von DOS reservierten Bereichs, der interne Informationen wie die höchste verfügbare Speicheradresse, Kommandozeilenparameter und anderes enthält.
Hinweis: _psp kann in DLLs nicht verwendet werden.
__throwExceptionName
Syntax extern char * __throwExceptionName;
Header-Datei except.h
Beschreibung
Diese globalen Variablen werden verwendet, um den Namen und die Position einer ausgelösten Exception zu ermitteln. Jede Variable enthält einen druckbaren String.
Siehe auch __throwFileName
__throwLineNumber
__throwFileName
Syntax extern char * __throwFileName;
Header-Datei except.h
Beschreibung
Diese globalen Variablen werden verwendet, um den Namen einer ausgelösten Exception zu ermitteln. Die Variable enthält einen druckbaren String.
Damit der Dateiname über __throwFileName ermittelt werden kann, muss das Modul mit der Compileroption -xp compiliert werden.
Siehe auch __throwExceptionName
__throwLineNumber
DDCHelp Hilfe zur Programmiersprache C Seite 45 von 606
__throwLineNumber
Syntax extern char * __throwLineNumber;
Header-Datei except.h
Beschreibung
Diese globalen Variablen werden verwendet, um die Position einer ausgelösten Exception zu ermitteln. Die Variable enthält einen druckbaren String.
Damit die Zeilennummer mit der Hilfe von __throwLineNumber ermittelt werden kann, muss das
Modul mit der Compileroption -xp compiliert werden.
Siehe auch __throwExceptionName
__throwFileName
_threadid
Syntax extern long _threadid;
Header-Datei stddef.h
Beschreibung
_threadid enthält die ID des aktuell ausgeführten Thread. _threadid ist als Makro implementiert und sollte nur durch Einbinden der Header-Datei stddef.h deklariert werden.
_timezone
Syntax extern long _timezone;
Header-Datei time.h
Beschreibung
Die Variable _timezone wird von den Funktionen für Uhrzeit und Datum verwendet und von der Funktion tzset berechnet. _timezone ist ein long-Wert, der den Unterschied zwischen der Greenwich Mean Time und der lokalen Zeit in Sekunden wiedergibt.
Siehe auch _daylight
_tzname
DDCHelp Hilfe zur Programmiersprache C Seite 46 von 606
_tzname
Syntax extern char * _tzname[2]
Header-Datei time.h
Beschreibung
Die globale Variable tzname ist ein Array von Zeigern auf Strings, die Abkürzungen von Zeitzonennamen enthalten. tzname[0] zeigt auf einen String mit drei Zeichen, der den Zeitzonennamen aus der Umgebungsvariable TZ enthält. tzname[1] zeigt auf einen String mit drei Zeichen, der den Zeitzonennamen der Sommerzeit aus der Umgebungsvariable TZ enthält. Wenn die Sommerzeit-Konvertierung nicht benutzt wird, zeigt tzname[1] auf einen leeren String.
Siehe auch _daylight
_timezone
_version
Syntax extern unsigned _version;
Header-Datei dos.h
Beschreibung
_version enthält die Nummer der Betriebssystemversion, die Hauptversionsnummer im höherwertigen Byte und die Nebenversionsnummer im niederwertigen Byte. Bei 32-Bit-Anwendungen bezieht sich diese Anordnung auf das niederwertige Wort. Bei der DOS-Version x.y ist x die Haupt- und y die Nebenversionsnummer.
Siehe auch _osmajor
_osminor
_osversion
_wscroll
Syntax extern int _wscroll
Header-Datei conio.h
Beschreibung
Die Variable _wscroll ist ein Flag für Bildschirm-Ein-/Ausgabefunktionen. Die Voreinstellung ist 1. Setzen Sie _wscroll auf 0, so ist der Bildlauf ausgeschaltet. Damit verhindern Sie unerwünschten Bildlauf, wenn Sie Zeichen in der unteren rechten Ecke eines Fensters ausgeben wollen.
_wscroll sollte nur in Textanwendungen oder unter EasyWin verwendet werden, nicht aber in 16-Bit-Windows, Win32s- oder Win32-GUI-Anwendungen.
DDCHelp Hilfe zur Programmiersprache C Seite 47 von 606
Veraltete globale Variablen
Die folgenden globalen Variablen wurden umbenannt, um mit der ANSI-Namensgebung übereinzustimmen. Sie sollten stets die neuen Namen verwenden. Wenn Sie Bibliotheken linken, die mit Header-Dateien von älteren Versionen compiliert wurden, erhalten Sie die Meldung
Error: undefined external <varname> in module <LIBNAME
Ein Bibliotheksmodul, das einen solchen Fehler verursacht, sollte neu compiliert werden. Ist eine Neucompilierung jedoch nicht möglich, so können Sie OBSOLETE.LIB hinzufügen und die externen Variablennamen verfügbar machen.
Die folgenden globalen Variablen wurden umbenannt:
Alter Name Neuer Name Header-Datei
daylight _daylight time.h
directvideo _directvideo conio.h
environ _environ stdlib.h
sys_errlist _sys_errlist errno.h
sys_nerr _sys_nerr errno.h
timezone _timezone time.h
tzname _tzname time.h
Siehe auch Veraltete Funktionen
Globale Datenstrukturen
_mexcep (typedef)
Definiert in:
math.h
Beschreibung:
Der Aufzählungstyp _mexcep definiert die folgenden Konstanten, die mögliche mathematische
Fehler bezeichnen.
_mexcep-
Konstante Mathematischer Fehler
DOMAIN Argument außerhalb des Definitionsbereichs einer Funktion.
Beispiel: log(-1)
SING Argument würde auf ein singuläres Ergebnis führen.
Beispiel: pow(0, -2)
OVERFLOW Argument würde auf ein Funktionsergebnis > MAXDOUBLE führen.
Beispiel: exp(1000)
UNDERFLOW Argument würde auf ein Funktionsergebnis < MINDOUBLE führen.
DDCHelp Hilfe zur Programmiersprache C Seite 48 von 606
Beispiel: exp(-1000)
TLOSS Argument würde auf ein Funktionsergebnis ohne eine einzige signifikante
Ziffer führen.
Beispiel: sin(10**70)
Die symbolischen Konstanten MAXDOUBLE und MINDOUBLE sind in VALUES.H definiert.
Siehe auch
_matherr
div_t und ldiv_t (typedef struct)
Definiert in:
stdlib.h
Syntax: typedef struct{
int quot; /* quotient */
int rem; /* remainder */
} div_t;
Beschreibung:
Der Typ div_t ist eine Struktur aus int-Werten, die von div. benutzt wird.
Syntax: typedef struct{
long int quot; /* Quotient */
long int rem; /* Rest */
} ldiv_t;
Beschreibung:
Der Typ ldiv_t definiert eine Struktur aus long-Werten, die von ldiv. benutzt wird.
jmp_buf (typedef struct)
Definiert in:
setjmp.h
Syntax: typedef struct{
unsigned j_sp, j_ss;
unsigned j_flag, j_cs;
unsigned j_ip, j_bp;
unsigned j_di, j_es;
unsigned j_si, j_ds;
} jmp_buf[1];
Beschreibung:
Der Typ jmp_buf definiert einen Puffer, der zum Retten und Wiederherstellen des Task-Status
eines Programms dient.
DDCHelp Hilfe zur Programmiersprache C Seite 49 von 606
FILE (typedef struct)
Definiert in:
stdio.h
Syntax typedef struct{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer, *curp;
unsigned istemp;
short token;
} FILE;
Beschreibung:
Der Typ FILE definiert eine Struktur, die einen Dateisteuerblock repräsentiert.
dosSearchInfo (typedef struct)
Definiert in:
dos.h
Syntax: typedef struct{
char drive;
char pattern [13];
char reserved [7];
char attrib;
short time;
short date;
long size;
char nameZ [13];
} dosSearchInfo;
atexit_t (type)
Definiert in:
stdlib.h
Syntax: typedef void (* atexit_t)(void);
Beschreibung:
Der Typ atexit_t definiert den Typ einer Exit-Funktion, die an atexit übergeben wird.
size_t (type)
Definiert in:
alloc.h
mem.h
stddef.h
stdio.h
DDCHelp Hilfe zur Programmiersprache C Seite 50 von 606
stdlib.h
string.h
Beschreibung:
Der Typ size_t ist für Größenangaben von Speicherobjekten und für Wiederholungszähler
bestimmt.
ptrdiff_t (type)
Definiert in:
alloc.h
mem.h
stddef.h
Beschreibung:
Der Typ ptrdiff_t ist für Zeigerdifferenzen bestimmt.
fpos_t (type)
Definiert in:
stdio.h
Beschreibung:
Der Typ fpos_t ist für Datei(positions)zeiger bestimmt.
time_t (type)
Definiert in:
time.h
sys\types.h
Beschreibung:
Der Typ time_t ist für Werte, die Zeitangaben repräsentieren, bestimmt.
clock_t (type)
Definiert in:
time.h
Beschreibung:
Die Konstante CLK_TCK definiert die Anzahl von Timer-Ticks pro Sekunde. Der Typ clock_t
entspricht dem Rückgabewert der Funktion clock bestimmt, der die verstrichene Zeit, gemessen in
Timer-Ticks, angibt.
sig_atomic_t (type)
Definiert in:
signal.h
DDCHelp Hilfe zur Programmiersprache C Seite 51 von 606
Beschreibung:
Datentyp eines Objekts, auf das als kleinste ("atomare") Einheit zugegriffen werden kann.
wchar_t (type)
Definiert in:
stddef.h
stdlib.h>
Beschreibung:
Datentyp für Wide-Character-Konstanten (nur in C gültig).
Eine Wide-Character-Konstante ist einer Zeichenkonstante mit vorangestelltem Buchstaben L.
ftime
Header: IO.H
Zeit und Datum einer Datei. Wird von den Funktionen getftime und setftime verwendet.
unsigned ft_tsec : 5; /* zwei Sekunden */
unsigned ft_min : 6; /* Minuten */
unsigned ft_hour : 5; /* Stunden */
unsigned ft_day : 5; /* Tage */
unsigned ft_month : 4; /* Monate */
unsigned ft_year : 7; /* Jahr - 1980 */
};
_exception und _exceptionl
Header: MATH.H
Das Format von Fehlerinformationen für Mathematikroutinen.
Die Struktur _exception wird von _matherr benutzt:
struct _exception {
int type;
char *name;
double arg1, arg2, retval;
};
Die Struktur _exceptionl wird von _matherrl benutzt:
struct _exceptionl {
int type;
char *name;
long double arg1, arg2, retval;
};
Element Was es darstellt (oder für was es steht)
type Der Typ des aufgetretenen mathematischen Fehlers; ein Aufzählungstyp, der in
typedef _mexcep definiert ist.
name Ein Zeiger auf einen null-terminierten String, der den Namen der Funktion der
Mathematikbibliothek enthält, bei der der Fehler auftrat.
arg1, Die (an die Funktion übergebenen) Argumente, die den Fehler verursacht haben.
arg2 Wenn nur ein Argument an die Funktion übergeben wurde, wird es in arg1
gespeichert.
DDCHelp Hilfe zur Programmiersprache C Seite 52 von 606
retval Der Standardrückgabewert für matherr; Sie können diesen Wert verändern.
complex und _complexl
Header: MATH.H
Komplexe Zahlenrepräsentation.
Die Struktur complex wird von der komplexen Funktion cabs verwendet.
struct complex {
double x, y;
};
Die Struktur _complexl wird von der komplexen long double-Funktion cabsl. verwendet.
struct _complexl {
long double x, y;
};
x ist der Realteil und y ist der Imaginärteil.
tm
Header: TIME.H
Eine Struktur, die die aufgeteilte Zeit definiert.
Sie wird von den Funktionen asctime, gmtime, localtime, mktime und strftime verwendet.
struct tm {
int tm_sec; /* Sekunden */
int tm_min; /* Minuten */
int tm_hour; /* Stunde (0--23) */
int tm_mday; /* Tag des Monats (1--31) */
int tm_mon; /* Monat (0--11) */
int tm_year; /* Jahr (Kalenderjahr abzüglich 1900) */
int tm_wday; /* Wochentag (0 bis 6; Sonntag = 0) */
int tm_yday; /* Tag im Jahr (0 bis 365) */
int tm_isdst; /* 0, wenn Sommerzeit nicht vorliegt) */
};
timeb
Header: SYS\TIMEB.H
Aktuelle Zeitinformation, die von der Funktion ftime gefüllt wird.
struct timeb {
long time ; /* Sekunden seit 00:00:00, 1/1/70, GMT */
short millitm ; /* Bruchteil einer Sekunde (in Millisekunden) */
short timezone ; /* Differenz zwischen lokaler Zeit und GMT */
short dstflag ; /* 0, wenn Sommerzeit nicht vorliegt */
};
Die Zeitzone wird in Richtung Westen von GMT aus berechnet.
ftime erhält dieses Feld von timezone,, welche durch tzset gesetzt wird.
DDCHelp Hilfe zur Programmiersprache C Seite 53 von 606
stat
Header: SYS\STAT.H
Eine Struktur mit Informationen über eine Datei oder ein Verzeichnis. Wird von den Funktionen
fstat und stat verwendet.
struct stat {
short st_dev, st_ino;
short st_mode, st_nlink;
int st_uid, st_gid;
short st_rdev;
long st_size, st_atime;
long st_mtime, st_ctime;
};
Element Was es darstellt
st_dev Gerätenummer der Diskette/Platte, die die Datei oder das Datei-Handle enthält,
wenn sich die Datei auf dem Datenträger befindet.
st_mode Bit-Maske mit Informationen über den Dateimodus der offenen Datei.
st_nlink Gesetzt auf die Integer-Konstante 1
st_rdev Das Gleiche wie st_dev
st_size Größe der geöffneten Datei in Bytes
st_atime Zeitpunkt der letzten Änderung an der geöffneten Datei
st_mtime Dasselbe wie st_atime.
st_ctime Dasselbe wie st_atime
st_ino Diese Elemente enthalten Werte, die unter DOS keine Bedeutung haben.
st_uid
st_gid
ffblk
Header: DIR.H
Kontrollblockstruktur der DOS-Datei.
struct ffblk {
char ff_reserved[21]; /* Reserviert durch DOS */
char ff_attrib; /* Attribut gefunden */
int ff_ftime; /* Dateizeit */
int ff_fdate; /* Dateidatum */
long ff_fsize; /* Dateigröße */
char ff_name[13]; /* Gefundener Dateiname */
};
Bemerkungen
ff_ftime und ff_fdate sind 16-Bit-Strukturen, die in Bit-Felder aufgeteilt sind, um sich auf das
aktuelle Datum und Uhrzeit zu beziehen.
Die Struktur dieser Felder wurde durch DOS festgesetzt.
Siehe auch
findfirst
ftime structure
find_t structure
DDCHelp Hilfe zur Programmiersprache C Seite 54 von 606
fcb
Header: DOS.H
Die Struktur der MS-DOS-Dateikontrollblöcke.
struct fcb {
char fcb_drive;
char fcb_name[8], fcb_ext[3];
short fcb_curblk, fcb_recsize;
long fcb_filsize;
short fcb_date;
char fcb_resv[10], fcb_currec;
long fcb_random;
};
xfcb
Header: DOS.H
Die erweiterte MS-DOS-Dateikontrollblock-Struktur.
struct xfcb {
char xfcb_flag;
char xfcb_resv[5];
char xfcb_attr;
struct fcb xfcb_fcb;
};
dfree
Header: DOS.H
Die Struktur der Information, die von der Funktion getdfree zurückgegeben wird.
struct dfree {
unsigned df_avail; /* Verfügbare Cluster */
unsigned df_total; /* Totale Cluster */
unsigned df_bsec; /* Bytes pro Sektor */
unsigned df_sclus; /* Sektoren pro Cluster */
};
fatinfo
Header: DOS.H
Die Struktur für Informationen der Dateizuweisungstabelle (file allocation table, FAT), die durch die
Funktionen getfat und getfatd gefüllt wird.
struct fatinfo {
char fi_sclus; /* Sektoren pro Cluster */
char fi_fatid; /* Das FAT-id-Byte */
int fi_nclus; /* Zahl von Clustern */
int fi_bysec; /* Bytes pro Sektor */
};
DDCHelp Hilfe zur Programmiersprache C Seite 55 von 606
time
Header: DOS.H
Struktur der Zeit, wie sie von den folgenden Funktionen verwendet wird:
dostounix
gettime
settime
unixtodos
struct time {
unsigned char ti_min; /* Minuten */
unsigned char ti_hour; /* Stunden */
unsigned char ti_hund; /* Hundertstel Sekunden */
unsigned char ti_sec; /* Sekunden */
};
date
Header: DOS.H
Struktur des Datums, wie es von den folgenden Funktionen verwendet wird:
dostounix
getdate
setdate
unixtodos
struct date {
int da_year; /* aktuelles Jahr */
char da_day; /* Tag des Monats */
char da_mon; /* Monat (1 = Jan) */
};
REGS (union)
Header: DOS.H
Das union REGS dient der Übergabe von Information von und an die folgenden Funktionen:
int86
int86x
intdos
intdosx
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
Siehe auch
struct REGPACK
BYTEREGS und WORDREGS
Header: DOS.H
Strukturen für das Speichern von Byte- und Word-Registern:
DDCHelp Hilfe zur Programmiersprache C Seite 56 von 606
struct BYTEREGS {
unsigned char al, ah, bl, bh;
unsigned char cl, ch, dl, dh;
};
struct WORDREGS {
unsigned int ax, bx, cx, dx;
unsigned int si, di, cflag, flags;
};
SREGS
Header: DOS.H
Die Struktur des Segment-Registers, die an die folgenden Funktionen übergeben wird und von
ihnen gefüllt wird:
int86x
intdosx
segread
struct SREGS {
unsigned int es;
unsigned int cs;
unsigned int ss;
unsigned int ds;
};
REGPACK
Header: DOS.H
Die Struktur der Werte, die an die Funktion intr übergeben und von ihnen gefüllt wird:
struct REGPACK {
unsigned r_ax, r_bx, r_cx, r_dx;
unsigned r_bp, r_si, r_di;
unsigned r_ds, r_es, r_flags;
};
Siehe auch
REGS
COUNTRY
Header: DOS.H
Die Struktur COUNTRY gibt an, wie bestimmte länderabhängige Daten formatiert werden müssen:
struct COUNTRY {
int co_date; /* Datumsformat */
char co_curr[5]; /* Währungssymbol */
char co_thsep[2]; /* Tausenderseparator */
char co_desep[2]; /* Dezimalseparator */
char co_dtsep[2]; /* Datumseparator */
char co_tmsep[2]; /* Zeitseparator */
char co_currstyle; /* Währungsstil */
char co_digits; /* Signifikante Ziffern der Währung */
char co_time; /* Zeitformat */
long co_case; /* Groß-/Kleinschreibung */
DDCHelp Hilfe zur Programmiersprache C Seite 57 von 606
char co_dasep[2]; /* Datumseparator */
char co_fill[10]; /* Füller */
};
Dies ist das Datumsformat in co_date:
Wert Stil Format
0 U.S. (Monat, Monat, Jahr)
1 Europäisch (Monat, Monat, Jahr)
2 Japanisch (Jahr, Monat, Monat)
Dies ist der Anzeigestil für Währungen in co_currstyle:
Stil Beispiel Bedeutung
0 $10.52 Das Währungssymbol geht dem Wert ohne Zwischenraum zwischen
dem Symbol und der Zahl voran.
1 10.52$ Das Währungssymbol folgt dem Wert ohne Zwischenraum zwischen
der Zahl und dem Symbol.
2 $ 10.52 Das Währungssymbol geht dem Wert mit einem Zwischenraum nach
dem Symbol voran.
3 10.52 $ Das Währungssymbol folgt der Zahl mit einem Zwischenraum vor
dem Symbol.
devhdr
Header: DOS.H
Header-Struktur für MS-DOS-Gerätetreiber.
struct devhdr {
long dh_next;
short dh_attr;
unsigned short dh_strat;
unsigned short dh_inter;
char dh_name[8];
};
lconv
Verwendet von localeconv.
struct lconv {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
DDCHelp Hilfe zur Programmiersprache C Seite 58 von 606
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
};
DOSERROR
Header: DOS.H
Verwendet von dosexterr, um erweiterte DOS-Fehler zurückzugeben.
struct DOSERROR {
int de_exterror; /* Erweiterter Fehler */
char de_class; /* Fehlerklasse */
char de_action; /* Aktion */
char de_locus; /* Fehlerstelle */
};
Siehe auch
_doserrno
errno
Beispiel
DOSERROR
/* DOSERROR Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void) {
FILE *fp;
struct DOSERROR info;
fp = fopen("perror.dat","r");
if (!fp) perror("Unable to open file for reading");
dosexterr(&info);
printf("Extended DOS error information:\n");
printf(" Extended error: %d\n",info.de_exterror);
printf(" Class: %x\n",info.de_class);
printf(" Action: %x\n",info.de_action);
printf(" Error Locus: %x\n",info.de_locus);
return 0;
}
find_t
Header: DOS.H
DOS-Dateikontrollblockstruktur, die von _dos_findfirst und _dos_findnext verwendet wird.
Die Struktur find_t korrespondiert exakt mit der Struktur ffblk.
struct find_t {
char reserved[21]; /* von Microsoft reserviert; nicht ändern */
char attrib; /* Attribut-Byte für entsprechende Datei */
unsigned wr_time; /* Zeitpunkt der letzten Dateiänderung */
DDCHelp Hilfe zur Programmiersprache C Seite 59 von 606
unsigned wr_date; /* Datum der letzten Dateiänderung */
long size; /* Dateigröße */
char name[13]; /* ASCII-Name der entsprechenden Datei */
};
dirent
Header: DIRENT.H
Struktur, die zu einem einzelnen Verzeichniseintrag korrespondiert. Wird von readdir verwendet.
Zusätzlich zu nicht zugreifbaren Elementen enthält dirent das Element
char d_name[];
Dabei ist d_name ein Zeichen-Array, das den null-terminierten Dateinamen des aktuellen
Verzeichniseintrags enthält.
Die Größe des Array ist unbestimmt. Verwenden Sie strlen, um die Länge des Dateinamens zu
ermitteln.
dosdate_t
Header: DOS.H
Struktur, die von _dos_getdate und _dos_setdate. verwendet wird.
struct dosdate_t {
unsigned char day; /* 1--31 */
unsigned char month; /* 1--12 */
unsigned int year; /* 1980--2099 */
unsigned char dayofweek; /* 0--6; 0 = Sonntag */
};
dostime_t
Header: DOS.H
Struktur, die von _dos_gettime und _dos_settime. verwendet wird.
struct dostime_t {
unsigned char hour; /* Stunden */
unsigned char minute; /* Minuten */
unsigned char second; /* Sekunden */
unsigned char hsecond; /* Hundertstel Sekunden */
};
diskfree_t
Header: DOS.H
Struktur, die von _dos_getdiskfree. verwendet wird.
struct diskfree_t {
unsigned total_clusters;
unsigned avail_clusters;
unsigned sectors_per_cluster;
unsigned bytes_per_sector;
};
DDCHelp Hilfe zur Programmiersprache C Seite 60 von 606
utimbuf
Header: UTIME.H
Struktur, die von utime verwendet wird.
struct utimbuf {
time_t actime; /* Zugriffszeit */
time_t modtime; /* Änderungszeit */
};
Da das DOS-Dateisystem nur eine Änderungszeit unterstützt, ignoriert utime das Element actime
und verwendet nur modtime, um die Änderungszeit der Datei zu setzen.
Vordefinierte Bezeichner
O_xxxx
Definiert in:
fcntl.h
Beschreibung:
Diese vordefinierten Konstanten sind Bitdefinitionen der für den Dateizugriffsmodus verwendeten
Argumente.
Beim Aufruf der folgenden RTL-Funktionen zum Öffnen von Dateien verwendet man einige (nicht
alle) dieser Definitionen:
_dos_open
fdopen
fopen
freopen
_fsopen
open
_rtl_open
sopen
Bei den Funktionen _dos_open und sopen werden außerdem symbolische file-sharing-Konstanten
für das Argument, das den Dateizugriffsmodus bestimmt, verwendet.
Kategorie:
Konstante Beschreibung:
Read/Write-Flags (Verwendet bei _dos_open, _rtl_open, open und sopen)
O_RDONLY Öffnen nur zum Lesen
O_WRONLY Öffnen nur zum Schreiben
O_RDWR Öffnen zum Lesen und Schreiben
Andere Zugriffs-Flags (Verwendet bei open und sopen)
O_NDELAY Nicht verwendet, dient der Kompatibilität zu Unix
O_APPEND Anhängen neuer Daten am Dateiende
Wenn gesetzt, wird der Dateizeiger vor jedem Schreibzugriff an das
Ende der Datei gesetzt
DDCHelp Hilfe zur Programmiersprache C Seite 61 von 606
O_CREAT Erzeugt und öffnet eine Datei
Hat keine Wirkung, wenn die Datei bereits existiert
Wenn die Datei nicht existiert, wird sie erzeugt
O_EXCL Öffnen im Exklusivmodus, nur mit O_CREAT verwendet
Ist die Datei bereits vorhanden, wird ein Fehler zurückgemeldet
O_TRUNC Öffnen mit Löschen
Wenn die Datei bereits existiert, wird sie auf die Länge null gekürzt.
Die Dateiattribute bleiben dabei unverändert
Binärmodus/Textmodus-Flags
(Verwendet bei fdopen, fopen, freopen, _fsopen, open und sopen)
O_BINARY Keine Übersetzung. Die Datei wird explizit im Binärmodus geöffnet
O_TEXT CR-LF-Übersetzung. Die Datei wird explizit im Textmodus geöffnet
Unter DOS 3.x zusätzlich benutzbare Konstanten (Verwendet bei _rtl_open)
O_NOINHERIT Kindprozesse "erben" die Datei nicht
O_DENYALL Fehler beim Öffnen zum Lesen oder Schreiben
O_DENYWRITE Fehler beim Öffnen zum Schreiben
O_DENYREAD Fehler beim Öffnen zum Lesen
O_DENYNONE Gemeinsamen Zugriff erlauben
Hinweis: Bei jedem Öffnen darf nur eine der O_DENYxxx-Optionen angegeben werden.
Diese Attribute für gemeinsamen Dateizugriff können zusätzlich zu einer etwa vorhandenen
Dateisperre verwendet werden.
VERÄNDERN SIE KEINESFALLS die folgenden speziellen, nur zur Abfrage bestimmten Bits
(werden in der DOS-Dokumentation beschrieben)!
O_CHANGED Spezielles DOS-Bit (nur abfragen!)
O_DEVICE Spezielles DOS-Bit (nur abfragen!)
SEEK_xxx
Definiert in:
io.h
stdio.h
Beschreibung:
Vordefinierte Konstanten zum Festlegen von Startpositionen bei Positionier-Operationen
Konstante Wert Dateiposition
SEEK_SET 0 Positionierung vom Dateianfang aus
SEEK_CUR 1 Positionierung von der aktuellen Position aus
SEEK_END 2 Positionierung vom Dateiende aus
Siehe auch:
fseek
lseek
DDCHelp Hilfe zur Programmiersprache C Seite 62 von 606
SH_xxxx
Definiert in:
share.h
Beschreibung:
Konstanten für die Vorgabe des Shared-Modus beim Öffnen von Dateien (werden bei _dos_open
und sopen verwendet (unter DOS 3.0 oder höher).
Konstante Bedeutung
SH_COMPAT Wählt den Kompatibilitätsmodus.
Erlaubt weitere Öffnungsaufrufe mit SH_COMPAT. Der Aufruf schlägt fehl,
falls die Datei bereits in einem anderen Shared-Modus geöffnet worden ist.
SH_DENYNONE Erlaubt Lese- und Schreibzugriffe.
Erlaubt weitere Öffnungsaufrufe in allen Modi außer SH_COMPAT.
SH_DENYNO Erlaubt Lese- und Schreibzugriffe (nur zu Kompatibilitätszwecken definiert).
SH_DENYRD Verweigert Lesezugriffe. Erlaubt bei weiteren Öffnungsaufrufen nur
Schreibzugriffe.
SH_DENYRW Verweigert Lesezugriffe. Nur über das aktuelle Datei-Handle ist ein Zugriff
möglich.
SH_DENYWR Verweigert Schreibzugriffe. Erlaubt bei weiteren Öffnungsaufrufen nur
Lesezugriffe.
O_NOINHERIT Die Datei ist Kindprozessen nicht zugänglich.
Diese Attribute für gemeinsamen Dateizugriff können zusätzlich zu einer etwa vorhandenen
Dateisperre verwendet werden.
P_xxxx
Definiert in:
process.h
Beschreibung:
Konstanten für die bei den spawn-Funktionen wählbaren Modi.
Konstante Bedeutung
P_WAIT Kindprozess läuft allein, Elternprozess wartet auf dessen Beendigung.
P_NOWAIT Kind- und Elternprozess laufen gleichzeitig (nicht implementiert).
P_OVERLAY Kindprozess ersetzt den Elternprozess, der dann nicht mehr existiert.
SIG_xxx
Definiert in:
signal.h
Beschreibung:
Konstanten für die vordefinierten Reaktionen auf Signale, die von raise oder durch externe
Ereignisse ausgelöst werden.
DDCHelp Hilfe zur Programmiersprache C Seite 63 von 606
Konstante Bedeutung
SIG_DFL Programm beenden
SIG_IGN Keine Aktion, Signal ignorieren
SIG_ERR Fehlercode zurückgeben
Siehe auch:
signal
Signalarten
SIGxxxx
Definiert in:
signal.h
Beschreibung:
Konstanten für die von raise und signal verwendete Signalwerte.
Signal Anm. Bedeutung Standardaktion
SIGABRT (*) Abnormale Beendigung Aufruf _exit(3)
SIGFPE Fehlerhafte Gleitkommaoperation Aufruf _exit(1
(Division durch Null, ungültige Operation etc.)
SIGILL (#) Unzulässiger Befehl Aufruf _exit(1)
SIGINT Unterbrechung durch Taste [Strg][C] Aufruf INT 23h
SIGSEGV (#) Unzulässiger Speicherzugriff Aufruf _exit(1)
SIGTERM (*) Anforderung zum Beenden des Programms Aufruf _exit(1)
(*) Signale, die mit (*) markiert sind, werden von DOS oder der Entwicklungsumgebung im
normalen Ablauf nicht erzeugt. Sie können jedoch mit der Funktion raise generiert werden.
(#) Signale, die mit (#) markiert sind, können bei den Prozessoren 8088 oder 8086 nicht asynchron
erzeugt werden, bei manchen anderen Prozessoren ist dies jedoch möglich (siehe signal für
weitere Einzelheiten).
stdaux, stderr, stdin, stdout und stdprn
Definiert in:
stdio.h
Beschreibung:
Vordefinierte Streams, die beim Programmstart automatisch geöffnet werden.
Name Bedeutung
stdin Standardeingabegerät
stdout Standardausgabegerät
stderr Standardfehlerausgabegerät
stdaux Alternatives Standardausgabegerät
DDCHelp Hilfe zur Programmiersprache C Seite 64 von 606
stdprn Standarddrucker
S_Ixxxx
Definiert in:
sys\stat.h
Beschreibung:
Definitionen für Dateistatus- und Verzeichnisfunktionen.
Name Bedeutung
S_IFMT Maske für Dateityp
S_IFDIR Verzeichnis
S_IFIFO FIFO-Gerät
S_IFCHR Zeichenweise arbeitendes Gerät
S_IFBLK Blockweise arbeitendes Gerät
S_IFREG Reguläre Datei
S_IREAD Eigentümer darf lesen
S_IWRITE Eigentümer darf schreiben
S_IEXEC Eigentümer darf ausführen
NULL
Definiert in:
alloc.h
mem.h
stddef.h
stdio.h
stdlib.h
Beschreibung:
Wert einen Nullzeigers.
Bit-Definitionen für fnsplit
Definiert in:
dir.h
Beschreibung:
Diese vordefinierten Konstanten sind Bit-Definitionen der Rückgabewerte der Funktion fnsplit; sie
geben an, welche Teile einer Dateispezifikation die Funktion beim Aufteilen gefunden hat.
Flag Komponente
DIRECTORY Pfadangabe enthält ein Verzeichnis (und möglicherweise Unterverzeichnisse)
DRIVE Pfadangabe enthält eine Laufwerksbezeichnung (siehe DIR.H)
EXTENSION Pfadangabe enthält eine Namenserweiterung
DDCHelp Hilfe zur Programmiersprache C Seite 65 von 606
FILENAME Pfadangabe enthält einen Dateinamen
WILDCARDS Pfadangabe enthält Jokerzeichen (* oder ?)
MAXxxxx
Definiert in:
dir.h
Beschreibung:
Diese Symbole definieren die maximale Anzahl von Zeichen in einer Dateispezifikation für fnsplit
(einschließlich eines abschließenden Nullzeichens).
Name Bedeutung
MAXPATH Vollständiger Dateiname mit Pfad
MAXDRIVE Laufwerksangabe (z.B. "A:")
MAXDIR Unterverzeichnisangabe
MAXFILE Dateiname ohne Namenserweiterung
MAXEXT Namenserweiterung
_F_xxxx
Definiert in:
stdio.h
Beschreibung:
Dateistatus-Flags bei Streams.
Name Bedeutung
_F_RDWR Lesen und Schreiben erlaubt
_F_READ Nur Lesen erlaubt
_F_WRIT Nur Schreiben erlaubt
_F_BUF Dynamisch reservierter Datenpufferbereich
_F_LBUF Zeilenweise gepufferte Datei
_F_ERR Fehler-Flag
_F_EOF EOF-Flag (Dateiende)
_F_BIN Binär-Flag
_F_IN Dateneingabe aktiv
_F_OUT Datenausgabe aktiv
_F_TERM "Datei" ist ein Terminal
FA_xxxx
Definiert in:
dos.h
DDCHelp Hilfe zur Programmiersprache C Seite 66 von 606
Beschreibung:
Dateiattribute von DOS.
Konstante Bedeutung
FA_RDONLY Schreibgeschützte Datei
FA_HIDDEN Verborgene Datei
FA_SYSTEM Systemdatei
FA_LABEL Datenträgerbezeichnung
FA_DIREC Verzeichnis
FA_ARCH Zu archivierende Datei
Weitere Informationen über diese Attribute entnehmen Sie bitte Ihrer DOS-Dokumentation.
EXIT_xxxx
Definiert in:
stdlib.h
Beschreibung:
Konstanten zur Definition von Beendigungs-Codes für den Aufruf der Funktion exit.
Name Bedeutung
EXIT_SUCCESS Normales Programmende
EXIT_FAILURE Abnormales Programmende
_IOxxx
Definiert in:
stdio.h
Beschreibung:
Konstanten zur Festlegung der Pufferungsstrategie einer Datei.
Name Bedeutung
_IOFBF Volle Pufferung. Wenn der Puffer leer ist, versucht die nächste
Eingabeoperation, ihn vollständig zu füllen.
Bei der Ausgabe wird der Puffer vollständig gefüllt, bevor Daten in die Datei
geschrieben werden.
_IOLBF Zeilenpufferung. Wenn der Puffer leer ist, versucht die nächste
Eingabeoperation, ihn vollständig zu füllen.
Bei der Ausgabe wird der Puffer dagegen immer dann geleert, wenn ein
Zeilenvorschub-Zeichen ausgegeben wird.
_IONBF Keine Pufferung. Die Parameter buf und size werden ignoriert. Bei jeder
Eingabeoperation wird direkt aus der Datei gelesen, bei jeder Ausgabeoperation
sofort in die Datei geschrieben.
DDCHelp Hilfe zur Programmiersprache C Seite 67 von 606
Siehe auch:
setvbuf
BUFSIZ
Definiert in:
stdio.h
Beschreibung:
Definiert die standardmäßige Puffergröße, mit der die Funktion setbuf arbeitet.
EOF
Definiert in:
stdio.h
Beschreibung:
Diese Konstante zeigt an, dass das Dateiende erreicht wurde.
_IS_xxx
Definiert in:
ctype.h
Beschreibung:
Bitwerte in _ctype[], verwendet von den Zeichentypmakros (Makronamen is...).
Name Bedeutung
_IS_SP Leerzeichen
_IS_DIG Ziffer
_IS_UPP Großbuchstabe
_IS_LOW Kleinbuchstabe
_IS_HEX [A-F] oder [a-f]
_IS_CTL Steuerzeichen
_IS_PUN Interpunktionszeichen
CHAR_xxx
Definiert in:
limits.h
Beschreibung:
Name Bedeutung
CHAR_BIT Anzahl der Bits des Typs char
CHAR_MAX Maximaler Wert des Typs char
CHAR_MIN Minimaler Wert des Typs char
DDCHelp Hilfe zur Programmiersprache C Seite 68 von 606
Diese Werte sind unabhängig davon, ob der Typ char in der Voreinstellung als signed oder
unsigned definiert ist.
SCHAR_xxx
Definiert in:
limits.h
Beschreibung:
Name Bedeutung
SCHAR_MAX Maximaler Wert des Typs char
SCHAR_MIN Minimaler Wert des Typs char
Uxxxx_MAX
Definiert in:
limits.h
Beschreibung:
Name Maximaler Wert für den Typ
UCHAR_MAX unsigned char
USHRT_MAX unsigned short
UINT_MAX unsigned int
ULONG_MAX unsigned long
SHRT_xxx
Definiert in:
limits.h
Beschreibung:
Name Bedeutung
SHRT_MAX Maximaler Wert für den Typ short
SHRT_MIN Minimaler Wert für den Typ short
INT_xxx
Definiert in:
limits.h
Beschreibung:
Maximaler und minimaler Wert für den Typ int.
Name Bedeutung
INT_MAX Maximaler Wert für den Typ int
DDCHelp Hilfe zur Programmiersprache C Seite 69 von 606
INT_MIN Minimaler Wert für den Typ int
LONG_xxx
Definiert in:
limits.h
Beschreibung:
Maximaler und minimaler Wert für den Typ long.
Name Bedeutung
LONG_MAX Maximaler Wert für den Typ long
LONG_MIN Minimaler Wert für den Typ long
CW_DEFAULT
Definiert in:
float.h
Beschreibung:
Voreingestelltes Steuerwort für den mathematischen Koprozessor 8087 oder 80287.
EDOM, ERANGE, HUGE_VAL
Definiert in:
errno.h
math.h
Beschreibung:
Name Bedeutung
EDOM Fehlercode: Argument nicht im zulässigen Bereich
ERANGE Fehlercode: Ergebnis nicht im zulässigen Bereich
HUGE_VAL Größtmöglicher darstellbarer double-Wert (wird von mathematischen
Funktionen zurückgegeben, falls das Ergebnis größer ist)
NDEBUG
Definiert in:
assert.h
Beschreibung:
Mit Hilfe von NDEBUG kann man im Anwenderprogramm wählen, ob der Bezeichner assert für ein
Makro oder für eine echte Funktion steht.
Ist NDEBUG definiert, so ist assert eine Funktion, andernfalls ein Makro.
DDCHelp Hilfe zur Programmiersprache C Seite 70 von 606
NFDS
Definiert in:
dos.h
Beschreibung:
Maximale Anzahl von Dateideskriptoren.
MAXxxxx
Definiert in:
values.h
Beschreibung:
Maximalwerte für Ganzzahl-Datentypen.
Name Bedeutung
MAXSHORT Größter Wert für den Typ short
MAXINT Größter Wert für den Typ int
MAXLONG Größter Wert für den Typ long
M_E, M_LOGxxx, M_LNxx
Definiert in:
math.h
Beschreibung:
Konstanten für logarithmische Funktionen.
Name Bedeutung
M_E e (Eulersche Zahl, 2,71...)
M_LOG2E log(e)
M_LOG10E log10(e)
M_LN2 ln(2)
M_LN10 ln(10)
Zahl Pi und davon abgeleitete Konstanten
Definiert in:
math.h
Beschreibung:
Konstante Pi (Ludolfsche Zahl, 3,14...) und davon abgeleitete Konstanten.
Name Bedeutung
M_PI Pi
M_PI_2 Pi/2
M_PI_4 Pi/4
DDCHelp Hilfe zur Programmiersprache C Seite 71 von 606
M_1_PI 1/Pi
M_2_PI 2/Pi
M_1_SQRTPI 1/Wurzel(Pi)
M_2_SQRTPI 2/Wurzel(Pi)
M_SQRTxxx
Definiert in:
math.h
Beschreibung:
Konstante "Quadratwurzel aus 2" und abgeleitete Konstanten.
Name Bedeutung
M_SQRT2 Wurzel(2)
M_SQRT_2 1/2 * Wurzel(2)
L_ctermid
Definiert in:
stdio.h
Beschreibung:
Länge eines Gerätenamens (String).
L_tmpnam
Definiert in:
stdio.h
Beschreibung:
Ausreichende Größe für ein Array, das den Namen (String) einer temporären Datei aufnehmen
soll.
TMP_MAX
Definiert in:
stdio.h
Beschreibung:
Maximale Anzahl von eindeutig unterscheidbaren Dateinamen.
OPEN
Definiert in:
stdio.h
Beschreibung:
DDCHelp Hilfe zur Programmiersprache C Seite 72 von 606
Maximalanzahl von Dateien, die gleichzeitig geöffnet sein können.
Name Bedeutung
FOPEN_MAX Maximale Anzahl von Dateien pro Prozess
SYS_OPEN Maximale Anzahl von Dateien im gesamten System
HANDLE_MAX
Definiert in:
io.h
Beschreibung:
Maximale Anzahl von Handles.
RAND_MAX
Definiert in:
stdlib.h
Syntax:
Beschreibung:
Maximaler von der Funktion rand zurückgegebener Wert.
BITSPERBYTE
Definiert in:
values.h
Beschreibung:
Anzahl der Bits, die ein Byte bilden.
Grenzwerte für die Typen float und double
Definiert in:
values.h
Beschreibung:
Kompatibel zu UNIX System V:
_LENBASE Basis für Exponenten
Grenzwerte für den Typ double:
_DEXPLEN Anzahl der Bits im Exponenten
DMAXEXP Größter zulässiger Exponent
DMAXPOWTWO Höchste zulässige Zweierpotenz
DMINEXP Kleinster zulässiger Exponent
DSIGNIF Anzahl der signifikanten Bits
MAXDOUBLE Größter Wert für den Typ double
MINDOUBLE Kleinster Wert für den Typ double
DDCHelp Hilfe zur Programmiersprache C Seite 73 von 606
Grenzwerte für den Typ float:
_FEXPLEN Anzahl der Bits im Exponenten
FMAXEXP Größter zulässiger Exponent
FMAXPOWTWO Höchste zulässige Zweierpotenz
FMINEXP Kleinster zulässiger Exponent
FSIGNIF Anzahl der signifikanten Bits
MAXFLOAT Größter Wert für den Typ float
MINFLOAT Kleinster Wert für den Typ float
HIBITxxx
Definiert in:
values.h
Beschreibung:
Konstanten zur Maskierung des höchstwertigen Bits (Vorzeichenbit) bei den standardmäßigen
Ganzzahltypen.
Name Bedeutung
HIBITS Für Typ short
HIBITI Für Typ int
HIBITL Für Typ long
Fehlercodes in der Variablen errno
Definiert in:
errno.h
Beschreibung:
Die folgende Tabelle zeigt die mnemonischen Bezeichnungen und die Bedeutungen der in der
Variablen errno gespeicherten Fehlercodes.
Jeder der aufgeführten Werte kann als Index für das Array sys_errlist benutzt werden, wenn
Klartextmeldungen ausgegeben werden sollen.
Alternativ kann man auch die Funktion perror zur Ausgabe von Meldungen verwenden.
Mnemonische
Bezeichnung Bedeutung
EZERO Fehler 0
EINVFNC Ungültige Funktionsnummer
ENOFILE Datei nicht gefunden
ENOPATH Pfad nicht gefunden
ECONTR Speicherblöcke zerstört
EINVMEM Ungültige Speicherblockadresse
EINVENV Ungültiges Environment
EINVFMT Ungültiges Format
EINVACC Ungültiger Zugriffscode
EINVDAT Ungültige Daten
EINVDRV Ungültige Laufwerksangabe
ECURDIR Versuch, das aktuelle Verzeichnis zu löschen
DDCHelp Hilfe zur Programmiersprache C Seite 74 von 606
ENOTSAM Nicht das gleiche Gerät
ENMFILE Keine weiteren Dateien mehr
ENOENT Datei oder Verzeichnis existiert nicht
EMFILE Zu viele geöffnete Dateien
EACCES Zugriff verweigert
EBADF Ungültiges Datei-Handle
ENOMEM Zu wenig Speicher
ENODEV Gerät existiert nicht
EINVAL Ungültiges Argument
E2BIG Argumentliste ist zu lang
ENOEXEC Fehler beim Exec-Format
EXDEV Kreuzverbindung von Geräten
EDOM Unzulässiges Argument für eine mathematische Funktion
ERANGE Ergebnis außerhalb des darstellbaren Bereichs
EFAULT Unbekannter Fehler
EEXIST Datei existiert bereits
Bit-Felder
Ein Bit-Feld ist ein Element einer Struktur, die in Zusammenhang mit Bits definiert ist. Wenn Sie
eine spezielle Art von struct-Definition verwenden, können Sie ein Strukturelement deklarieren,
das in der Länge zwischen 1 und 16 Bits variiert.
So korrespondiert zum Beispiel die folgende Struktur
struct bit_field {
int bit_1 : 1;
int bits_2_to_5 : 4;
int bit_6 : 1;
int bits_7_to_16 : 10;
} bit_var;
mit der folgenden Ansammlung von Bit-Feldern:
|----------------------------|---|---------|---|
| 16 15 14 13 12 11 10 9 8 7 | 6 | 5 4 3 2 | 1 |
|----------------------------|---|---------|---|
Siehe auch
class
union
Schlüsselwörter
Schlüsselwörter sind für spezielle Zwecke reservierte Wörter, die nicht als normale Bezeichner (Namen) verwendet werden dürfen. Mit Optionen der IDE oder des Kommandozeilen-Compilers können Sie die vom Compiler erkannten Schlüsselwörter auf ANSI- oder UNIX-Schlüsselwörter beschränken oder bestimmen, dass er alle Schlüsselwörter verarbeitet.
DDCHelp Hilfe zur Programmiersprache C Seite 75 von 606
auto
Syntax: [auto] <datendefinition> ;
Beschreibung:
Der Speicherklassen-Spezifizierer auto dient dazu, eine lokale Variable mit lokaler Lebensdauer zu definieren.
Diese Speicherklasse ist für lokale Variablen voreingestellt und wird deshalb selten explizit angegeben.
Beispiel: int main()
{
auto int i;
i = 5;
return i;
}
break
Syntax: break ;
Beschreibung:
Die Anweisung break bewirkt innerhalb einer Schleife, dass die Ablaufkontrolle zur ersten Anweisung hinter der innersten Schleife, in der break steht, springt.
Siehe auch: continue
do
for
switch
while
Beispiel: switch (zeit)
{
case 12:
cout << "Zeit für das Mittagessen!\n";
break;
case 13:
cout << "Gespräch mit Chef.\n";
break;
}
case
Syntax: switch ( <switch_variable> ){
DDCHelp Hilfe zur Programmiersprache C Seite 76 von 606
case <konstantenausdruck> : <anweisung>; [break;]
.
.
.
default : <anweisung>;
}
Beschreibung:
Die Anweisung case bestimmt zusammen mit switch, welche Anweisungen ausgeführt werden.
Die Liste der möglichen Verzweigungspunkte wird durch Konstrukte der folgenden Form gebildet:
case <konstantenausdruck> : <anweisung>;
Dabei muss <konstantenausdruck> vom Typ int sein und einen innerhalb der switch-
Anweisung nicht mehrfach vorkommenden Wert haben.
Die Werte von <konstantenausdruck> werden auf Übereinstimmung mit
<switch_variable> geprüft.
Wenn eine Übereinstimmung gefunden wird, so wird der Programmablauf mit den der betreffenden case-Anweisung folgenden Anweisungen fortgesetzt, bis eine break-Anweisung oder das Ende der switch-Anweisung erreicht wird.
Wenn keine Übereinstimmung gefunden wird, so wird der Ablauf hinter der default-Anweisung fortgesetzt.
Hinweis: Es ist unzulässig, dass case-Konstanten in derselben switch-Anweisung doppelt vorkommen.
Siehe auch: break
default
switch
char
Syntax: [signed|unsigned] char <variablen-name>
Beschreibung:
Dieser Typ-Spezifizierer dient zur Deklaration einer Zeichenvariablen; Variablen vom Typ char belegen 1 Byte an Speicherplatz.
Eine char-Variable kann signed, unsigned oder unspezifiziert sein.
Objekte, die als Typ char deklariert sind, können jedes Zeichen aus dem nicht erweiterten ASCII-Zeichensatz aufnehmen.
Siehe auch: 16-Bit-Datentypen
32-Bit-Datentypen
continue
Syntax:
DDCHelp Hilfe zur Programmiersprache C Seite 77 von 606
continue ;
Beschreibung:
Die Anweisung continue wird innerhalb von Schleifen benutzt, um die Steuerung an das Ende der innersten Schleife, in der continue steht, springen zu lassen. An diesem Punkt wird dann die Fortsetzungsbedingung der Schleife erneut geprüft.
Siehe auch: while
do
for
Beispiel: void main ()
{
for (i = 0; i < 20; i++) {
if (array[i] == 0)
continue;
array[i] = 1/array[i];
}
}
default
Syntax: switch ( <switch_variable> ){
case <konstantenausdruck> : <anweisung>; [break;]
.
.
.
default : <anweisung>;
}
Beschreibung:
Die Anweisung default wird zusammen mit switch benutzt.
Wenn innerhalb der switch-Anweisung keine passende case-Konstante, aber die Anweisung
default vorhanden ist, so wird der Programmablauf an dieser Stelle fortgesetzt.
Ist default nicht vorhanden, so wird der komplette switch-Anweisungsblock übersprungen.
Siehe auch: break
do
Syntax: do <anweisung> while ( <bedingung> );
Beschreibung:
Mit der Anweisung do wird eine do ... while-Schleife aufgebaut.
<anweisung> wird solange wiederholt ausgeführt, wie der Wert von <bedingung> ungleich Null
bleibt.
DDCHelp Hilfe zur Programmiersprache C Seite 78 von 606
Da die Bedingung nach jeder Ausführung von <anweisung> geprüft wird, wird die Schleife
mindestens einmal durchlaufen.
Beispiel: /* In diesem Beispiel wird der Bediener zur Eingabe eines Passworts */
/* aufgefordert. Diese Aufforderung wird so oft wiederholt, bis */
/* ein Passwort eingegeben wird, das dem in vergleichswort */
/* gespeicherten entspricht. */
int main ()
{
char *vergleichswort = "Passwort";
char *passwort;
do {
printf ("Passwort eingeben: ");
scanf(passwort);
} while (strcmp(passwort,vergleichswort));
return 0;
}
Siehe auch: while
double
Syntax: [long] double <bezeichner>
Beschreibung:
Der Typspezifizierer double wird bei der Deklaration von Namen verwendet, die für Gleitkommatypen stehen. Der optionale Modifizierer long bewirkt, dass die Gleitkommawerte eine höhere Stellenzahl (also Genauigkeit) haben.
Wenn Sie das Schlüsselwort double in einem Programm verwenden, so linkt die IDE von C++ automatisch die mathematische Gleitkommabibliothek mit dazu.
Siehe auch: 16-Bit-Datentypen
32-Bit-Datentypen
float
long
Arithmetische Standardkonvertierungen
enum
Syntax: enum [<tag_name>] {<konstantenname> [= <wert>], ...} [variablen_liste];
<tag_name> ist ein optionaler Tag-Name, der die Aufzählungsmenge bezeichnet.
<konstantenname> ist der Name einer Konstanten, die optional den Wert <wert> erhalten
kann. Diese Konstanten werden auch Aufzählungskonstanten genannt.
DDCHelp Hilfe zur Programmiersprache C Seite 79 von 606
<wert> muss vom Typ int sein. Fehlt die Angabe <wert>, so wird dafür
<vorgänger> + 1
angenommen, dabei ist <vorgänger> der Wert der in der Liste davor stehenden int-
Konstante. Für die erste Konstante wird in der Voreinstellung der Wert Null angenommen.
<variablen_liste> ist eine optionale Variablenliste; diese Variablen werden damit als von
diesem Aufzählungstyp deklariert.
Beschreibung:
Das Schlüsselwort enum wird verwendet, um eine Menge von int-Konstanten zu definieren; eine solche Menge wird Aufzählungsdatentyp genannt.
Ein Aufzählungstyp stellt mnemonische Bezeichnungen für die Elemente einer Menge von int-Werten zur Verfügung. Wenn Sie allerdings die Option Enum als Integer behandeln (Menü: Optionen/Projekt/16-Bit-Compiler/Code-Generierung)ausschalten oder die Kommandozeilenoption -b angeben, so reserviert der Compiler für Aufzählungstypen nur ein Byte.
Werte von Aufzählungstypen werden immer als vom Typ int interpretiert, falls es der Wertebereich zulässt; wenn sie jedoch nicht vom Typ int sind, werden sie in Ausdrücken zu int erweitert. Die Bezeichner in einer Aufzählungsliste sind implizit vom Typ signed char, unsigned char oder int, abhängig vom Wertebereich.
In C kann einer Aufzählungstypvariablen jeder Wert vom Typ int zugewiesen werden; es findet keine darüberhinausgehende Typprüfung statt. In C++ dagegen kann einer solchen Variablen nur eine ihrer Aufzählungskonstanten zugewiesen werden.
In C++ können Sie das Schlüsselwort enum auch weglassen, wenn <tag_name> in diesem
Gültigkeitsbereich keine andere Bedeutung hat. Sie können auch <tag_name> weglassen, wenn
Sie später keine weiteren Variablen dieses Aufzählungstyps deklarieren wollen.
Fehlt die Angabe <wert>, so erhält die erste Aufzählungskonstante den Wert Null. Alle folgenden
Konstanten ohne Initialisierer erhalten dann einen jeweils um 1 höheren Wert. Für <wert> kann
jeder Ausdruck eingesetzt werden, der einen positiven oder negativen int-Wert (ggfs. nach Vorzeichenerweiterung) ergibt. Diese Werte sind normalerweise eindeutig, doppelt vorkommende sind aber erlaubt.
Die Tag-Namen von Aufzählungstypen liegen im selben Namensraum wie die Tag-Namen von Strukturen und Varianten. Die Namen der Aufzählungskonstanten liegen im selben Namensraum wie normale Variablennamen.
In C++ haben die Namen von Aufzählungskonstanten, die in einer Klasse deklariert sind, den Gültigkeitsbereich dieser Klasse.
Beispiele: enum tage { so, mo, di, mi, do, fr, sa } irgendein_tag;
Die vorstehende Deklaration ergibt den eindeutigen ganzzahligen Typ tage, die Variable irgendein_tag von eben diesemTyp sowie eine Menge von Aufzählungskonstanten (so, mo, ...) mit ganzzahligen Werten.
enum modi { LETZTER_MODUS = -1, BW40=0, C40, BW80, C80, MONO = 7 };
/*
"modi" ist der Tag-Name des Typs.
"LETZTER_MODUS", "BW40", "C40" usw. sind die Namen der Konstanten.
Der Wert von C40 ist 1 (BW40 + 1); BW80 = 2 (C40 + 1) usw.
*/
extern
Syntax: extern <daten_definition> ;
DDCHelp Hilfe zur Programmiersprache C Seite 80 von 606
[extern] <funktions_prototyp> ;
Beschreibung:
Der Modifizierer teilt dem Compiler mit, dass der Speicherplatz und der Initialisierungswert einer Variablen bzw. der Rumpf einer Funktion effektiv in einem anderen Quelltextmodul definiert wird. Funktionen, die mit extern deklariert sind, sind in allen Quelltextdateien eines Programms sichtbar, sofern Sie die Funktion nicht als static definieren.
Bei Funktionsprototypen ist das Schlüsselwort extern optional.
Schreiben Sie in C++ extern "c", um zu verhindern, dass Funktionsnamen verändert werden.
Beispiel: extern int _fmode;
extern void Faktoren(int n);
extern "c" void cfunk(int);
Siehe auch: Fehlermeldung: Unknown language, must be C or C++
(Unbekannte Sprache; muss C oder C++ sein)
Fehlermeldung: Extern variable cannot be initialized
(Externe Variable kann nicht initialisiert werden)
Fehlermeldung: Only one of a set of overloaded functions can be "C"
(Nur eine aus einer Anzahl von überladenen Funktionen kann "C" sein)
Fehlermeldung: Function defined inline after use as extern
(Funktion wurde als inline definiert, nachdem sie als extern verwendet wurde)
Fehlermeldung: Linkage specification not allowed
(Linkerangabe ist nicht zulässig)
Fehlermeldung: Undefined symbol 'symbol' in module 'module'
(Nicht definiertes Symbol "symbol" im Modul "module")
float
Syntax: float <bezeichner>
Beschreibung:
Der Typspezifizierer float legt fest, dass ein Name für einen Gleitkommadatentyp steht.
Typ Größe Wertebereich
float 32 Bit 3,4 * (10-38) bis 3,4 * (10+38)
Die IDE von C++ linkt automatisch die mathematische Gleitkommabibliothek zu Ihrem Programm hinzu, wenn Sie Gleitkommawerte oder -operatoren verwenden.
Siehe auch: double
Arithmetische Standardkonvertierungen
DDCHelp Hilfe zur Programmiersprache C Seite 81 von 606
for
Syntax: for ( [<initialisierung>] ; [<bedingung>] ; [<inkrement>] ) <anweisung>
Beschreibung:
Die Anweisung for dient zum Programmieren einer Schleife.
<anweisung> wird wiederholt so oft ausgeführt, bis der Wert von <bedingung> Falsch ist.
Vor dem ersten Durchlauf der Schleife werden die Variablen für die Schleife durch
<initialisierung> initialisiert.
Nach jedem Durchlauf der Schleife wird die Laufvariable durch <inkrement> erhöht. (Deshalb
ist ++j in diesem Fall funktionell gleichwertig mit j++.)
In C++ kann <initialisierung> ein Ausdruck oder eine Deklaration sein.
Der Gültigkeitsbereich der dort deklarierten Bezeichner erstreckt sich nur bis zum Ende der for-Anweisung.
Alle drei Ausdrücke sind optional. Wenn <bedingung> weggelassen wird, so wird dafür der Wert
Wahr angenommen.
Beispiele: for (i=0; i<100; i++)
sum += x[i];
for (i=0, t=string; i < 40 && *t; i++, t++)
putch(*t);
putch('\n');
goto
Syntax: goto <bezeichner> ;
Beschreibung:
Die Anweisung goto dient dazu, die Ablaufkontrolle zu dem durch <bezeichner> angegebenen lokalen Label springen zu lassen.
Labels werden immer durch einen Doppelpunkt abgeschlossen.
Beispiel: Nochmal: /* Dies ist das Label */
;
.
.
.
goto Nochmal;
if
Syntax: if ( <bedingung> ) <anweisung1>;
DDCHelp Hilfe zur Programmiersprache C Seite 82 von 606
if ( <bedingung> ) <anweisung1>;
else <anweisung2>;
Beschreibung:
Die Anweisung if dient zum Programmieren einer Bedingungsabfrage.
Wenn die Auswertung von <bedingung> einen Wert ungleich Null ergibt, so wird
<anweisung1> ausgeführt.
Wenn <bedingung> Falsch (Null) ergibt, so wird <anweisung2> ausgeführt.
Die Klausel else ist optional, es dürfen aber zwischen einer if-Anweisung und else keine weiteren Anweisungen stehen.
Die Präprozessor-Direktiven #if und #else sehen der if- /if-else-Anweisung sehr ähnlich, haben aber eine völlig andere Wirkung. Sie steuern nämlich, welche Zeilen des Quelltextes compiliert und welche ignoriert werden.
Beispiele: if (zaehler < 50) zaehler++;
if (x < y)
z = x;
else
z = y;
int
Syntax: [signed|unsigned] int <bezeichner> ;
Beschreibung:
Der Typ-Spezifizierer int dient zum Definieren eines int-Datentyps.
Variablen des Typs int haben eine Größe von einem Wort (16 Bit).
int-Variablen können signed (Voreinstellung) oder unsigned sein.
Siehe auch: 16-Bit-Datentypen
32-Bit-Datentypen
double
Arithmetische Standardkonvertierungen
long
Syntax: long [int] <bezeichner> ;
[long] double <bezeichner> ;
Beschreibung:
Wenn der Typ-Spezifizierer long zur Modifizierung des Typs int verwendet wird, bewirkt er, dass der Typ int doppelt so viele Bytes an Speicherplatz repräsentiert.
Wenn er zur Modifizierung des Typs double verwendet wird, so wird dadurch ein Gleitkomma-Datentyp mit einer Genauigkeit von 80 Bit statt 64 Bit definiert.
DDCHelp Hilfe zur Programmiersprache C Seite 83 von 606
Die IDE linkt automatisch die mathematische Gleitkommabibliothek zu Ihrem Programm hinzu, wenn Sie darin irgendwo Gleitkommawerte oder -operatoren verwenden.
Siehe auch: 16-Bit-Datentypen
32-Bit-Datentypen
float
Arithmetische Standardkonvertierungen
register
Syntax: register <datendefinition> ;
Beschreibung:
Der Speicherklassenspezifizierer register weist den Compiler an, die deklarierte Variable (falls möglich) in einem CPU-Register zu speichern, um die Zugriffsgeschwindigkeit zu erhöhen und das Programm kürzer zu machen.
Variablen, die mit register deklariert sind, haben globale Lebensdauer.
Beispiel: register int i;
return
Syntax: return [ <ausdruck> ] ;
Beschreibung:
Die Anweisung return dient dazu, die aktuelle Funktion zu verlassen und zur aufrufenden Funktion zurückzukehren, wobei optional ein Wert zurückgeliefert werden kann.
Beispiel: double quadrat(double x)
{
return (x*x);
}
signed
Syntax: signed <typ> <variable> ;
Beschreibung:
Der Typ-Modifizierer signed wird verwendet, wenn der Wert einer Variablen sowohl positiv als auch negativ sein kann. Dieser Modifizierer kann auf die Basistypen int, char, long und short angewendet werden.
Fehlt in einer Deklaration die Angabe des Basistyps, so wird dafür int angenommen.
DDCHelp Hilfe zur Programmiersprache C Seite 84 von 606
Beispiel: signed int i; /* Voreinstellung ist signed */
signed i; /* Gleichwertig mit "signed int i;" */
unsigned long int l; /* int ist erlaubt, aber nicht erforderlich */
signed char ch; /* Voreinstellung ist unsigned */
Siehe auch: char
int
long
short
unsigned
Arithmetische Standardkonvertierungen
short
Syntax: short int <variable> ;
Beschreibung:
Der Typ-Modifizierer short wird verwendet, wenn die Größe einer Variablen kleiner als beim Typ int sein soll. Dieser Modifizierer kann auf den Basistyp int angewendet werden.
Fehlt in einer Deklaration die Angabe des Basistyps, so wird dafür int angenommen.
Beispiele: short int i;
short i; /* Gleichwertig mit "short int i;" */
Siehe auch: long
signed
Arithmetische Standardkonvertierungen
unsigned
sizeof
Syntax: sizeof <ausdruck>
sizeof ( <typ> )
Beschreibung:
Der Operator sizeof liefert die Größe (in Bytes) des angegebenen Ausdrucks oder Typs als Wert vom Typ size_t zurück.
Beispiel: memset(buff, 0, sizeof(buff));
anz_elemente = sizeof(table) / sizeof(table[0]);
DDCHelp Hilfe zur Programmiersprache C Seite 85 von 606
Siehe auch: Rangfolge der Operatoren
static
Syntax: static <datendefinition> ;
static <funktionsdefinition> ;
Beschreibung:
Der Speicherklassen-Spezifizierer static ermöglicht es bei lokalen Variablen einer Funktion, deren letzten Wert zwischen aufeinanderfolgenden Aufrufen der betreffenden Funktion unverändert zu erhalten. Eine static-Variable verhält sich wie eine lokale Variable, hat aber die Lebensdauer einer externen Variable.
Beispiele: static int i;
static void printnewline(void) {}
struct
Syntax: struct [<strukturtyp_name>] {
[<typ> <variablenname[, variablenname, ...]>] ;
.
.
.
} [<struktur_variablen>] ;
Beschreibung:
Strukturen werden benutzt, um mehrere Variablen in einem einzigen "Datenrecord" zusammenzufassen.
<strukturtyp_name> Optionaler Tag-Name, der den Typ der Struktur bezeichnet.
<struktur_variablen> Datendefinitionen, ebenfalls optional.
Obwohl <strukturtyp_name> und <struktur_variablen> optional sind, ist eine der beiden
Angaben zwingend erforderlich.
Elemente im Record werden durch Angabe ihres Typs (<typ>), gefolgt von einem oder mehreren
Variablennamen (durch Kommas getrennte Liste mit <variablenname>) definiert.
Unterschiedliche Variablentypen werden durch ein Semikolon getrennt.
Zum Zugriff auf einzelne Elemente in einer Struktur dient der Elementselektor (.).
Um weitere Variablen desselben Strukturtyps zu deklarieren, schreibt man das Schlüsselwort
struct, gefolgt von <strukturtyp_name>, gefolgt von den Variablennamen.
Beispiel: struct meine_strukt {
char name[80], telefon_nummer[80];
int alter, groesse;
} mein_freund;
DDCHelp Hilfe zur Programmiersprache C Seite 86 von 606
strcpy(mein_freund.name,"Mr. Wizard"); /* Zugriff auf ein Element */
struct meine_strukt mein_freund[100]; /* Deklarieren weiterer Variablen
*/
Siehe auch: Bitfelder
class
Direkter Elementselektor
public
Rangfolge der Operatoren
union
switch
Syntax: switch ( <switch_variable> ) {
case <konstantenausdruck> : <anweisung>; [break;]
.
.
.
default : <anweisung>;
}
Beschreibung:
Die Anweisung switch übergibt die Ablaufkontrolle an dasjenige case-Label, das dem Wert der
<switch_variable> entspricht, und es werden dann die dem case-Label folgenden
Anweisungen ausgeführt.
Wenn kein case-Label die Bedingung erfüllt, so geht die Ablaufkontrolle zum Label default, und die darauf folgenden Anweisungen werden ausgeführt.
Um zu vermeiden, dass anschließend noch die Anweisungen anderer case-Zweige ausgeführt werden und um die Ausführung der switch-Anweisung zu beenden, schließt man jeden case-Zweig mit der Anweisung break ab.
Siehe auch: break
case
default
Beispiel: switch (operand) {
case MULTIPLIZIEREN: x *= y; break;
case DIVIDIEREN: x /= y; break;
case ADDIEREN: x += y; break;
case SUBTRAHIEREN: x -= y; break;
case INKREMENTIEREN2: x++; /* Weiter beim nächsten case. */
case INKREMENTIEREN1: x++; break;
case POTENZIEREN:
case WURZEL:
case MODULO: printf("Nicht ausgeführt\n"); break;
default: printf("Programmfehler!\n");
DDCHelp Hilfe zur Programmiersprache C Seite 87 von 606
exit(1);
}
typedef
Syntax: typedef <typ_definition> <bezeichner> ;
Beschreibung:
Das Schlüsselwort typedef dient dazu, der Datendefinition <typ_definition> den Namen
<bezeichner> zuzuordnen.
Beispiele: typedef unsigned char byte;
typedef char str40[41];
typedef struct {
double re, im;
} komplex;
union
Syntax: union [<union_typ_name>] {
<typ> <variablen_namen> ;
...
} [<union-variablen>] ;
Beschreibung:
Eine Variante (union) ermöglicht es, Variablen zu definieren, die sich denselben Speicherbereich teilen.
Der Compiler reserviert genügend Speicherplatz für das größte Element der Variante eine_zahl, vgl. das Beispiel.
Im Gegensatz zu einer Struktur werden die Variablen eine_zahl.i und eine_zahl.l am gleichen Speicherplatz gespeichert. Das Speichern der einen überschreibt also die andere.
Zum Zugriff auf einzelne Elemente einer Variante dient der Elementselektor (.).
Beispiel: union int_oder_long {
int i;
long l;
} eine_zahl;
Siehe auch: Bitfelder
class
public
Elementselektor
struct
DDCHelp Hilfe zur Programmiersprache C Seite 88 von 606
unsigned
Syntax: unsigned <typ> <variable> ;
Beschreibung:
Der Typmodifizierer unsigned wird verwendet, wenn der Wert einer Variablen stets positiv ist. Dieser Modifizierer kann auf die Basistypen int, char, long und short angewendet werden.
Fehlt in einer Deklaration die Angabe des Basistyps, so wird dafür int angenommen.
Beispiele: unsigned int i;
unsigned i; /* Gleichwertig mit "unsigned int i;" */
unsigned long int l; /* "int" ist erlaubt, aber nicht erforderlich */
unsigned char ch; /* Voreinstellung für char ist unsigned */
Siehe auch: char
int
long
short
signed
Arithmetische Standardkonvertierungen
void
Syntax: void bezeichner
Beschreibung:
Das Schlüsselwort void bezeichnet den Typ des Rückgabewerts von Funktionen, die keinen Wert zurückliefern.
void hallo(char *name)
{
printf("Hallo, %s.",name);
}
Die Angabe void in der Parameterliste einer Funktion bedeutet, dass die Funktion keine Parameter hat.
int init(void)
{
return 1;
}
void-Zeiger:
Es können auch Zeiger vom Typ "Zeiger auf void" deklariert werden.
void-Zeiger können nicht ohne explizite Typumwandlung dereferenziert werden, weil der Compiler sonst die Größe des Objekts, auf das der Zeiger zeigt, nicht erkennen kann.
DDCHelp Hilfe zur Programmiersprache C Seite 89 von 606
Beispiel: int x;
float r;
void *p = &x; /* p zeigt auf x */
int main (void)
*(int *) p = 2;
p = &r; /* p zeigt auf r */
*(float *)p = 1.1;
}
while
Syntax: while ( <bedingung> ) <anweisung>
Beschreibung:
Das Schlüsselwort while dient zum Programmieren einer while-Schleife.
Die <anweisung> wird so lange wiederholt ausgeführt, bis der Wert von <bedingung> null ist.
Die Prüfung findet statt, bevor <anweisung> ausgeführt wird. Deshalb wird die Schleife keinmal
durchlaufen, falls <bedingung> zu Anfang des ersten Durchlaufs den Wert Null ergibt.
Beispiel: while (*p == ' ') p++;
Siehe auch: do
Parametertypen und möglicherweise verwendete Register
Um zu entscheiden, welche Parameter in Registern übergeben werden, geht der Compiler nach folgenden Regeln vor.
Parametertyp Register
char (signed und unsigned) AL, DL, BL
integer (signed und unsigned) AX, DX, BX
long (signed und unsigned) DX:AX
near-Zeiger AX, DX, BX
Bei jeder Funktion können nur drei Parameter in Registern übergeben werden.
Gehen Sie nicht davon aus, dass die Registerzuordnung die Reihenfolge der Funktionsparameter widerspiegelt. far-Zeiger sowie Parameter vom Typ Variante, Struktur oder Gleitkommazahl (float, double und long) werden auf den Stack gelegt.
Datentypen (16 Bit)
Typ Größe Wertebereich
DDCHelp Hilfe zur Programmiersprache C Seite 90 von 606
unsigned char 8 Bit 0 bis 255
char 8 Bit -128 bis 127
enum 16 Bit -32.768 bis 32.767
unsigned int 16 Bit 0 bis 65.535
short int 16 Bit -32.768 bis 32.767
int 16 Bit -32.768 bis 32.767
unsigned long 32 Bit 0 bis 4.294.967.295
long 32 Bit -2.147.483.648 bis 2.147.483.647
float 32 Bit 3,4 x 10-38 bis 3,4 x 10+38
double 64 Bit 1,7 x 10-308 bis 1,7 x 10+308
long double 80 Bit 3,4 x 10-4932 bis 1,1 x 10+4932
near (Zeiger) 16 Bit entfällt
far (Zeiger) 32 Bit entfällt
Siehe auch: Datentypen (32 Bit)
char
double
enum
far
float
int
long
near
Datentypen (32 Bit)
Typ Größe Wertebereich
unsigned char 8 Bit 0 bis 255
char 8 Bit -128 bis 127
short int 16 Bit -32.768 bis 32.767
unsigned int 32 Bit 0 bis 4.294.967.295
int 32 Bit -2.147.483.648 bis 2.147.483.647
unsigned long 32 Bit 0 bis 4.294.967.295
enum 16 Bit -2.147.483.648 bis 2.147.483.647
long 32 Bit -2.147.483.648 bis 2.147.483.647
float 32 Bit 3,4 x 10-38 bis 3,4 x 10+38
double 64 Bit 1,7 x 10-308 bis 1,7 x 10+308
long double 80 Bit 3,4 x 10-4932 to 1,1 x 10+4932
near (Zeiger) 32 Bit entfällt
far (Zeiger) 32 Bit entfällt
DDCHelp Hilfe zur Programmiersprache C Seite 91 von 606
Siehe auch: Datentypen (16 Bit)
char
double
enum
far
float
int
long
near
Register-Pseudovariablen
_AX _AL _AH _SI _es
_BX _BL _BH _DI _ss
_CX _CL _CH _BP _cs
_DX _DL _DH _SP _ds
_FLAGS
Alle Register-Pseudovariablen (außer _FLAGS) sind den namensgebenden Universal-, Segment-, Adress- und Spezialregistern zugeordnet.
Sie können Register-Pseudovariablen überall dort einsetzen, wo eine int-Variable zulässig ist. Diese Variablen geben Ihnen eine direkte Zugriffsmöglichkeit auf die entsprechenden 80x86-Register.
Das 16-Bit-Flag-Register enthält Informationen über den Status des 80x86 und über die Ergebnisse der zuletzt ausgeführten Befehle.
Beispiel: _AX = 0x4c00;
Operatoren (Übersicht)
Operatoren sind Token, die bestimmte Verarbeitungsaktionen bewirken, wenn sie auf Variablen und andere Objekte in einem Ausdruck angewandt werden. Die hier beschriebenen Operatoren entsprechen denen des ANSI-Standards:
Arithmetische Operatoren
Bedingungsoperator
Bitweise Operatoren
C++ spezifische Operatoren
Komma-Operator
Logische Operatoren
sizeof-Operatoren
Suffix-Operatoren
Präprozessor-Operatoren
Referenzierungs-/Dereferenzierungsoperatoren
Relationale Operatoren
DDCHelp Hilfe zur Programmiersprache C Seite 92 von 606
Zuweisungsoperatoren
Alle Operatoren können überladen werden, mit Ausnahme der folgenden Operatoren:
. Direkte Elementauswahl in C++
.* Dereferenzierung in C++
:: Gültigkeitsbereich-Zugriff in C++
?: Bedingungsoperator
Je nach Kontext kann ein Operator eine von mehreren Bedeutungen haben. Für den Operator & gibt es beispielsweise die folgenden drei Interpretationsmöglichkeiten:
Bitweises UND (A & B)
Adressoperator (&A)
Referenz-Modifizierer in C++
Hinweis: Bei aus mehreren Einzelzeichen bestehenden Operatoren dürfen keine Leerzeichen zwischen ihnen eingefügt werden. Solche Leerzeichen verändern die Bedeutung des Operators und führen zu einem Fehler.
Binäre Operatoren
Operatoren
Es gibt die folgenden binären Operatoren:
Arithmetische Operatoren + Binäres Plus (Addition)
- Binäres Minus (Subtraktion)
* Multiplikation
/ Division
% Divisionsrest (Modulus)
Bitweise Operatoren << Linksschieben
>> Rechtsschieben
& Bitweises UND
^ Bitweises XOR (exklusives ODER)
| Bitweises inklusives ODER
Logische Operatoren && Logisches UND
|| Logisches ODER
Zuweisungsoperatoren = Zuweisung
*= Zuweisung mit Multiplikation
/= Zuweisung mit Division
%= Zuweisung mit Ermittlung des Divisionsrests (Modulus)
+= Zuweisung mit Addition
-= Zuweisung mit Subtraktion
<<= Zuweisung mit Linksschieben
>>= Zuweisung mit Rechtsschieben
&= Zuweisung mit bitweisem UND
^= Zuweisung mit bitweisem exklusivem ODER
|= Zuweisung mit bitweisem ODER
Relationale Operatoren < Kleiner als
> Größer als
<= Kleiner als oder gleich
DDCHelp Hilfe zur Programmiersprache C Seite 93 von 606
>= Größer als oder gleich
== Gleich
!= Ungleich
Elementauswahl-Operatoren . Direkte Elementauswahl
-> Indirekte Elementauswahl
Klassenelementzugriffs-Operat. :: Zugriff auf Gültigkeitsbereich
.* Dereferenzierungszeiger auf Klassenelement
->* Dereferenzierungszeiger auf Klassenelement
Bedingungsoperator ? : Ein ternärer Operator (drei Operanden), Beispiel:
a ? x : y "if a then x else y"
Komma-Operator , Ausdruck auswerten
Siehe auch: Interpunktionszeichen
Adressoperator &
Unäre Operatoren
Syntax: <unärer-operator> <unärer-ausdruck>
oder
<unärer-operator> <typ><unärer-ausdruck>
Beschreibung:
Die folgenden unären Operatoren stehen zur Verfügung:
! Logische Negation
* Dereferenzierung
++ Inkrement
~ Bitweise Negation
-- Dekrement
- Unäres Minus
+ Unäres Plus
Siehe auch: Virtuell
Siehe auch: Überladen von Operatoren
Rangfolge der Operatoren
Interpunktionszeichen
Rangfolge der Operatoren
Operatoren
Operatoren, die in derselben Zeile stehen, sind gleichrangig.
DDCHelp Hilfe zur Programmiersprache C Seite 94 von 606
Operatoren Assoziativität
() [] -> :: . von links nach rechts
! ~ + - ++ -- & * sizeof new delete von rechts nach links
.* ->* von links nach rechts
* / % von links nach rechts
+ - von links nach rechts
<< >> von links nach rechts
< <= > >= von links nach rechts
== != von links nach rechts
& von links nach rechts
^ von links nach rechts
| von links nach rechts
&& von links nach rechts
|| von links nach rechts
?: von rechts nach links
= *= /= %= += -= &= ^= |= <<= >>= von rechts nach links
, von links nach rechts
Arithmetische Operatoren
Syntax: + cast-ausdruck
- cast-ausdruck
additions-ausdruck + multiplikations-ausdruck
additions-ausdruck - multiplikations-ausdruck
multiplikations-ausdruck * cast-ausdruck
multiplikations-ausdruck / cast-ausdruck
multiplikations-ausdruck % cast-ausdruck
suffix-ausdruck ++ (postinkrement)
++ unärer-ausdruck (preinkrement)
suffix-ausdruck -- (postdekrement)
-- unärer-ausdruck (predekrement)
Beschreibung:
Die arithmetischen Operatoren dienen zur Ausführung mathematischer Berechnungen.
Die unären Operatoren + und - geben dem Cast-Ausdruck einen positiven oder negativen Wert.
Die Operatoren + (Addition), - (Subtraktion), * (Multiplikation) und / (Division) bewirken die Ausführung der jeweiligen Grundrechenart, und zwar bei allen Ganzzahl- und Gleitkomma-Datentypen.
Der Operator % (Modulo-Operator) liefert den Rest einer ganzzahligen Division, er kann nicht auf Gleitkommatypen angewandt werden.
Der Operator ++ (Inkrement) addiert die Zahl 1 zum Wert des Ausdrucks. Beim Suffix-Inkrement-Operator findet diese Addition statt, nachdem der Ausdruck ausgewertet wurde, beim Präfix-Inkrement-Operator dagegen vor der Auswertung.
Der Operator -- (Dekrement) subtrahiert die Zahl 1 vom Wert des Ausdrucks. Beim Suffix-Dekrement-Operator findet diese Subtraktion statt, nachdem der Ausdruck ausgewertet wurde, beim Präfix-Dekrement-Operator dagegen vor der Auswertung.
DDCHelp Hilfe zur Programmiersprache C Seite 95 von 606
Zuweisungsoperatoren
Syntax: unärer-ausdruck zuweisungs-operator zuweisungs-ausdruck
Beschreibung:
Es gibt folgende Zuweisungsoperatoren:
= *= /= %= += -=
<<= >>= &= ^= |=
Der Operator = ist dabei der einzige einfache Zuweisungsoperator, die anderen sind kombinierte Zuweisungsoperatoren.
Im Ausdruck E1 = E2 muss E1 ein modifizierbarer L-Wert. sein. Der Zuweisungsausdruck selbst ist kein L-Wert.
Der Ausdruck
E1 op= E2
hat den gleichen Effekt wie
E1 = E1 op E2
außer, dass der L-Wert E1 im ersten Fall nur einmal ausgewertet wird. Beispiel: E1 += E2 ist gleichwertig mit E1 = E1 + E2.
Der Wert des Zuweisungsausdrucks nach Ausführung der Zuweisung ist E1.
Bei einfachen sowie bei kombinierten Zuweisungen müssen die Operanden E1 und E2 einer der folgenden Bedingungen entsprechen:
1. E1 ist eine qualifizierte oder unqualifizierte Version eines arithmetischen Typs, und E2 hat einen arithmetischen Typ.
2. E1 ist eine qualifizierte oder unqualifizierte Version eines Struktur- oder Varianten-Typs, der mit dem Typ von E2 kompatibel ist.
3. E1 und E2 sind Zeiger auf qualifizierte oder unqualifizierte Versionen von kompatiblen Typen, und der Typ, auf den der linke Zeiger zeigt, hat alle Qualifizierer des Typs, auf den der rechte Zeiger zeigt.
4. Einer der Operanden E1 und E2 ist ein Zeiger auf ein Objekt oder auf einen unvollständigen Typ, und der andere Operand ist ein Zeiger auf einen qualifizierten oder unqualifizierten void-Typ. Der Typ, auf den der linke Zeiger zeigt, hat alle Qualifizierer des Typs, auf den der rechte Zeiger zeigt.
5. E1 ist ein Zeiger, und E2 ist die Nullzeiger-Konstante (NULL).
Hinweis: Leerzeichen innerhalb der Operatoren für kombinierte Zuweisung (zum Beispiel +<Leerzeichen>=) führen zu Fehlern.
Siehe auch: Interpunktionszeichen
Bitweise Operatoren
Syntax: AND-ausdruck & gleichheits-ausdruck
exclusiv-ODER-ausdruck ^ UND-ausdruck
inclusiv-ODER-ausdruck exclusiv-ODER-ausdruck
~cast-ausdruck
schiebe-ausdruck << additions-ausdruck
schiebe-ausdruck >> additions-ausdruck
Beschreibung:
Die bitweisen Operatoren dienen zur Änderung einzelner Bits anstelle einer kompletten Zahl.
DDCHelp Hilfe zur Programmiersprache C Seite 96 von 606
Operator Beschreibung
& Bitweises UND; vergleicht paarweise je zwei korrespondierende Bits und setzt das entsprechende Bit im Ergebnis auf 1, wenn beide Bits 1 sind, andernfalls auf 0.
| Bitweises inklusives ODER; vergleicht paarweise je zwei korrespondierende Bits und setzt das entsprechende Bit im Ergebnis auf 1, wenn eins oder beide Bits 1 sind, andernfalls auf 0.
^ Bitweises exklusives ODER; vergleicht paarweise je zwei korrespondierende Bits und setzt das entsprechende Bit im Ergebnis auf 1, wenn beide Bits unterschiedlich sind, andernfalls auf 0.
~ Bitweise Negation; invertiert jedes Bit. Dieser Operator wird auch zum Erzeugen von Destruktoren benutzt.
>> Bitweises Schieben nach rechts; verschiebt alle Bits nach rechts, wobei das jeweils ganz rechte Bit verworfen und das ganz linke auf 0 gesetzt wird.
<< Bitweises Schieben nach links; verschiebt alle Bits nach links, wobei das jeweils ganz linke Bit verworfen und das ganz rechte auf 0 gesetzt wird.
Beide Operanden eines bitweisen Operators müssen einen Ganzzahltyp haben.
Bitwert Ergebnisse der verschiedenen Operatoren
E1 E2 E1 & E2 E1 ^ E2 E1 | E2
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 0 1
Hinweis: Die Operatoren &, >> und << sind kontextabhängig:
& kann auch der Zeigerreferenzoperator sein
>> kann auch der Eingabe-Operator in einem Ein-/Ausgabeausdruck sein
<< kann auch der Ausgabe-Operator in einem Ein-/Ausgabeausdruck sein
Siehe auch:
Destruktoren
Überladen von Operatoren
Komma-Interpunktionszeichen und Komma-Operator
Syntax: ausdruck , zuweisungs-ausdruck
Beschreibung:
Das Komma trennt die Elemente einer Liste von Funktionsargumenten.
Außerdem wird das Komma auch als Operator in Kommaausdrücken verwendet. Es ist zulässig, diese beiden Verwendungsarten zu mischen, aber es müssen dann Klammern zur Klarstellung gesetzt werden.
Der linke Operand E1 wird als void-Ausdruck ausgewertet. Danach wird E2 ausgewertet und liefert den Wert und den Typ des Kommaausdrucks. Dies kann auch rekursiv geschehen; bei dem Ausdruck
DDCHelp Hilfe zur Programmiersprache C Seite 97 von 606
E1, E2, ..., En
wird von links nach rechts jeder Einzelausdruck Ei ausgewertet, und der Wert und der Typ von En liefern das Ergebnis des gesamten Ausdrucks.
Zur Vermeidung von Mehrdeutigkeiten bei der Verwendung von Kommas in Funktionsargument- oder Initialisierer-Listen müssen Klammern eingesetzt werden. Im folgenden Beispiel
func(i, (j = 1, j + 4), k);
wird die Funktion func mit drei Argumenten (i, 5, k), nicht mit vier, aufgerufen.
Bedingungsoperator
Operatoren
Syntax: logischer-OR-ausdruck ? ausdruck : conditional-ausdruck
Beschreibung:
Der Bedingungsoperator ?: ist ein ternärer Operator.
Im Ausdruck E1 ? E2 : E3 wird E1 zuerst ausgewertet. Wenn sein Wert ungleich Null (Wahr) ist,
so wird danach E2 ausgewertet und E3 ignoriert. Wenn E1 Null (Falsch) ergibt, so wird E3 ausgewertet und E2 ignoriert.
Das Ergebnis von E1 ? E2 : E3 ist entweder der Wert von E2 oder von E3, abhängig davon,
welcher dieser Werte ausgewertet wurde.
E1 muss ein Ausdruck von skalarem Typ sein. E2 und E3 müssen einer der folgenden Regeln entsprechen:
1. Beide sind arithmetische Typen. In diesem Fall unterliegen E2 und E3 den arithmetischen Standardkonvertierungen und das Ergebnis entspricht dem üblichen Ergebnistyp dieser Konvertierungen.
2. Beide Operanden sind kompatible Struktur- oder Varianten-Typen. Das Ergebnis ist vom Struktur- oder Varianten-Typ von E2 und E3.
3. Beide Operanden sind vom Typ void. Das Ergebnis ist vom Typ void.
4. Beide Operanden sind Zeiger auf qualifizierte oder unqualifizierte kompatible Typen. Der Typ des Ergebnisses ist ein Zeiger auf einen Typ, der alle Typqualifizierer der Typen, auf die beide Operanden zeigen, besitzt.
5. Einer der Operanden ist ein Zeiger, der andere eine Nullzeiger-Konstante. Der Typ des Ergebnisses ist ein Zeiger auf einen Typ, der alle Typqualifizierer der Typen, auf die beide Operanden zeigen, besitzt.
6. Einer der Operanden ist ein Zeiger auf ein Objekt oder auf einen unvollständigen Typ, der andere ist ein Zeiger auf einen qualifizierten oder unqualifizierten void-Typ. Das Ergebnis ist vom Typ des Operanden, der nicht auf void zeigt.
Logische Operatoren
Operatoren
Syntax: logischer-UND-ausdruck && inklusiv-ODER-ausdruck
logischer-ODER-ausdruck || logischer-UND-ausdruck
! cast-ausdruck
Beschreibung:
Operanden in logischen Ausdrücken müssen von einem skalaren Typ sein.
&& Logisches UND; liefert das Ergebnis Wahr (1), wenn beide Ausdrücke bei der Auswertung einen Wert ungleich Null ergeben, andernfalls ist das Ergebnis Falsch (0). Wenn der erste Ausdruck Falsch ergibt, wird der zweite nicht ausgewertet.
|| Logisches ODER; liefert das Ergebnis Wahr (1), wenn mindestens einer der beiden Ausdrücke bei der Auswertung einen Wert ungleich Null ergibt, andernfalls ist das Ergebnis
DDCHelp Hilfe zur Programmiersprache C Seite 98 von 606
Falsch (0). Wenn der erste Ausdruck Wahr ergibt, wird der zweite nicht ausgewertet.
! Logische Negation; liefert das Ergebnis Wahr (1), wenn der gesamte Ausdruck einen Wert von Null hat, andernfalls ist das Ergebnis Falsch (0). Der Ausdruck !E ist gleichwertig mit (0 == E).
Suffix-Operatoren
Syntax: suffix-ausdruck(<arg-ausdruck-list>)
array deklaration [konstanter-ausdruck]
zusammengesetzte anweisung { anweisungs-liste }
suffix-ausdruck . bezeichner
suffix-ausdruck -> bezeichner
Beschreibung:
( ) Dient zur Gliederung von Ausdrücken, zur Einfassung von Bedingungsausdrücken und zur Kennzeichnung von Funktionsaufrufen und -parametern.
{ } Dient zur Markierung von Anfang und Ende einer zusammengesetzten Anweisung.
[ ] Dient zur Markierung von einfachen und mehrfachen Array-Indizes.
. Dient zum Zugriff auf Struktur- und Variantenelemente.
-> Dient zum Zugriff auf Struktur- und Variantenelemente.
Präprozessor-Operatoren
Operatoren
Beschreibung:
Das Zeichen # (Nummernzeichen) fungiert als Präprozessor-Direktive, wenn es als erstes Nicht-Whitespace-Zeichen in einer Zeile steht.
Es bestimmt eine Compiler-Aktion, die nicht unbedingt mit der Code-Erzeugung zusammenhängen muss.
Die Zeichen # und ## (doppeltes Nummernzeichen) bewirken außerdem in der Analysephase des Präprozessors das Ersetzen und Zusammenfügen von Quelltextelementen.
Referenzierungs-/Dereferenzierungsoperatoren
Syntax: & cast-ausdruck
* cast-ausdruck
Beschreibung:
Die Operatoren & und * arbeiten zusammen, um Zeiger zu referenzieren bzw. zu dereferenzieren, die an Funktionen übergeben werden.
Referenzierungsoperator ( & )
Der Referenzierungsoperator wird verwendet, um die Adresse eines Zeigers an eine Funktion außerhalb von main() zu übergeben.
Der Operand (cast-Ausdruck) muss eins der folgenden sein:
ein Funktionsdesignator
ein L-Wert, der ein Objekt bezeichnet, das kein Bitfeld ist und nicht die Speicherklasse register hat.
Hat der Operand den Typ typ, so ist das Ergebnis ein Zeiger auf typ.
DDCHelp Hilfe zur Programmiersprache C Seite 99 von 606
Dereferenzierungsoperator ( * )
Der Dereferenzierungsoperator kann in einem Variablenausdruck verwendet werden, um einen Zeiger zu erzeugen. Außerdem kann dieser Operator in external-Funktionen benutzt werden, um den Wert eines Zeigers, der per Referenz übergeben wurde, zu erhalten.
Ist der Operand vom Typ "Zeiger auf Funktion", so ist das Ergebnis ein Funktionsdesignator.
Ist der Operand ein Zeiger auf ein Objekt, so ist das Ergebnis ein L-Wert, der das Objekt bezeichnet.
Unter jeder der folgenden Bedingungen ist das Ergebnis der Dereferenzierung undefiniert:
1. Der Cast-Ausdruck ist ein Nullzeiger.
2. Der Cast-Ausdruck liefert die Adresse einer auto-Variablen und die Ausführung des betreffenden Blocks ist bereits beendet.
Hinweis: Mit & wird auch der Operator für das bitweise UND bezeichnet.
Das Zeichen * kann auch der Multiplikationsoperator sein.
Siehe auch: Überladen von Operatoren
Interpunktionszeichen
Relationale Operatoren
Syntax: gleichheit-ausdruck == relationaler-ausdruck
gleichheits-ausdruck != relationaler-ausdruck
relationaler-ausdruck < schiebe-ausdruck
relationaler-ausdruck > schiebe-ausdruck
relationaler-ausdruck <= schiebe-ausdruck
relationaler-ausdruck >= schiebe-ausdruck
Beschreibung:
Die relationalen Operatoren werden für die Prüfung von Ausdrücken auf Gleichheit oder Ungleichheit benutzt. Wenn die Aussage wahr ist, ergibt der relationale Ausdruck den Wert Wahr (1), andernfalls Falsch (0).
== gleich
!= ungleich
> größer als
< kleiner als
>= größer als oder gleich
<= kleiner als oder gleich
In dem Ausdruck
E1 <operator> E2
müssen die Operanden eine der folgenden Bedingungen erfüllen:
1. E1 und E2 sind beides arithmetische Typen.
2. E1 und E2 sind beides Zeiger auf qualifizierte oder unqualifizierte Versionen von kompatiblen Typen.
3. E1 oder E2 ist ein Zeiger auf ein Objekt oder auf einen unvollständigen Typ, und der jeweils andere Ausdruck ist ein Zeiger auf eine qualifizierte oder unqualifizierte Version des Typs void.
4. E1 oder E2 ist ein Zeiger, und der jeweils andere Ausdruck ist eine Nullzeiger-Konstante.
DDCHelp Hilfe zur Programmiersprache C Seite 100 von 606
Array-Indizierungsoperator
SyntaxEckige Klammern [ ] enthalten die Indizes bei ein- oder mehrdimensionalen Arrays. Der Ausdruck
<exp1>[exp2]
ist nach Definition gleichwertig mit
*((exp1) + (exp2))
wobei eine der beiden folgenden Möglichkeiten gilt:
exp1 ist ein Zeiger, und exp2 ist ein Ganzzahlwert.
exp1 ist ein Ganzzahlwert, und exp2 ist ein Zeiger
Klammeroperator
Syntax: suffix-ausdruck(<arg-ausdruck-liste>)
Beschreibung:
Runde Klammern () dienen zur
Gliederung von Ausdrücken
Einfassung von Bedingungsausdrücken
Kennzeichnung von Funktionsaufrufen und -parametern
Der Wert eines Funktionsaufrufausdrucks wird, falls er einen hat, von der return-Anweisung in der Funktionsdefinition bestimmt.
Dies ist ein Aufruf, der durch den Suffixausdruck spezifizierten Funktion.
arg-ausdruck-liste ist eine durch Kommas getrennte Liste von Ausdrücken beliebigen Typs, die die Funktionsargumente darstellen.
Operator für direkte Elementauswahl
Syntax: suffix-ausdruck . bezeichner
suffix-ausdruck muss von einem Struktur- oder Variantentyp sein.
bezeichner muss der Name eines Elements dieser Struktur oder Variante sein.
Beschreibung:
Dieser Auswahloperator (.) ermöglicht den Zugriff auf Elemente von Strukturen und Varianten.
Angenommen, das Objekt s ist vom Strukturtyp S und sptr ist ein Zeiger auf S. Dann ist, falls m der Name eines Elements vom Typ M (deklariert in S) ist, der folgende Ausdruck
s.m
vom Typ M und repräsentiert das Elementobjekt m in s.
Beispiele struct meinestruct {
int i
char str[21]
double d
} s, *sptr=&s
...
s.i = 3 // Zuweisung an das Element i von meinestruct s.
Der Ausdruck s.m ist ein L-Wert, vorausgesetzt, s ist kein L-Wert und m ist kein Array-Typ.
Wenn die Struktur B ein Element vom Typ Struktur A enthält, kann auf die Elemente von A per
DDCHelp Hilfe zur Programmiersprache C Seite 101 von 606
zweimaliger Anwendung des Elementauswahloperators zugegriffen werden.
Operator für indirekte Elementauswahl
Syntax: suffix-ausdruck -> bezeichner
suffix-ausdruck muss ein Zeiger auf eine Struktur oder Variante sein.
identifier muss der Name eines Elements dieser Struktur bzw. Variante sein.
Der Ausdruck bestimmt ein Element eines Struktur- oder Variantenobjekts. Der Wert des Ausdrucks ist der Wert des ausgewählten Elements. Dies ist dann und nur dann ein L-Wert, wenn der Suffixausdruck ein L-Wert ist.
Beschreibung:
Dieser Auswahloperator (->) ermöglicht den Zugriff auf Elemente von Strukturen und Varianten.
Angenommen, das Objekt s ist vom Strukturtyp S und sptr ist ein Zeiger auf S. Dann ist, falls m der Name eines Elements vom Typ M (deklariert in S) ist, der folgende Ausdruck
sptr->m
vom Typ M und repräsentiert das Elementobjekt m in s. Es handelt sich also um ein nützliches Synonym für
(*sptr).m
-> Beispiele: struct meinestruct {
int i
char str[21]
double d
} s, *sptr=&s
.
.
.
sptr->d = 1.23 // Zuweisung an das Element d von meinestruct s
Der Ausdruck sptr->m ist ein L-Wert, solange m nicht ein Array-typ ist.
Wenn die Struktur B ein Element vom Typ Struktur A enthält, kann auf die Elemente von A per zweimaliger Anwendung des Elementauswahloperators zugegriffen werden.
L-Werte
Operatoren
Ein L-Wert ist ein Objektlokator, also ein Ausdruck, der ein Objekt bezeichnet. Ein Beispiel für einen L-Wert-Ausdruck ist *P, wobei P ein beliebiger Zeiger (außer dem Nullzeiger) ist.
Ein modifizierbarer L-Wert ist ein Bezeichner oder Ausdruck, der zu einem Objekt gehört, auf das zugegriffen werden kann und das im Speicher verändert werden darf.
Ein const-Zeiger auf eine Konstante ist beispielsweise kein modifizierbarer L-Wert.
Ein Zeiger auf eine Konstante kann zwar verändert werden, sein dereferenzierter Wert (die Konstante) aber nicht.
Historisch gesehen steht das L für "links", was andeuten sollte, dass ein L-Wert auf der linken ("empfangenden") Seite einer Wertzuweisung zulässig ist. In neueren Sprachversionen wie dieser dürfen nur noch modifizierbare L-Werte auf der linken Seite einer Wertzuweisung stehen.
Beispiel: Sind a und b die Namen von Ganzzahlvariablen ohne const-Qualifizierer mit entsprechend zugewiesenem Speicherplatz, so handelt es sich bei beiden um modifizierbare L-Werte. Damit sind Anweisungen wie
a = 1
DDCHelp Hilfe zur Programmiersprache C Seite 102 von 606
b = a + b
zulässig.
R-Werte
Der Ausdruck
a + b
ist kein L-Wert. Die Anweisung a + b = a ist daher unzulässig, denn der Ausdruck auf der linken Seite bezeichnet kein Objekt.
Solche Ausdrücke werden oft R-Werte (R für "rechts") genannt.
Inkrement-/Dekrement-Operatoren
Operatoren
Inkrement-Operator ( ++ )
Syntax: suffix-ausdruck ++ (postinkrement)
++ unärer-ausdruck (preinkrement)
Der als Operand dienende Ausdruck muss von einem skalaren Typ (arithmetischer Typ oder Zeiger) sein; außerdem muss er ein modifizierbarer L-Wert sein.
Postinkrement-Operator
Für den Postinkrement-Operator gilt, dass der Wert des gesamten Ausdrucks gleich dem Wert des Suffixausdrucks vor der Inkrementierung ist.
Nachdem der Suffixausdruck ausgewertet ist, wird der Operand um 1 erhöht.
Präinkrement-Operator
Der Operand wird um 1 erhöht, bevor sein Wert ausgewertet wird. Der Wert des gesamten Ausdrucks ist gleich dem erhöhten Wert des Operanden.
Der Erhöhungswert wird dem Typ des Operanden angepasst.
Für Zeigertypen gelten die Regeln der Zeigerarithmetik.
Dekrement-Operator ( -- )
Syntax:
suffix-ausdruck -- (postdekrement)
-- unärer-ausdruck (predekrement)
Für den Dekrement-Operator gelten dieselben Regeln wie für den Inkrementoperator, mit dem einzigen Unterschied, dass der Operand um 1 vermindert wird, bevor bzw. nachdem der gesamte Ausdruck ausgewertet wird.
Argumente per Referenz übergeben
SyntaxWährend in C Argumente nur als Werte übergeben werden können, ist es in C++ möglich, Argumente als Wert oder als Referenz zu übergeben.
C++ Referenzen, die mit & erzeugt wurden, sind Zeigertypen sehr ähnlich. Sie erzeugen Stellvertreter für Objekte, die zur Übergabe von Referenzen als Funktionsargumente benutzt werden können.
Der Referenzdeklarator (&) kann dazu benutzt werden, Referenzen außerhalb von Funktionen zu deklarieren:
int i = 0;
int &ir = i; // ir ist Stellvertreter für i
ir = 2; // wie i = 2
Der L-Wert ir wird als Stellvertreter für i erzeugt, wobei der Initialisierungswert vom gleichen Typ wie die Referenz sein muss.
DDCHelp Hilfe zur Programmiersprache C Seite 103 von 606
Jede Operation mit ir hat dieselben Auswirkungen wie eine Operation mit i. Zum Beispiel:
ir = 2
weist i den Wert 2 zu, und
&ir
liefert die Adresse von i zurück.
Der Referenzdeklarator kann auch dazu benutzt werden, um Parameter als Referenzen in einer Funktion zu deklarieren:
void func1 (int i);
void func2 (int &ir);
// ir ist vom Typ "Referenz auf int"
...
int sum=3;
func1(sum); // sum wird als Wert übergeben
func2(sum); // sum wird als Referenz übergeben
Das als Referenz übergebene Argument sum kann von der Funktion func2 direkt geändert werden.
func1 dagegen erhält nur eine Kopie des Wertes von sum und kann so sum selbst nicht ändern.
Wird ein Argument x als Wert übergeben, erhält der entsprechende formale Parameter innerhalb dieser Funktion eine Kopie des Wertes von x.
Eine Änderung dieser Kopie innerhalb der aufgerufenen Funktion hat keine Auswirkung auf den Wert von x selbst.
Natürlich kann die Funktion einen Wert zurückgeben, der später zur Änderung von x benutzt werden kann; die Funktion kann die Änderungen allerdings nicht selbst durchführen.
Bei der traditionellen C-Methode zur Änderung von x verwendet man das Argument &x, also die Adresse von x und nicht x selbst.
Obwohl &x als Wert übergeben wird, kann die Funktion doch über die Kopie von &x auf x selbst zugreifen. Auch wenn x nicht von der Funktion geändert werden soll, ist es oft nützlich (manchmal aber auch mit unerwünschten Nebenwirkungen verbunden), &x zu übergeben, insbesondere, wenn x eine große Datenstruktur ist.
Die Übergabe des Zeigers erspart dann die aufwendige Kopie der Datenstruktur.
Siehe auch: Operator &
Interpunktionszeichen
Plus- und Minus-Operatoren
SyntaxUnär
In den folgenden unären Plusausdrücken
+ cast-ausdruck
- cast-ausdruck
muss der Operand cast-ausdruck von einem arithmetischen Typ sein.
Wirkung:
+ cast-ausdruck Wert des Operanden nach etwaigen erforderlichen Ganzzahltyp-Erweiterungen.
- cast-ausdruck Negativer Wert des Operanden nach etwaigen erforderlichen Ganzzahltyp-Erweiterungen.
Binär
Syntax: additions-ausdruck + multiplikations-ausdruck
DDCHelp Hilfe zur Programmiersprache C Seite 104 von 606
additions-ausdruck - multiplikations-ausdruck
Zulässige Operandentypen für op1 und op2:
1. op1 und op2 sind beide von einem arithmetischen Typ.
2. op1 ist ein Ganzzahltyp, und op2 ist ein Zeiger auf ein Objekt.
3. op2 ist ein Ganzzahltyp, und op1 ist ein Zeiger auf ein Objekt.
Im Fall 1 werden die Operanden den arithmetischen Standardkonvertierungen unterworfen, und das Ergebnis ist die arithmetische Summe der Operanden.
In den Fällen 2 und 3 gelten die Regeln für Zeigerarithmetik.
Zulässige Operandentypen für op1 - op2: 1. op1 und op2 sind beide von einem arithmetischen Typ.
2. op1 und op2 sind Zeiger auf kompatible Objekttypen.
3. op1 ist ein Zeiger auf ein Objekt, und op2 ist ein Ganzzahltyp.
Im Fall 1 werden die Operanden den arithmetischen Standardkonvertierungen unterworfen, und das Ergebnis ist die arithmetische Summe der Operanden.
In den Fällen 2 und 3 gelten die Regeln für Zeigerarithmetik.
Hinweis: Der unqualifizierte Typ typ gilt in diesem Zusammenhang als kompatibel zu den qualifizierten Typen const typ, volatile typ und const volatile typ.
Multiplikative Operatoren
Syntax: multiplikations-ausdruck * cast-ausdruck
multiplikations-ausdruck / cast-ausdruck
multiplikations-ausdruck % cast-ausdruck
Beschreibung:
Es gibt drei multiplikative Operatoren:
* (Multiplikation)
/ (Division)
% (Modulus, Rest)
Auf die Operanden werden die arithmetischen Standardumwandlungen angewendet.
(op1 * op2) Produkt der beiden Operanden
(op1 / op2) Quotient (op1 dividiert durch op2)
(op1 % op2) Rest bei der Division (op1 dividiert durch op2)
Für die Operatoren / und % muss op2 ungleich Null sein, op2 = 0 ergibt einen Fehler (man kann nicht durch Null teilen).
Falls op1 und op2 Ganzzahlwerte sind und der Quotient nicht ganzzahlig ist, gilt folgendes:
1. Wenn op1 und op2 gleiche Vorzeichen haben, so ergibt op1 / op2 die größte ganze Zahl, die kleiner als der wahre Quotient ist, und op1 % op2 erhält das Vorzeichen von op1.
2. Wenn op1 und op2 entgegengesetzte Vorzeichen haben, so ergibt op1 / op2 die kleinste ganze Zahl, die größer als der exakte Quotient ist, und op1 % op2 erhält das Vorzeichen von op1.
Hinweis: Es wird immer in Richtung auf Null gerundet.
Das Zeichen * ist kontextabhängig und kann auch als der Zeigerreferenzierungsoperator interpretiert werden.
Siehe auch: Überladen von Operatoren
Interpunktionszeichen
DDCHelp Hilfe zur Programmiersprache C Seite 105 von 606
Interpunktionszeichen
SyntaxDer Compiler kennt folgende Interpunktionszeichen (auch Trennzeichen genannt):
( ) Runde Klammern
{ } Geschweifte Klammern
, Komma
; Semikolon
: Doppelpunkt
... Ellipse
* Stern
= Gleichheitszeichen
# Nummernzeichen
Die meisten dieser Interpunktionszeichen dienen auch als Operatoren.
Siehe auch: Token
Geschweifte Klammern
Operatoren
Die geschweiften Klammern { } markieren den Beginn und das Ende einer zusammengesetzten Anweisung.
Semikolon
Operatoren
Das Semikolon (;) schließt eine Anweisung ab.
Jeder gültige C-Ausdruck (auch der leere Ausdruck), der durch ein Semikolon abgeschlossen ist, wird als Anweisung (Ausdrucksanweisung genannt) betrachtet.
Der Ausdruck wird ausgewertet und sein Wert danach verworfen. Falls der Ausdruck keine Seiteneffekte hat, kann er vom Compiler ignoriert werden.
Semikolons werden oft verwendet, um eine leere Anweisung zu erzeugen.
Doppelpunkt
Beispiele Operatoren
Der Doppelpunkt (:) wird für die Kennzeichnung einer mit einem Label versehenen Anweisung verwendet.
Beispiele: start: x=0
...
goto start
...
switch (a) {
case 1: puts("Eins")
break
case 2: puts("Zwei")
break
...
DDCHelp Hilfe zur Programmiersprache C Seite 106 von 606
default: puts("Nichts von allem!")
break
}
Ellipse
Operatoren
Eine Ellipse (...) besteht aus drei aufeinanderfolgenden Punkten ohne Whitespace dazwischen.
Eine Ellipse wird in einer Liste der formalen Argumente in einem Funktionsprototyp verwendet, um damit anzugeben, dass die Anzahl der Argumente variabel ist oder dass Argumente wechselnde Typen haben können. Beispiel:
void funk(int n, char ch,...)
Diese Deklaration legt fest, dass die Funktion func mit mindestens zwei Argumenten (das erste vom Typ int, das zweite vom Typ char) aufgerufen werden muss, dass aber noch eine beliebige Zahl weiterer Argumente folgen kann.
Das Komma vor der Ellipse ist nicht zwingend vorgeschrieben.
Gleichheitszeichen
Operatoren
Das Gleichheitszeichen (=) trennt Variablendeklarationen von Initialisierungslisten:
char array[5] = { 1, 2, 3, 4, 5 } ;
int x = 5;
In einer C-Funktion dürfen vor Variablendeklarationen keine ausführbaren Anweisungen stehen.
In C++ können (mit wenigen Einschränkungen) Dekarationen für jeden Typ an jeder Stelle im Programmtext stehen. In der Argumentliste einer C++ Funktion kennzeichnet das Gleichheitszeichen den Standardwert für einen Parameter:
int f(int i = 0) { ... } // Parameter i hat den Standardwert null
Das Gleichheitszeichen wird auch als Zuweisungsoperator verwendet.
Header-Dateien - Eine Zusammenfassung
Siehe auch
Header-Dateien, auch als Include-Dateien bezeichnet, enthalten Funktionsprototypdeklarationen
für Bibliotheksfunktionen. Datentypen und symbolische Konstanten, die mit den
Bibliotheksfunktionen verwendet werden, sind zusammen mit den globalen Variablen für die
Bibliotheksfunktionen definiert. Die Bibliotheken folgen im Allgemeinen dem ANSI C-Standard für
die Namen der Header-Dateien und ihrer Inhalte.
Hinweis: Die mittlere Spalte zeigt die C++ Header-Dateien und die für ANSI C definierten
Header-Dateien.
alloc.h Deklariert Speicherverwaltungsfunktionen (Speicherbelegung,
Speicherfreigabe, usw.).
assert.h ANSI C Definiert das Assert-Makro für die Fehlersuche.
bcd.h C++ Deklariert die C++ Klasse bcd und die überladenen Operatoren
für bcd und die mathematischen Funktionen von bcd.
bios.h Deklariert verschiedene Funktionen, die zum Aufruf der IBM-PC-
ROM-BIOS-Routinen verwendet werden.
checks.h C++ Definiert die Klassendiagnosemakros.
complex.h C++ Deklariert die komplexen mathematischen Funktionen von C++.
conio.h Deklariert verschiedene Funktionen, die für den Aufruf der
Textbildschirm-Ein-/Ausgabe-Routinen des Betriebssystems
verwendet werden.
DDCHelp Hilfe zur Programmiersprache C Seite 107 von 606
constrea.h C++ Definiert die Klassen conbuf und constream.
cstring.h C++ Definiert die String-Klassen.
ctype.h ANSI C Enthält die Informationen, die von den Zeichenklassifizierungs-
und Zeichenumwandlungsmakros verwendet werden (wie isalpha
und toascii).
date.h C++ Definiert die Datumsklasse.
_defs.h Definiert die Aufrufkonventionen für unterschiedliche
Applikationstypen und Speichermodelle.
dir.h Enthält Strukturen, Makros und Funktionen zur Arbeit mit
Verzeichnissen und Pfadangaben.
direct.h Definiert Strukturen, Makros und Funktionen für die Verwaltung
von Verzeichnissen und Pfadangaben.
dirent.h Deklariert Funktionen und Strukturen für POSIX-
Verzeichnisoperationen.
dos.h Definiert verschiedene Konstanten und enthält Deklarationen, die
für DOS- und 8086-spezifische Aufrufe benötigt werden.
errno.h ANSI C Definiert konstante beschreibende Abkürzungen für die
Fehlercodes.
except.h C++ Deklariert die Klassen und Funktionen zur Exception-Behandlung.
excpt.h Deklariert C-strukturierte Exception-Unterstützung.
fcntl.h Definiert symbolische Konstanten, die in Verbindung mit der
Bibliotheksroutine open verwendet werden.
file.h C++ Definiert die Klasse file.
float.h ANSI C Enthält Parameter für Gleitkommaroutinen.
fstream.h C++ Deklariert die C++ Stream-Klassen, die die Ein- und Ausgabe
in/aus eine/r Datei unterstützen.
generic.h C++ Enthält Makros für generische Klassendeklarationen.
io.h Enthält Strukturen und Deklarationen für die niedrigstufigen Ein-
/Ausgabe-Routinen.
iomanip.h C++ Deklariert die Ein-/Ausgabe-Manipulatoren der C++ Streams und
enthält Templates zur Erzeugung parametrisierter Manipulatoren.
iostream.h C++ Deklariert die C++ Basisstreamroutinen (I/O).
limits.h ANSI C Enthält Umgebungsparameter, Informationen über
Beschränkungen zur Compilierzeit und Bereiche integraler
Größen.
locale.h ANSI C Deklariert Funktionen, die landes- und sprachspezifische
Informationen enthalten.
malloc.h Deklariert Speicherverwaltungsfunktionen und -variablen.
math.h ANSI C Deklariert Prototypen für die mathematischen Funktionen und
Mathematikfehler-Handler.
mem.h Deklariert Speicherbearbeitungsfunktionen. (Viele dieser
Funktionen sind auch in string.h. definiert)
memory.h Enthält Speicherbearbeitungsfunktionen.
new.h C++ Zugriff auf _new_handler, und set_new_handler.
_nfile.h Definiert die maximale Anzahl geöffneter Dateien.
_null.h Definiert den Wert von NULL.
process.h Enthält Strukturen und Deklarationen für die Funktionen spawn...
und exec....
search.h Deklariert Funktionen für das Suchen und Sortieren.
setjmp.h ANSI C Deklariert die Funktionen longjmp und setjmp und definiert einen
Typ jmp_buf, der von diesen Funktionen genutzt wird.
share.h Definiert Parameter für die Funktionen zum Zugriff auf Dateien.
signal.h ANSI C Definiert Konstanten und Deklarationen für die Verwendung mit
den Signal- und Einrichtungsfunktionen.
DDCHelp Hilfe zur Programmiersprache C Seite 108 von 606
stdarg.h ANSI C Definiert Makros zum Lesen der Argumentenliste in Funktionen,
die für den Zugriff auf eine unterschiedliche Anzahl von
Argumenten deklariert sind (wie vprintf, vscanf, usw.).
stddef.h ANSI C Definiert verschiedene allgemeine Datentypen und Makros.
stdio.h ANSI C Definiert Typen und Makros, die für die Standardein- bzw. -
ausgabe (definiert durch Kernighan und Ritchie und erweitert
unter UNIX System V) benötigt werden. Definiert die
vordefinierten Streams der Standard-I/O (stdin, stdout, stdprn und
stderr)und deklariert die Ein-/Ausgabe-Routinen auf
Streamebene.
stdiostr.h C++ Deklariert die Streamklassen von C++ (Version 2.0) für die
Verwendung mit den stdio FILE-Strukturen. Für
Neuentwicklungen sollten Sie besser die iostream.h verwenden.
stdlib.h ANSI C Deklariert verschiedene allgemeinnützige Routinen wie
Umwandlungsroutinen und Such-/Sortierroutinen.
string.h ANSI C Deklariert verschiedene Routinen zur String- und
Speicherbearbeitung.
strstrea.h C++ Deklariert die C++ Streamklassen für die Verwendung mit Byte-
Arrays im Speicher.
sys\locking.h Enthält Definitionen für den Modusparameter der Sperrfunktion.
sys\stat.h Definiert symbolische Konstanten, die beim Öffnen und Erzeugen
von Dateien verwendet werden.
sys\timeb.h Deklariert die Funktion ftime und die Struktur timeb, die von ftime
zurückgegeben wird.
sys\types.h Deklariert den Typ time_t, der im Zusammenhang mit den
Zeitfunktionen verwendet wird.
thread.h C++ Definiert die Thread-Klassen.
time.h ANSI C Definiert eine Struktur, die durch die Zeitumwandlungsroutinen
asctime, localtime und gmtime gefüllt wird, sowie einen Typ, der
von den Routinen ctime, difftime, gmtime, localtime, und stime.
verwendet wird. Die Datei liefert ebenfalls die Prototypen dieser
Routinen.
typeinfo.h C++ Deklariert die Laufzeittypinformationsklassen.
utime.h Deklariert die Funktion utime sowie die von ihr zurückgegebene
Struktur utimbuf.
values.h Definiert wichtige Konstanten, einschließlich
maschinenabhängiger, die aus Kompatibilität zu UNIX System V
mitgeliefert wurden.
varargs.h Definitionen zum Zugriff auf Parameter in Funktionen, die auf eine
variable Anzahl von Argumenten zugreifen. Wird aus
Kompatibilitätsgründen zu UNIX mitgeliefert. Für
Neuentwicklungen sollten Sie besser die stdarg.h verwenden.
Siehe auch
Vorkompilierte Header
alloc.h
SyntaxDeklariert die Speichermanagementfunktionen (Speicherbelegung, Speicherfreigabe u.s.w.).
Funktionen
calloc
farcalloc
DDCHelp Hilfe zur Programmiersprache C Seite 109 von 606
farfree
farmalloc
farrealloc
free
heapcheck
heapcheckfree
heapchecknode
heapfillfree
heapwalk
malloc
realloc
Konstanten, Datentypen und globale Variablen
NULL
ptrdiff_t
size_t
assert.h
SyntaxDefiniert das Assert-Makro zur Fehlersuche.
Funktionen
assert
bios.h
SyntaxDeklariert verschiedene Funktionen, die zum Aufruf der IBM-PC-ROM-BIOS-
Routinenverwendet werden.
Funktionen
_bios_equip
_bios_disk
_bios_equiplist
_bios_keybrd
_bios_memsize
_bios_serialcom
_bios_timeofday
bioscom
biosequip
bioskey
biosmemory
biosprint
biostime
conio.h
SyntaxDeklariert verschiedene Funktionen, die für den Aufruf der Textbildschirm-Ein-/Ausgabe-
Routinen des Betriebssystems verwendet werden.
Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 110 von 606
cgets
clreol
clrscr
cprintf
cputs
cscanf
delline
getch
getche
getpass
gettext
gettextinfo
gotoxy
highvideo
inp
inport
inportb
inpw
insline
kbhit
lowvideo
movetext
normvideo
outp
outport
outportb
outpw
putch
puttext
_setcursortype
textattr
textbackground
textcolor
textmode
ungetch
wherex
wherey
window
Siehe auch
EasyWin
Vorkompilierte Header-Dateien
ctype.h
SyntaxEnthält Informationen, die von Zeichenklassifizierungs- und Zeichenumwandlungs-Makros
DDCHelp Hilfe zur Programmiersprache C Seite 111 von 606
verwendet werden.
Funktionen und Makros
isalnum
isalpha
isascii
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
toascii
_tolower
tolower
_toupper
toupper
Konstanten, Datentypen und globale Variablen
_IS_CTL
_IS_DIG
_IS_HEX
_IS_LOW
_IS_PUN
_IS_SP
_IS_UPP
dir.h
SyntaxEnthält Strukturen, Makros und Funktionen zur Arbeit mit Verzeichnissen und Pfadnamen.
Funktionen
chdir
findfirst
findnext
fnmerge
fnsplit
getcurdir
getcwd
getdisk
mkdir
mktemp
rmdir
searchpath
setdisk
Konstanten, Datentypen und globale Variablen
DDCHelp Hilfe zur Programmiersprache C Seite 112 von 606
DIRECTORY
DRIVE
EXTENSION
ffblk
FILENAME
MAXDIR
MAXDRIVE
MAXEXT
MAXFILE
MAXPATH
direct.h
SyntaxDefiniert Strukturen, Makros und Funktionen zum Verwalten von Verzeichnissen und
Pfadbezeichnungen.
Include-Dateien
DIR.H
Funktionen
_chdrive
_getdcwd
dirent.h
SyntaxDeklariert Funktionen und Strukturen für die POSIX-Verzeichnisoperationen.
Funktionen
closedir
opendir
readdir
rewinddir
dos.h
SyntaxDefiniert verschiedene Konstanten und enthält Deklarationen, die für DOS- und 8086-
spezifische Aufrufe benötigt werden.
Funktionen
allocmem
bdos
bdosptr
_chain_intr
_chmod
country
ctrlbrk
delay
disable
_dos_allocmem
_dos_close
DDCHelp Hilfe zur Programmiersprache C Seite 113 von 606
_dos_commit
_dos_creat
_dos_creatnew
dosexterr
_dos_findfirst
_dos_findnext
_dos_freemem
_dos_getdate
_dos_getdiskfree
_dos_getdrive
_dos_getfileattr
_dos_getftime
_dos_gettime
_dos_getvect
_dos_keep
_dos_open
_dos_read
_dos_setblock
_dos_setdate
_dos_setdrive
_dos_setfileattr
_dos_settime
_dos_setvect
dostounix
_dos_write
_emit_
enable
FP_OFF
FP_SEG
geninterrupt
getcbrk
getdate
getdfree
getdta
getfat
getfatd
getftime
getpsp
gettime
getvect
getverify
_harderr
_hardresume
_hardretn
inport
inportb
int86
DDCHelp Hilfe zur Programmiersprache C Seite 114 von 606
int86x
intdos
intdosx
intr
keep
MK_FP
nosound
outport
outportb
parsfnm
peek
peekb
poke
pokeb
randbrd
randbwr
segread
setcbrk
setdate
setdta
settime
setvect
setverify
sleep
sound
unixtodos
unlink
Konstanten, Datentypen und globale Variablen
_8087
_argc
_argv
COUNTRY
date
devhdr
dfree
diskfree_t
dosdate_t
DOSERROR
dostime_t
_doserrno
dosSearchInfo
errno
_environ
fatinfo
fcb
FA_*
ffblk
DDCHelp Hilfe zur Programmiersprache C Seite 115 von 606
_heaplen
NFDS
_osmajor
_osminor
_osversion
_ovrbuffer
_psp
REGPACK
REGS
SEEK_CUR
SEEK_END
SEEK_SET
SREGS
_stklen
time
_version
xfcb
errno.h
SyntaxDefiniert konstante beschreibende Abkürzungen für die Fehlercodes.
Konstanten, Datentypen und globale Variablen
_doserrno
errno
_sys_errlist
_sys_nerr
error number definitions
fcntl.h
SyntaxDefiniert die Öffnungs-Flags für open und ähnliche Bibliotheksfunktionen.
Funktionen
_fmode
_pipe
Konstanten
O_APPEND
O_BINARY
O_CHANGED
O_CREAT
O_DENYALL
O_DENYNONE
O_DENYREAD
O_DENYWRITE
O_DEVICE
O_EXCL
O_NOINHERIT
DDCHelp Hilfe zur Programmiersprache C Seite 116 von 606
O_RDONLY
O_RDWR
O_TEXT
O_TRUNC
O_WRONLY
float.h
SyntaxEnthält Parameter für Gleitkomma-Routinen.
Funktionen
_clear87
_fpreset
_status87
Konstanten, Datentypen und globale Variablen
CW_DEFAULT
FPE_EXPLICITGEN
FPE_INEXACT
FPE_INTDIV0
FPE_INTOVFLOW
FPE_INVALID
FPE_OVERFLOW
FPE_UNDERFLOW
FPE_ZERODIVIDE
ILL_EXECUTION
ILL_EXPLICITGEN
SEGV_BOUND
SEGV_EXPLICITGEN
generic.h
SyntaxEnthält Makros für generische Klassendeklarationen.
io.h
SyntaxEnthält Strukturen und Deklarationen für einfache Ein-/Ausgabe-Routinen
Funktionen
access
chmod
chsize
close
creat
creatnew
creattemp
dup
dup2
eof
DDCHelp Hilfe zur Programmiersprache C Seite 117 von 606
filelength
_get_osfhandle
getftime
_InitEasyWin
ioctl
isatty
lock
locking
lseek
mktemp
open
_open_osfhandle
_pipe
read
remove
rename
_rtl_chmod
_rtl_close
_rtl_creat
_rtl_open
_rtl_read
_rtl_write
setftime
setmode
sopen
tell
umask
unlink
unlock
write
Konstanten, Datentypen und globale Variablen
Struktur ftime
HANDLE_MAX
Die Modi fseek/lseek
iomanip.h
SyntaxDeklariert die C++ Streams I/O-Manipulatoren und enthält Makros zur Erzeugung
parametrisierter Manipulatoren.
Include-Dateien
IOSTREAM.H
Klassen
iapply
imanip
ioapp
iomanip
oapp
DDCHelp Hilfe zur Programmiersprache C Seite 118 von 606
omanip
sapp
smanip
Überladene Operatoren << >>
Siehe auch
Vorcompilierte Header-Dateien
E/A-Stream-Klassen
limits.h
SyntaxEnthält Umgebungsparameter sowie Informationen über Beschränkungen während der
Kompilierung und über Bereiche der integralen Quantitäten.
Konstanten, Datentypen und globale Variablen
CHAR_BIT
CHAR_MAX
CHAR_MIN
INT_MAX
INT_MIN
LONG_MAX
LONG_MIN
SCHAR_MAX
SCHAR_MIN
SHRT_MAX
SHRT_MIN
UCHAR_MAX
UINT_MAX
ULONG_MAX
USHRT_MAX
locale.h
SyntaxDeklariert Funktionen, die sprach- und landesspezifische Informationen bieten.
Funktionen
localeconv
setlocale
Konstanten, Datentypen und globale Variablen
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MONETARY
LC_NUMERIC
LC_TIME
lconv (Struktur)
NULL
DDCHelp Hilfe zur Programmiersprache C Seite 119 von 606
malloc.h
SyntaxDeklariert Speicherverwaltungsfunktionen und Variablen.
Include-Dateien
ALLOC.H
Funktionen
_heapadd
_heapchk
_heapmin
_heapset
_msize
_rtl_heapwalk
stackavail
math.h
SyntaxDeklariert die Prototypen für die mathematischen Funktionen und Mathematik-Fehler-
Handler.
Funktionen
abs
acos, acosl
asin, asinl
atan, atanl
atan2, atan2l
atof, _atold
cabs, cabsl
ceil, ceill
cos, cosl
cosh, coshl
exp, expl
fabs, fabs
floor, floorl
fmod, fmodl
frexp, frexpl
hypot, hypotl
labs
ldexp, ldexpl
log, logl
log10, log101
_matherr,_matherrl
modf, modfl
poly, polyl
pow, powl
DDCHelp Hilfe zur Programmiersprache C Seite 120 von 606
pow10, pow10l
sin, sinl
sinh, sinhl
sqrt, sqrtl
tan, tanl
tanh, tanhl
Konstanten, Datentypen und globale Variablen
complex (Struktur)
_complexl (Struktur)
EDOM
ERANGE
exception (Struktur)
_exceptionl (Struktur)
HUGE_VAL
M_E
M_LOG2E
M_LOG10E
M_LN2
M_LN10
M_PI
M_PI_2
M_PI_4
M_1_PI
M_2_PI
M_1_SQRTPI
M_2_SQRTPI
M_SQRT2
M_SQRT_2
_mexcep
mem.h
SyntaxDeklariert die Speicherbearbeitungsfunktionen. (Viele davon sind auch in string.h. definiert)
Funktionen
_fmemccpy
_fmemchr
_fmemcmp
_fmemcpy
_fmemicmp
_fmemmove
_fmemset
_fmovmem
memccpy
memchr
memcmp
DDCHelp Hilfe zur Programmiersprache C Seite 121 von 606
memcpy
memicmp
memmove
memset
movedata
movmem
setmem
Konstanten, Datentypen und globale Variablen
NULL
ptrdiff_t
size_t
memory.h
SyntaxEnthält Speicherbearbeitungsfunktionen.
Include-Dateien
MEM.H
new.h
SyntaxBietet den Zugriff auf die folgenden Funktionen:
set_new_handler
_new_handler (globale Variable)
process.h
SyntaxEnthält Strukturen und Deklarationen für die Funktionen spawn... und exec....
Funktionen
abort
_beginthread
_beginthreadNT
_c_exit
_cexit
cwait
_endthread
execl
execle
execlp
execlpe
execv
execve
execvp
execvpe
DDCHelp Hilfe zur Programmiersprache C Seite 122 von 606
exit
_exit
getpid
spawnl
spawnle
spawnlp
spawnlpe
spawnv
spawnve
spawnvp
spawnvpe
wait
Konstanten, Datentypen und globale Variablen
P_DETACH
P_NOWAIT
P_NOWAITO
P_OVERLAY
P_WAIT
search.h
SyntaxDeklariert Funktionen zum Suchen und Sortieren.
Funktionen
bsearch
lfind
lsearch
qsort
setjmp.h
Deklariert die Funktionen longjmp und setjmp und definiert den Typ jmp_bufj, der diese Funktionen
verwendet.
Funktionen
longjmp
setjmp
Konstanten, Datentypen und globale Variablen
jmp_buf
share.h
SyntaxDefiniert die in den Funktionen zum Zugriff auf Dateien verwendeten Parameter .
Konstanten, Datentypen und globale Variablen
DDCHelp Hilfe zur Programmiersprache C Seite 123 von 606
SH_COMPAT
SH_DENYNO
SH_DENYNONE
SH_DENYRD
SH_DENYRW
SH_DENYWR
signal.h
SyntaxDefiniert Konstanten und Deklarationen für die Verwendung mit Signal- und
Einrichtungsfunktionen.
Funktionen
raise
signal
Konstanten, Datentypen und globale Variablen
vordefinierte Signal-Handler
sig_atomic_t type
SIG_DFL
SIG_ERR
SIG_IGN
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
stdarg.h
SyntaxDefiniert Makros zum Lesen der Argumentenliste in den Funktionen, die für den Zugriff auf
eine unterschiedlich große Anzahl von Argumenten deklariert wurden (wie vprintf, vscanf, u.s.w.).
Makros
va_arg
va_end
va_start
Konstanten, Datentypen und globale Variablen
va_list
stddef.h
SyntaxDefiniert verschiedene allgemeine Datentypen und Makros.
Funktionen
offsetof
Konstanten, Datentypen und globale Variablen
DDCHelp Hilfe zur Programmiersprache C Seite 124 von 606
NULL
ptrdiff_t
size_t
_threadid
wchar_t
stdio.h
SyntaxDefiniert Typen und Makros, die für die Standardeingabe bzw. -ausgabe verwendet werden.
Dieses Standardpaket wurde von Kernighan und Ritchie definiert und unter UNIX System V
erweitert. Es definiert die vordefinierten Streams der Standardeingabe bzw. -ausgabe (stdin,
stdout, stdprn, und stderr) und deklariert die Ein-/Ausgabe-Routinen auf Streamebene.
Funktionen
clearerr _fstrncpy spawnlp
fclose ftell spawnlpe
fcloseall fwrite spawnv
fdopen getc spawnve
feof getchar spawnvp
ferror gets spawnvpe
fflush getw sprintf
fgetc _pclose sscanf
fgetchar perror strerror
fgetpos _popen _strerror
fgets printf strncpy
fileno putc tempnam
flushall putchar tmpfile
fopen puts tmpnam
fprintf putw ungetc
fputc remove unlink
fputchar rename vfprintf
fputs rewind vfscanf
fread rmtmp vprintf
freopen scanf vscanf
fscanf setbuf vsprintf
fseek setvbuf vsscanf
fsetpos spawnl
_fsopen spawnle
Konstanten, Datentypen und globale Variablen
Puffermodi _F_TERM SEEK_CUR
BUFSIZ _F_WRIT SEEK_END
EOF FILE SEEK_SET
_F_BIN fpos_t size_t
_F_BUF Die Modi fseek/lseek stdaux
_F_EOF _IOFBF stderr
_F_ERR _IOLBF stdin
_F_IN _IONBF stdout
_F_LBUF L_ctermid stdprn
_F_OUT L_tmpnam SYS_OPEN
_F_RDWR NULL TMP_MAX
DDCHelp Hilfe zur Programmiersprache C Seite 125 von 606
_F_READ FOPEN_MAX
stdiostr.h
SyntaxDeklariert die Streamklassen von C++ (Version2.0) zur Verwendung mit den stdio-FILE-
Strukturen. Bei Neuentwicklungen sollten besser Sie die iostream.h verwenden.
Include-Dateien
IOSTREAM.H
STDIO.H
stdlib.h
SyntaxDeklariert verschiedene allgemein verwendete Routinen wie Umwandlungsroutinen und
Such- bzw. Sortierroutinen.
Funktionen
abort labs realloc
abs ldiv _rotl
atexit lfind _rotr
atof _lrotl _searchenv
atoi _lrotr _searchstr
atol lsearch _splitpath
bsearch ltoa srand
calloc _makepath strtod
_crotr malloc strtol
div max _strtold
ecvt mblen strtoul
exit mbstowcs swab
_exit mbtowc system
fcvt min time
free putenv ultoa
_fullpath qsort wcstombs
gcvt rand wctomb
getenv random
itoa randomize
Konstanten, Datentypen und globale Variablen
div_t
_doserrno
environ
errno
EXIT_FAILURE
EXIT_SUCCESS
_fmode
ldiv_t
NULL
_osmajor
_osminor
RAND_MAX
DDCHelp Hilfe zur Programmiersprache C Seite 126 von 606
size_t
sys_errlist
sys_nerr
_version
wchar_t
string.h
SyntaxDeklariert verschiedene String- und Speicherbearbeitungsroutinen.
Include-Dateien
LOCALE.H
Funktionen
_fmemccpy _fstrset strdup
_fmemchr _fstrspn strdup
_fmemcmp _fstrstr strerror
_fmemcpy _fstrtok _strerror
_fmemicmp _fstrupr stricmp
_fmemset memccpy strlen
_fstr* memchr strlwr
_fstrcat memcmp strncat
_fstrchr memcpy strncmp
_fstrcmp memicmp strncmpi
_fstrcpy memmove strncpy
_fstrcspn memset strnicmp
_fstrdup movedata strnset
_fstricmp movmem strpbrk
_fstrlen setmem strrchr
_fstrlwr stpcpy strrev
_fstrncat strcat strset
_fstrncmp strchr strspn
_fstrncpy strcmp strstr
_fstrnicmp strcmp strtok
_fstrnset strcmpi strupr
_fstrpbrk strcoll strxfrm
_fstrrchr strcpy
_fstrrev strcspn
Konstanten, Datentypen und globale Variablen
size_t
sys\locking.h
SyntaxEnthält die Definitionen für den Modusparameter der Sperrfunktion.
Konstanten
LK_LOCK
LK_NBLCK
LK_NBRLCK
LK_RLCK
LK_UNLCK
DDCHelp Hilfe zur Programmiersprache C Seite 127 von 606
sys\stat.h
SyntaxDefiniert symbolische Konstanten, die für das Öffnen und Erzeugen von Dateien verwendet
werden.
Include-Dateien
SYS\TYPES.H
Funktionen
chmod
fstat
stat
Konstanten, Datentypen und globale Variablen
Dateistatus-Bits
Die Struktur stat
sys\timeb.h
SyntaxFunktionen
ftime
Konstanten, Datentypen und globale Variablen
Die Struktur timeb
_timezone
sys\types.h
SyntaxKonstanten, Datentypen und globale Variablen
time_t
time.h
SyntaxDefiniert eine Struktur, die von den Zeitumwandlungsroutinen asctime, localtime und gmtime
gefüllt wird. Weiterhin wird ein Typ definiert, der von den Routinen ctime, difftime, gmtime,
localtime und stime verwendet wird. Zu diesen Routinen werden auch die Prototypen geliefert.
Funktionen
asctime
clock
ctime
difftime
gmtime
localtime
mktime
randomize
DDCHelp Hilfe zur Programmiersprache C Seite 128 von 606
stime
_strdate
strftime
_strtime
time
tzset
Konstanten, Datentypen und globale Variablen
CLK_TCK
clock_t
daylight
size_t
time_t
timezone
tm
tzname
Klassen
Zeitklassen
utime.h
SyntaxDeklariert die Funktion utime und die Struktur utimbuf, die von der Funktion zurückgegeben
wird.
Funktion
utime
Konstanten, Datentypen und globale Variablen
time_t
utimbuf
values.h
SyntaxDefiniert UNIX-kompatible Konstanten für die Beschränkungen von Gleitkomma- und Double-
Werten.
BITSPERBYTE
DMAXEXP
DMAXPOWTWO
DMINEXP
DSIGNIF
FMAXEXP
FMAXPOWTWO
FMINEXP
FSIGNIF
_FEXPLEN
HIBITI
HIBITL
HIBITS
DDCHelp Hilfe zur Programmiersprache C Seite 129 von 606
_LENBASE
MAXDOUBLE
MAXFLOAT
MAXINT
MAXLONG
MAXSHORT
MINDOUBLE
MINFLOAT
varargs.h
SyntaxDefinitionen zum Zugriff auf Parameter in Funktionen, die eine variable Anzahl von
Argumenten erlauben.
Diese Makros sind kompatibel zu UNIX System V.
Verwenden Sie STDARG.H für ANSI-C-Kompatibilität.
Hinweis: Sie können nicht gleichzeitig STDARG.H und VARARGS.H verwenden
Makros
va_start
va_arg
va_end
Typ
va_list
excpt.h
SyntaxDie Header-Datei excpt.h enthält die Deklarationen und Prototypen für die Funktionen und
Klassen zur strukturierten Exception-Behandlung, ihre Datenelemente und Elementfunktionen. In
der Dokumentation zur Windows API finden Sie weitere Informationen.
_defs.h
SyntaxDie Header-Datei _defs.h enthält allgemeine Definitionen für die Zeigergröße und die
Aufrufkonventionen.
Aufrufkonventionen
_RTLENTRY Spezifiziert die von der Standard-Laufzeitbibliothek verwendete
Aufrufkonvention.
_USERENTRY Spezifiziert die von der Standard-Laufzeitbibliothek verwendete
Aufrufkonvention für benutzerkompilierte Funktionen, die für Callbacks
verwendet werden.
Exportinformationen (und Größe für DOS)
_EXPCLASS Exportiert die Klasse, wenn Sie eine DLL-Version einer Bibliothek erzeugen.
_EXPDATA Exportiert die Daten, wenn Sie eine DLL-Version einer Bibliothek erzeugen.
_EXPFUNC Exportiert die Funktion, wenn Sie eine DLL-Version einer Bibliothek
DDCHelp Hilfe zur Programmiersprache C Seite 130 von 606
erzeugen.
_nfile.h
SyntaxDie Header-Datei _nfile.h definiert _NFILE_. Diese Konstante enthält die maximale Anzahl
der Dateien, die geöffnet werden dürfen.
Für 32-Bit-Anwendungen wird _NFILE_ als 40 definiert. Für alle anderen Anwendungstypen wird
_NFILE_ als 20 definiert.
_null.h
SyntaxDie Header-Datei _null.h enthält die Definition von NULL für verschiedene Speichermodelle
und Applikationstypen:
Modell Wert
Flat ((void *)0) wenn es sich nicht um eine C++ oder Windows-Anwendung handelt
Flat 0
Tiny 0
Small 0
Medium 0
Large 0L
Die Funktion main()
Jedes C oder C++ Programm muss eine Programmstartfunktion besitzen.
Programme, die im Textbildschirmmodus arbeiten, rufen die Funktion main beim Programmstart auf.
Programme mit der grafischen Benutzeroberfläche Windows rufen beim Programmstart die WinMain-Funktion auf.
An welcher Stelle die Funktion main steht - ob am Anfang der Datei oder am Ende - bleibt dem Programmierer überlassen. Unabhängig von der Position der Funktion main sind aber immer die folgenden Punkte zu beachten.
Argumente zu Main
Platzhalter-Argumente
Verwendung von -p (Pascal-Aufrufkonventionen)
Rückgabewerte von main( )
Siehe auch LibMain und DLL-Einsprungspunkt
Multithread Programme
Übergabe von Dateiinformationen an untergeordnete Prozesse
Verwendung dynamischer Link-Bibliotheken
WEP (Windows-Exit-Prozedur)
DDCHelp Hilfe zur Programmiersprache C Seite 131 von 606
Argumente zu main()
Die Funktion main() Beispiel
Drei Parameter (Argumente) werden von der Programmstartroutine an main übergeben: argc, argv und env.
argc ist eine Ganzzahl und gibt die Anzahl der an main übergebenen Kommandozeilenargumente an, einschließlich des Namens des ausführbaren Programms selbst.
argv ist ein Array von Zeigern auf Strings (char *[]).
- argv[0] ist der vollständige Pfadname des laufenden Programms.
- argv[1] zeigt auf den ersten String nach dem Programmnamen, der in der Kommandozeile des Betriebssystems eingegeben wurde.
- argv[2] zeigt auf den zweiten String, der nach dem Programmnamen eingegeben wurde.
- argv[argc-1] zeigt auf das letzte an main übergebene Argument.
- argv[argc] enthält NULL.
env ist ebenfalls ein Array von Zeigern auf Strings. Jedes Element von env[] enthält einen String der Form ENVVAR=Wert.
- ENVVAR ist der Name einer Umgebungsvariablen, wie etwa PATH oder COMSPEC.
- Wert ist der Wert, auf den ENVVAR gesetzt ist, wie beispielsweise C:\APPS;C:\TOOLS; (für PATH) oder C:\DOS\COMMAND.COM (für COMSPEC).
Bei der Deklaration dieser Parameter muss die exakte Reihenfolge eingehalten werden: argc, argv, env. So sind beispielsweise sämtliche folgenden Deklarationen von Argumenten zu main gültig:
int main()
int main(int argc) /* erlaubt, aber sehr ungewöhnlich */
int main(int argc, char * argv[])
int main(int argc, char * argv[], char * env[])]
Die Deklaration int main(int argc) ist zulässig; es ist jedoch sehr ungewöhnlich, argc in einem Programm zu verwenden, ohne zugleich die Argumente von argv zu benutzen.
Das Argument env ist auch über die globale Variable environ. verfügbar.
In allen Umgebungen sind argc und argv ebenfalls über die globalen Variablen _argc und _argv. verfügbar.
Beispiel für die Übergabe von Argumenten an main( )
Dieses Beispiel zeigt ein einfaches Verfahren, wie die an main übergebenen Argumente verwendet werden:
/* Programm ARGS.C */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[], char *env[]) {
int i;
printf("Der Wert von argc ist %d \n\", argc);
printf("Dies sind die %d Kommandozeilen-Parameter, uebergeben an"
" main:\n\n", argc);
for (i = 0; i < argc; i++)
printf(" argv[%d]: %s\n", i, argv[i]);
printf("\nDie Umgebungsvariable(n) auf diesem System sind:\n\n");
for (i = 0; env[i] != NULL; i++)
DDCHelp Hilfe zur Programmiersprache C Seite 132 von 606
printf(" env[%d]: %s\n", i, env[i]);
return 0;
}
Angenommen, ARGS.EXE wird an der Eingabeaufforderung mit der folgenden Befehlszeile ausgeführt:
C:> args Erstes_Arg "Leeres Argument" 3 4 "Vorletztes" Stop!
Argumente mit eingebetteten Leerzeichen können übergeben werden, wenn sie in Anführungszeichen eingeschlossen werden, wie die Beispiele "arg mit Leerzeichen" und "vorletztes arg" in dieser Beispiel-Kommandozeile zeigen.
Die Ausgabe von ARGS.EXE (wenn die Umgebungsvariablen wie im Beispiel gesetzt sind) wird dann so aussehen:
Der Wert von argc ist 7
Dies sind die 7 Kommandozeilen-Parameter, uebergeben an main:
argv[0]: C:\DEVC\ARGS.EXE
argv[1]: Erstes_Arg
argv[2]: Leeres Argument
argv[3]: 3
argv[4]: 4
argv[5]: Vorletztes
argv[6]: Stop!
Die Umgebungsvariable(n) auf diesem System lauten
env[0]: COMSPEC=C:\COMMAND.COM
env[1]: PROMPT=$p $g
env[2]: PATH=C:\SPRINT;C:\DOS;C:\DEVC
Die maximale Gesamtlänge der an main übergebenen Kommandozeilenargumente (einschließlich der Leerzeichen zwischen benachbarten Argumenten und dem Programmnamen selbst) beträgt
128 für DOS
260 für Win16
255 für Win32
Rückgabewert von main()
Die Funktion main()
Der von main zurückgegebene Wert ist der Status-Code des Programms, eine Ganzzahl. Verwendet das Programm jedoch die Routine exit (oder _exit) zum Beenden, ist der Rückgabewert von main das an den Aufruf von exit (oder an _exit) übergebene Argument.
Enthält das Programm beispielsweise den Aufruf
exit(1)
ist der Status 1.
Übergabe von Datei-Informationen an untergeordnete Prozesse
Die Funktion main()
Wenn das Programm die Funktionen exec oder spawn benutzt, um einen neuen Prozess zu erzeugen, erbt der neue Prozess normalerweise alle geöffneten Datei-Handles, die der ursprüngliche Prozess erzeugt hat. Einige Informationen zu diesen Handles werden aber verloren gehen, zum Beispiel der Zugangsmodus, der zum Öffnen der Datei benutzt wird. Wenn beispielsweise das Programm eine Datei mit reiner Leseberechtigung und im Binärmodus öffnet und dann einen untergeordneten Prozess erzeugt, kann der untergeordnete Prozess die Datei durch Schreibzugriffe oder durch Lesezugriff im Textmodus beschädigen.
DDCHelp Hilfe zur Programmiersprache C Seite 133 von 606
Um untergeordneten Prozessen das Erben solcher Informationen über geöffnete Dateien zu ermöglichen, muss das Programm mit der Objektdatei FILEINFO.OBJ gelinkt werden.
Zum Beispiel:
BCC32 TEST.C \DEVC\LIB\FILEINFO.OBJ
Die Datei-Information wird mit der Umgebungsvariablen _C_FILE_INFO übergeben. Diese Variable enthält kodierte Binärinformation. Das Programm sollte nicht versuchen, ihren Wert zu lesen oder zu ändern. Das untergeordnete Programm muss mit der C++ Laufzeitbibliothek erzeugt worden sein, um diese Information korrekt zu erben.
Andere Programme können _C_FILE_INFO ignorieren und erben keine Datei-Information.
Ein-/Ausgaberoutinen für den Textbildschirm
Die folgenden Routinen geben Text auf dem Bildschirm aus oder lesen von der Tastatur ein. Sie können in GUI-Applikationen nicht benutzt werden. Funktion Header-Datei Funktion Header-Datei
cgets conio.h movetext conio.h
clreol conio.h normvideo conio.h
clrscr conio.h putch conio.h
cprintf conio.h puttext conio.h
cputs conio.h _setcursortype conio.h
delline conio.h textattr conio.h
getpass conio.h textbackground conio.h
gettext conio.h textcolor conio.h
gettextinfo conio.h textmode conio.h
gotoxy conio.h ungetc stdio.h
highvideo conio.h wherex conio.h
insline conio.h wherey conio.h
lowvideo conio.h window conio.h
Siehe auch
conio.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Konvertierungsroutinen
Diese Routinen konvertieren Zeichen und Strings von:
Alphazeichen in verschiedene numerische Ausdrücke (Gleitkomma, Ganzzahl, Lange
Zahlentypen).
numerischen in alphanumerische Ausdrücke.
Großbuchstaben zu Kleinbuchstaben (und umgekehrt).
Funktion Header-Datei Funktion Header-Datei
atof stdlib.h strtol stdlib.h
atoi stdlib.h _strtold stdlib.h
DDCHelp Hilfe zur Programmiersprache C Seite 134 von 606
atol stdlib.h strtoul stdlib.h
ecvt stdlib.h toascii ctype.h
fcvt stdlib.h _tolower ctype.h
gcvt stdlib.h tolower ctype.h
itoa stdlib.h _toupper ctype.h
ltoa stdlib.h toupper ctype.h
strtod stdlib.h ultoa stdlib.h
Siehe auch
ctype.h
stdlib.h
time.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Diagnose-Routinen
Diese Routinen liefern die integrierten Fehlersuchfunktionen.
Funktion Header-Datei
assert assert.h
_matherr math.h
_matherrl math.h
perror errno.h
Siehe auch
assert.h
errno.h
math.h
Header-Dateien, Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Verzeichnis-Steuerroutinen
Dieses Routinen manipulieren Verzeichnisse und Pfadnamen.
Funktion Header-Datei Funktion Header-Datei
chdir dir.h _getdcwd direct.h
_chdrive direct.h getdisk dir.h
closedir dirent.h _makepath stdlib.h
_dos_findfirst dos.h mkdir dir.h
_dos_findnext dos.h mktemp dir.h
_dos_getdiskfree dos.h opendir direct.h
DDCHelp Hilfe zur Programmiersprache C Seite 135 von 606
_dos_getdrive dos.h readdir dirent.h
_dos_setdrive dos.h rewinddir dirent.h
findfirst dir.h rmdir dir.h
findnext dir.h _searchenv stdlib.h
fnmerge dir.h searchpath dir.h
fnsplit dir.h _searchstr stdlib.h
_fullpath stdlib.h setdisk dir.h
getcurdir dir.h _splitpath stdlib.h
getcwd dir.h
Siehe auch
dir.h
direct.h
dirent.h
dos.h
stdlib.h
stdio.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Ein-/Ausgaberoutinen
Die folgenden Routinen liefern streamfähige und betriebssystemfähige Ein-/Ausgaberoutinen.
Funktion Header-Datei Funktion Header-Datei
access io.h getftime io.h
chmod io.h gets stdio.h
chsize io.h getw stdio.h
clearerr stdio.h ioctl io.h
close io.h isatty io.h
creat io.h kbhit conio.h
creatnew io.h lock io.h
creattemp io.h locking io.h
cscanf conio.h lseek io.h
_dos_close dos.h open io.h
_pclose stdio.h _open_osfhandle io.h
_dos_creat dos.h perror stdio.h
_dos_creatnew dos.h _pipe io.h
_dos_getfileattr dos.h _popen stdio.h
_dos_getftime dos.h printf stdio.h
_dos_open dos.h putc stdio.h
_dos_read dos.h putchar stdio.h
DDCHelp Hilfe zur Programmiersprache C Seite 136 von 606
_dos_setfileattr dos.h puts stdio.h
_dos_setftime dos.h putw stdio.h
_dos_write dos.h read io.h
dup io.h remove stdio.h
dup2 io.h rename stdio.h
eof io.h rewind stdio.h
fclose stdio.h rmtmp stdio.h
fcloseall stdio.h _rtl_chmod io.h
fdopen stdio.h _rtl_close io.h
feof stdio.h _rtl_creat io.h
ferror stdio.h _rtl_open io.h
fflush stdio.h _rtl_read io.h
fgetc stdio.h _rtl_write io.h
fgetchar stdio.h scanf stdio.h
fgetpos stdio.h setbuf stdio.h
fgets stdio.h setftime io.h
filelength io.h setmode io.h
fileno stdio.h setvbuf stdio.h
flushall stdio.h sopen io.h
fopen stdio.h sprintf stdio.h
fprintf stdio.h sscanf stdio.h
fputc stdio.h strerror stdio.h
fputchar stdio.h _strerror string.h, stdio.h
fputs stdio.h tell io.h
fread stdio.h tempnam stdio.h
freopen stdio.h TFile (Klasse) file.h
fscanf stdio.h tmpfile stdio.h
fseek stdio.h tmpnam stdio.h
fsetpos stdio.h umask io.h
_fsopen stdio.h unlink dos.h
fstat sys\stat.h unlock io.h
ftell stdio.h utime utime.h
fwrite stdio.h vfprintf stdio.h
get_osfhandle io.h vfscanf stdio.h
getc stdio.h vprintf stdio.h
getch conio.h vscanf stdio.h
getchar stdio.h vsprintf stdio.h
getche conio.h vsscanf io.h
Siehe auch
conio.h
DDCHelp Hilfe zur Programmiersprache C Seite 137 von 606
io.h
stdio.h
string.h
sys\stat.h
utime.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Schnittstellenroutinen (DOS, 8086, BIOS)
Die folgenden Routinen bieten Betriebssystem-, BIOS- und maschinenspezifische Dienste an.
Funktion Header-Datei Funktion Header-Datei
bdos dos.h inp conio.h
bdosptr dos.h inpw conio.h
_bios_equiplist bios.h inport dos.h
biosequip bios.h inportb dos.h
biosmemory bios.h int86 dos.h
biostime bios.h int86x dos.h
_chain_intr dos.h intdos dos.h
country dos.h intdosx dos.h
ctrlbrk dos.h intr dos.h
_disable dos.h MK_FP dos.h
disable dos.h outp conio.h
dosexterr dos.h outpw conio.h
_dos_getvect dos.h outport dos.h
_dos_setvect dos.h outportb dos.h
_enable dos.h parsfnm dos.h
enable dos.h peek dos.h
FP_OFF dos.h peekb dos.h
FP_SEG dos.h poke dos.h
geninterrupt dos.h pokeb dos.h
getcbrk dos.h segread dos.h
getdfree dos.h setcbrk dos.h
getdta dos.h _setcursortype conio.h
getfat dos.h setdta dos.h
getfatd dos.h setvect dos.h
getpsp dos.h setverify dos.h
getvect dos.h sleep dos.h
getverify dos.h
Siehe auch
bios.h
DDCHelp Hilfe zur Programmiersprache C Seite 138 von 606
conio.h
dos.h
Header-Dateien. - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Internationale API-Routinen
Die folgenden Routinen werden von den aktuellen lokalen Bedingungen beeinflusst. Diese werden
durch die Funktion setlocale angegeben und über die Definition der Konstanten
__USELOCALES__ in der Kommandozeilen-Option -D verfügbar gemacht. Wenn Sie
__USELOCALES__ definieren, dann werden statt der Makros nur die Funktionsversionen der
nachfolgenden Routinen in der Laufzeitbibliothek verwendet.
Funktion Header-Datei Funktion Header-Datei
cprintf stdio.h scanf stdio.h
cscanf stdio.h setlocale locale.h
fprintf stdio.h sprintf stdio.h
fscanf stdio.h sscanf stdio.h
isalnum ctype.h strcoll string.h
isalpha ctype.h strftime time.h
iscntrl ctype.h strlwr string.h
isdigit ctype.h strupr string.h
isgraph ctype.h strxfrm string.h
islower ctype.h tolower ctype.h
isprint ctype.h toupper ctype.h
ispunct ctype.h vfprintf stdio.h
isspace ctype.h vfscanf stdio.h
isupper ctype.h vprintf stdio.h
isxdigit ctype.h vscanf stdio.h
localeconv locale.h vsprintf stdio.h
printf stdio.h vsscanf stdio.h
Siehe auch
ctype.h
locale.h
stdio.h
stdlib.h
string.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
DDCHelp Hilfe zur Programmiersprache C Seite 139 von 606
Bearbeitungsroutinen
Diese Routinen führen mit Strings und Speicherblöcken folgende Operationen durch: Kopieren,
Vergleichen, Konvertieren und Durchsuchen.
Funktion Header-Datei Funktion Header-Datei
mblen stdlib.h strerror string.h
mbstowcs stdlib.h stricmp string.h
mbtowc stdlib.h strlen string.h
memccpy mem.h, string.h strlwr string.h
memchr mem.h, string.h strncat string.h
memcmp mem.h, string.h strncmpi string.h
memcpy mem.h, string.h strncmp string.h
memicmp mem.h, string.h strncpy string.h
memmove mem.h, string.h strnicmp string.h
memset mem.h, string.h strnset string.h
movedata mem.h, string.h strpbrk string.h
movmem mem.h, string.h strrchr string.h
setmem mem.h strrev string.h
stpcpy string.h strset string.h
strcat string.h strspn string.h
strchr string.h strstr string.h
strcmpi string.h strtok string.h
strcmp string.h strupr string.h
strcoll string.h strxfrm string.h
strcpy string.h wcstombs stdlib.h
strcspn string.h wctomb stdlib.h
strdup string.h
Siehe auch
mem.h
stdlib.h
string.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Mathematische Routinen
Diese Routinen unterstützen mathematische Berechnungen und Umwandlungen
Funktion Header-Datei Funktion Header-Datei
abs complex.h, stdlib.h labs stdlib.h
acos complex.h, math.h ldexp math.h
acosl math.h ldexpl math.h
arg complex.h ldiv math.h
DDCHelp Hilfe zur Programmiersprache C Seite 140 von 606
asin complex.h, math.h log complex.h, math.h
asinl math.h logl math.h
atan complex.h, math.h log10 complex.h, math.h
atan2 complex.h, math.h log10l math.h
atan2l math.h _lrotl stdlib.h
atanl math.h _lrotr stdlib.h
atof stdlib.h, math.h ltoa stdlib.h
atoi stdlib.h _matherr math.h
atol stdlib.h _matherrl math.h
_atold math.h modf math.h
bcd (Klasse) bcd.h modfl math.h
cabs math.h norm complex.h
cabsl math.h polar complex.h
ceil math.h poly math.h
ceill math.h polyl math.h
_clear87 float.h pow complex.h, math.h
complex (Klasse) complex.h pow10 math.h
conj complex.h pow10l math.h
_control87 float.h powl math.h
cos complex.h, math.h rand stdlib.h
cosh complex.h, math.h random stdlib.h
coshl math.h randomize stdlib.h
cosl math.h real complex.h
div math.h _rotl stdlib.h
ecvt stdlib.h _rotr stdlib.h
exp complex.h, math.h sin complex.h, math.h
expl math.h sinh complex.h, math.h
fabs math.h sinhl math.h
fabsl math.h sinl complex.h, math.h
fcvt stdlib.h sqrt complex.h, math.h
floor math.h sqrtl math.h
floorl math.h srand stdlib.h
fmod math.h _status87 float.h
fmodl math.h strtod stdlib.h
_fpreset float.h strtol stdlib.h
frexp math.h _strtold stdlib.h
frexpl math.h strtoul stdlib.h
gcvt stdlib.h tan complex.h, math.h
hypot math.h tanh complex.h, math.h
hypotl math.h tanhl complex.h, math.h
imag complex.h tanl math.h
itoa stdlib.h ultoa stdlib.h
DDCHelp Hilfe zur Programmiersprache C Seite 141 von 606
Siehe auch
bcd.h
complex.h
float.h
math.h
stdlib
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Mathematische Klassen
Speicherroutinen
Die folgenden Routinen führen dynamische Speicherbelegungen in den Modellen Small-Data und
Large-Data durch.
Funktion Header-Datei Funktion Header-Datei
alloca malloc.h heapcheckfree alloc.h
_bios_memsize bios.h heapchecknode alloc.h
calloc alloc.h, stdlib.h heapwalk alloc.h
farcalloc alloc.h malloc alloc.h, stdlib.h
farfree alloc.h realloc alloc.h, stdlib.h
farmalloc alloc.h set_new_handler new.h
free alloc.h, stdlib.h stackavail malloc.h
heapcheck alloc.h
Siehe auch
alloc.h
bios.h
dos.h
malloc.h
new.h
stdlib.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Verschiedene Routinen
Diese Routinen bieten nichtlokale Verzweigungsmöglichkeiten und lokale Unterstützung.
Funktion Header
localeconv locale.h
longjmp setjmp.h
DDCHelp Hilfe zur Programmiersprache C Seite 142 von 606
setjmp setjmp.h
setlocale locale.h
Siehe auch
locale.h
setjmp.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Ablaufsteuerungsroutinen
Diese Routinen aktivieren und beenden neue Prozesse aus anderen heraus.
Funktion Header-Datei Funktion Header-Datei
abort (process.h) exit (process.h)
_beginthread _expand (process.h)
_beginthreadNT (process.h) getpid (process.h)
_c_exit (process.h) _pclose (stdio.h)
_cexit (process.h) _popen (stdio.h)
cwait (process.h) raise (signal.h)
_endthread (process.h) signal (signal.h)
execle (process.h) spawnle (process.h)
execl (process.h) spawnlpe (process.h)
execlpe (process.h) spawnlp (process.h)
execlp (process.h) spawnl (process.h)
execve (process.h) spawnve (process.h)
execv (process.h) spawnvpe (process.h)
execvpe (process.h) spawnvp (process.h)
execvp (process.h) spawnv (process.h)
_exit (process.h) wait (process.h)
Siehe auch
process.h
signal.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
DDCHelp Hilfe zur Programmiersprache C Seite 143 von 606
Zeit- und Datums-Routinen
Die folgenden Funktionen dienen zur Zeitumwandlung und -Bearbeitung.
Funktion Header-Datei Funktion Header-Datei
asctime time.h gmtime time.h
_bios_timeofday bios.h localtime time.h
ctime time.h mktime time.h
difftime time.h stime time.h
_dos_getdate dos.h _strdate time.h
_dos_gettime dos.h strftime time.h
_dos_setdate dos.h _strtime time.h
_dos_settime dos.h TDate (Klasse) date.h
dostounix dos.h time time.h
ftime sys\timeb.h TTime (Klasse) date.h
getdate dos.h tzset time.h
gettime dos.h unixtodos dos.h
Siehe auch
bios.h
time.h
dos.h
sys\timeb.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
Klasse TTime
Klasse Tdate
Routinen mit variabler Argumentliste
Die folgenden Routinen sind für den Umgang mit unterschiedlich langen Argumentlisten (wie in
printf, vscanf etc) vorgesehen.
Funktion Header-Datei
va_start stdarg.h
va_arg stdarg.h
va_end stdarg.h
Siehe auch
stdarg.h
Header-Dateien - Eine Zusammenfassung
Bibliotheksroutinen, nach Kategorie
Bibliotheksroutinen, nach Namen
DDCHelp Hilfe zur Programmiersprache C Seite 144 von 606
C++ Bibliotheksroutinen, nach Namen sortiert
Falls Sie den Namen der Funktion nicht kennen, jedoch wissen, welche Art von Zweck sie erfüllt,
so wählen Sie besser:
C++ Bibliotheksroutinen, nach Kategorie
Falls Sie den Namen der Funktion wissen, zu der Sie Hilfe benötigen, so wählen Sie eines der
folgenden Themen:
abort
Syntax #include <stdlib.h>
void abort(void);
Beschreibung
Beendet ein Programm mit einer Fehlermeldung.
abort bewirkt einen Programmabbruch durch Aufruf von raise(SIGABRT). Falls es für SIGABRT keinen Signal-Handler gibt, so wird eine Abbruchmeldung("Abnormal program termination") auf stderr ausgegeben und daraufhin das Programm durch den Aufruf von _exit mit dem Exit-Code 3 beendet.
Rückgabewert
Gibt den Exit-Code 3 an den übergeordneten Prozess oder an den Kommandozeileninterpreter des Betriebssystems zurück.
Siehe auch assert
atexit
_c_exit
_cexit
_exit
exit
raise
signal
spawnl
abs
Syntax #include <stdlib.h>
int abs(int x);
Beschreibung
Liefert den absoluten Betrag einer Integer-Zahl.
abs liefert den absoluten Betrag seines Integer-Arguments x. Wenn stdlib.h aufgenommen wurde, wird diese Funktion als Makro behandelt und somit zu Inline-Code.
Wollen Sie statt dessen die Funktion abs verwenden, so nehmen Sie nach
DDCHelp Hilfe zur Programmiersprache C Seite 145 von 606
#include<stdlib.h> die Zeile
#undef abs
in Ihr Programm auf.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
Die Funktion abs liefert einen int im Bereich von 0 bis INT_MAX. Ausnahme: Der Wert INT_MIN wird als INT_MIN zurückgegeben. Die Werte für INT_MAX und INT_MIN sind in der Header-Datei limit.h. definiert.
Siehe auch bcd
cabs
complex
fabs
labs
access
Syntax #include <io.h>
int access(const char *filename, int amode);
Beschreibung
Ermittelt die Zugriffsmöglichkeiten auf eine Datei.
access prüft, ob eine Datei des (als filename) angegebenen Namens existiert. Wenn ja, folgt eine Prüfung, ob der in amode angegebene Zugriff möglich ist. Die folgenden Werte sind für amode definiert:0
06 Prüfung auf "Lesen und Schreiben erlaubt"
04 Prüfung auf "Lesen erlaubt"
02 Prüfung auf "Schreiben erlaubt"
01 Prüfung auf "Ausführung erlaubt"
00 Prüfung auf "Datei existiert"
Unter DOS, OS/2 und Windows (16- und 32-Bit) besitzen alle existierenden Dateien automatisch Lesezugriff (amode 04), so dass die Werte 04 und 00 für amode dasselbe Ergebnis erzeugen. Eine Schreiberlaubnis impliziert bei DOS auch die Erlaubnis zum Lesen; folglich sind die Werte 06 und 02 für amode ebenfalls äquivalent.
Wenn filename ein Verzeichnis enthält, prüft access nur das Vorhandensein dieses Verzeichnisses.
Rückgabewert
Ist der durch amode angegebene Zugriff erlaubt, so liefert access den Wert 0 zurück. Ansonsten ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
ENOENT Pfad oder Datei nicht vorhanden
EACCES Datei vorhanden, aber Zugriff nicht erlaubt
Siehe auch chmod
DDCHelp Hilfe zur Programmiersprache C Seite 146 von 606
fstat
stat
acos, acosl
Syntax #include <math.h>
double acos(double x);
long double acosl(long double x);
Beschreibung
Berechnet den Arcuskosinus.
acos liefert den Arcuskosinus des Eingabewerts.
acosl ist die long double Version und arbeitet mit einem long double Parameter sowie einem long double Rückgabewert.
Die Argumente zu acos und acosl müssen sich im Bereich von -1 bis 1 befinden. Andernfalls wird der Wert NAN zurückgeliefert und die globale Variable errno wird auf
EDOM Argument außerhalb des zulässigen Bereichs
gesetzt.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
Bei einem Argument zwischen -1 und +1 liefern acos und acosl Werte im Bereich von 0 bis Pi zurück. Die Fehlerbehandlung für acos und acosl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
Siehe auch asin
atan
atan2
bcd
complex
cos
_matherr
sin
tan
alloca
Syntax #include <malloc.h>
void *alloca(size_t size);
Beschreibung
Reserviert temporären Speicher auf dem Stack.
alloca reserviert einen Speicherbereich von size Bytes auf dem Stack. Der reservierte Speicherbereich wird beim Beenden der aufrufenden Funktion automatisch freigegeben.
alloca modifiziert den Stack-Zeiger und darf deshalb nicht in einem Ausdruck aufgerufen werden, der ein Argument einer Funktion ist.
DDCHelp Hilfe zur Programmiersprache C Seite 147 von 606
Die Funktion alloca sollte im try-Block eines C++ Programms nicht verwendet werden. Wenn eine Exception ausgelöst wird, werden alle Werte, die von alloca auf dem Stack abgelegt werden, zerstört.
Die aufrufende Funktion muss Referenzen auf lokale Variablen im Stack enthalten, da der Stack andernfalls beim Funktionsende nicht korrekt wiederhergestellt wird, was zu einem Programmabsturz führt. Verwenden Sie deshalb folgenden Programmtext in der aufrufenden Funktion:
char *p;
char dummy[1];
dummy[0] = 0;
.
.
.
p = alloca(nbytes);
Rückgabewert
Wenn im Stack ein Speicherbereich von ausreichender Größe zur Verfügung steht, liefert alloca einen Zeiger auf den belegten Speicherbereich zurück. Andernfalls wird der Wert NULL zurückgegeben.
Siehe auch
malloc
asctime
Syntax #include <time.h>
char *asctime(const struct tm *tblock);
Beschreibung
Konvertiert Datum und Uhrzeit in einen ASCII-String.
asctime konvertiert eine Zeitangabe, die als Struktur des Typs tm in *tblock gespeichert ist, in einen String mit 26 Zeichen, der wie ctime das folgende Format hat:
Wed Jun 23 15:35:54 1993\n\0
Rückgabewert
asctime liefert einen Zeiger auf den String zurück, der Datum und Uhrzeit enthält. Der String ist eine statische Variable, die mit jedem Aufruf von asctime überschrieben wird.
Siehe auch ctime
difftime
ftime
gmtime
localtime
mktime
strftime
stime
time
DDCHelp Hilfe zur Programmiersprache C Seite 148 von 606
tzset
asin, asinl
Syntax #include <math.h>
double asin(double x);
long double asinl(long double x);
Beschreibung
Berechnet den Arcussinus.
asin liefert für ein reelles Argument den Arcussinus des eingegebenen Werts zurück. asinl ist die long double Version und erwartet ein Argument vom Typ long double. asinl liefert ein Ergebnis vom Typ long double zurück.
asin und asinl erwarten ein reelles Argument im Bereich von -1 bis +1. Reelle Argumente außerhalb dieses Bereichs liefern NAN und setzen errno auf den Wert
EDOM Argument außerhalb des zulässigen Bereichs.
Rückgabewert
Der Rückgabewert von asin und asinl liegt für reelle Argumente im Bereich von -Pi/2 bis Pi/2. Die Fehlerbearbeitung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.
Siehe auch acos
atan
atan2
bcd
complex
cos
_matherr
sin
tan
assert
Syntax #include <assert.h>
void assert(int test);
Beschreibung
Prüft eine Bedingung und bricht das Programm ab, wenn sie nicht zutrifft.
assert ist ein Makro, das bei der Compilierung zu einer if-Anweisung erweitert wird. Wenn test zur Laufzeit des Programms den Wert Null (d.h. false) ergibt, wird die Meldung
Assertion failed: test, file Dateiname, line Zeilennummer
auf stderr ausgegeben. Danach erfolgt der Abbruch des Programms mit abort.
In dieser Meldung bezeichnet Dateiname den Namen der Quelltextdatei und Zeilennummer die Nummer der Zeile, in der sich der Aufruf von assert befindet.
Wenn das Symbol NDEBUG vor der Aufnahme von assert.h im Quelltext (oder mit #define NDEBUG) definiert ist, entfernt der Präprozessor sämtliche Aufrufe von assert.
DDCHelp Hilfe zur Programmiersprache C Seite 149 von 606
Rückgabewert
Keiner.
Siehe auch abort
atan, atanl
Syntax #include <math.h>
double atan(double x);
long double atanl(long double x);
Beschreibung
Berechnet den Arcustangens.
atan berechnet den Arcustangens des übergebenen Arguments.
atanl ist die long double Version und erwartet ein Argument vom Typ long double. atanl liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
atan2 und atan2l liefern einen Wert im Bereich von -Pi bis Pi. Die Fehlerbehandlung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.
Siehe auch acos
asin
atan2
bcd
complex
cos
_matherr
sin
tan
atan2, atan2l
Syntax #include <math.h>
double atan2(double y, double x);
long double atan2l(long double y, long double x);
Beschreibung
Berechnet den Arcustangens von y/x.
atan2 liefert den Arcustangens von y/x und erzeugt auch dann noch korrekte Resultate, wenn sich der ergebende Winkel Pi/2 oder -Pi/2 nähert (den Polstellen der Tangensfunktion, für Werte von x nahe Null).
Wenn die beiden Argumente x und y gleich Null sind, setzt diese Funktion errno auf den Wert EDOM und zeigt so einen ungültigen Eingabewert an.
atan2l ist die long double Version und erwartet ein Argument vom Typ long double. atan2l liefert
DDCHelp Hilfe zur Programmiersprache C Seite 150 von 606
ein Ergebnis vom Typ long double zurück.
Rückgabewert
atan2 und atan2l liefern einen Wert im Bereich von -Pi bis Pi. Die Fehlerbehandlung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.
Siehe auch acos
asin
atan
cos
_matherr
sin
tan
atexit
Syntax #include <stdlib.h>
int atexit(void (_USERENTRY * func)(void));
Beschreibung
Registriert Routinen, die am Ende eines Programms aufgerufen werden sollen.
atexit registriert die Funktion, auf die func zeigt, als sogenannte Exit-Funktion: bei normalem Programmende ruft exit die Funktion (_USERENTRY *func)() unmittelbar vor der Rückkehr zum Betriebssystem auf. func muss zusammen mit der _USERENTRY-Aufrufkonvention verwendet werden.
Durch jeden Aufruf von atexit wird eine weitere Funktion registriert. Bis zu 32 Funktionen können so registriert werden, die bei Programmende nach dem Prinzip "last in - first out" ausgeführt werden; die als letzte mit atexit festgelegte Funktion wird also zuerst ausgeführt.
Rückgabewert
atexit liefert den Wert 0 zurück, wenn die angegebene Funktion aufgenommen werden konnte; falls bereits 32 Funktionen registriert sind (und damit kein weiterer Platz mehr zur Verfügung steht), ist das Ergebnis ungleich Null.
Siehe auch abort
_c_exit
_cexit
_exit
exit
spawn...
atof, _atold
Syntax #include <math.h>
DDCHelp Hilfe zur Programmiersprache C Seite 151 von 606
double atof(const char *s);
long double _atold(const char *s);
Beschreibung
Konvertiert einen String in eine Gleitkommazahl.
atof konvertiert den durch s bezeichneten String in eine Gleitkommazahl und liefert das Ergebnis als double zurück. Die Funktion erkennt dabei folgende Elemente in der Zeichendarstellung der Gleitkommazahl:
eine optionale Folge von Leerzeichen und/oder Tabulatoren;
ein optionales Vorzeichen;
eine Folge von Ziffern und einen optionalen Dezimalpunkt (die Ziffern können vor oder hinter dem Dezimalpunkt stehen);
einen optionalen Exponenten e oder E, gefolgt von einem optional vorzeichenbehafteten Integerwert.
Der String muss dem folgenden Format entsprechen:
[whitespace][sign][ddd][.][ddd][e|E[sign]ddd]
atof erkennt zusätzlich +INF und -INF als positive bzw. negative Unendlichkeit sowie +NAN und -NAN (für "Not a Number" - ein nicht numerisch darstellbarer Wert).
Die Konvertierung bricht beim ersten nicht-interpretierbaren Zeichen ab.
_atold ist die long double Version und konvertiert den durch s bezeichneten String in einen Wert vom Typ long double.
strtod und _strtold arbeiten ähnlich wie atof und _atold, erlauben aber eine bessere Fehlerbehandlung und werden daher in manchen Anwendungen bevorzugt.
Rückgabewert
atof und _atold liefern den konvertierten Wert des Eingabestrings zurück.
Im Fall eines Überlaufs liefert atof (oder _atold) den Wert +HUGE_VAL oder -HUGE_VAL (bzw. _LHUGE_VAL) zurück, errno wird auf ERANGE gesetzt. Die Routine _matherr (bzw. _matherrl) wird nicht aufgerufen.
Siehe auch atoi
atol
ecvt
fcvt
gcvt
scanf
strtod
atoi
Syntax #include <stdlib.h>
int atoi(const char *s);
Beschreibung
Konvertiert einen String in eine Integerzahl.
atoi konvertiert den durch s bezeichneten String in einen int-Wert. Die Funktion erkennt die folgenden Elemente (in der aufgeführten Reihenfolge):
optionale führende Leerzeichen und/oder Tabulatoren;
ein optionales Vorzeichen;
DDCHelp Hilfe zur Programmiersprache C Seite 152 von 606
eine Ziffernfolge.
Der String muss also folgendem Format entsprechen:
[whitespace][sign][ddd]
Die Konvertierung endet beim ersten nicht-interpretierbaren Zeichen, eine Prüfung auf eventuelle Überläufe findet nicht statt (die Funktionsergebnisse sind dann undefiniert)
Rückgabewert
atoi liefert das Ergebnis der Konvertierung oder 0, wenn der zu interpretierende String nicht zu einem Integerwert konvertierbar ist.
Siehe auch atof
atol
ecvt
fcvt
gcvt
scanf
strtod
atol
Syntax #include <stdlib.h>
long atol(const char *s);
Beschreibung
Konvertiert einen String in einen long-Wert
atol konvertiert den durch s bezeichneten String in einen long-Wert. atol erkennt die folgenden Elemente (in der aufgeführten Reihenfolge):
optionale führende Leerzeichen und/oder Tabulatoren;
ein (optionales) Vorzeichen;
eine Ziffernfolge.
Der String muss also folgendem Format entsprechen:
[whitespace][sign][ddd]
Die Konvertierung endet beim ersten nicht-interpretierbaren Zeichen. Eine Prüfung auf eventuelle Überläufe findet nicht statt (die Funktionsergebnisse sind dann undefiniert).
Rückgabewert
atol liefert das Ergebnis der Konvertierung zurück. Wenn der zu interpretierende String nicht zu einem long-Wert konvertiert werden kann, liefert atol 0 zurück.
Siehe auch atof
atoi
ecvt
fcvt
gcvt
scanf
DDCHelp Hilfe zur Programmiersprache C Seite 153 von 606
strtod
strtol
strtoul
bdos
Syntax #include <dos.h>
int bdos(int dosfun, unsigned dosdx, unsigned dosal);
Beschreibung
Ruft eine DOS-Funktion auf.
bdos ermöglicht direkten Zugriff auf zahlreiche DOS-Systemaufrufe. Spezifische Details zu den einzelnen Funktionen entnehmen Sie bitte dem DOS Referenzhandbuch.
Für Systemaufrufe, die ein Integerargument erwarten, wird die Funktion bdos eingesetzt. Wird ein Zeiger erwartet, benutzen Sie bdosptr. In den großen Datenmodellen (Compact, Large, Huge) ist es wichtig, bdosptr für solche Systemaufrufe einzusetzen, die einen Zeiger als Argument erwarten.
dosfun gibt die Nummer des DOS-Systemaufrufs an und ist in Ihrem DOS Referenzhandbuch definiert.
dosdx ist der Wert des Registers DX.
dosal ist der Wert des Registers AL.
Rückgabewert
Zurückgeliefert wird der Wert, auf den das Register AX von DOS gesetzt wurde.
Siehe auch bdosptr
geninterrupt
int86
int86x
intdos
intdosx
bdosptr
Syntax #include <dos.h>
int bdosptr(int dosfun, void *argument, unsigned dosal);
Beschreibung
Ruft eine DOS-Funktion auf.
bdosptr ermöglicht den direkten Zugriff auf zahlreiche DOS-Systemaufrufe. Spezifische Details zu den einzelnen Funktionen entnehmen Sie bitte dem DOS Referenzhandbuch.
Für Systemaufrufe, die ein Integerargument erwarten, wird die Funktion bdos eingesetzt. Wird ein Zeiger erwartet, benutzen Sie bdosptr. In den großen Datenmodellen (Compact, Large, Huge) ist es wichtig, bdosptr für solche Systemaufrufe einzusetzen, die einen Zeiger als Argument erwarten. In den kleinen Datenmodellen wird mit argument das Register DX gesetzt, in den großen
DDCHelp Hilfe zur Programmiersprache C Seite 154 von 606
Datenmodellen werden die Werte von DS:DX angegeben, die der Systemaufruf benutzt.
dosfun gibt die Nummer des DOS-Systemaufrufs an und ist in Ihrem DOS Referenzhandbuch definiert. dosal ist der Wert des Registers AL.
Rückgabewert
Zurückgeliefert wird der Wert, auf den das Register AX von DOS gesetzt wurde. Tritt bei der Ausführung ein Fehler auf, dann liefert die Funktion den Wert -1 und die globalen Variablen errno und _doserrno werden entsprechend gesetzt.
Siehe auch bdos
geninterrupt
int86
int86x
intdos
intdosx
_beginthread
Syntax #include <process.h>
unsigned long _beginthread(_USERENTRY (*start_address)(void *),
unsigned stack_size, void *arglist)
Beschreibung
Startet die Ausführung eines neuen Thread.
Die Funktion _beginthread erzeugt einen neuen Thread und startet ihn. Die Ausführung des Thread beginnt bei der Adresse start_address. (Beachten Sie, dass start_address als _USERENTRY deklariert werden muss.) Der Thread erhält vom Betriebssystem einen Stack der Größe stack_size Bytes, wobei der Wert auf das nächste Vielfache von 4096 aufgerundet wurde. arglist wird dem Thread als einziger Parameter übergeben. arglist kann NULL sein, muss jedoch angegeben werden. Der Thread endet einfach per return oder durch den Aufruf von _endthread.
Entweder sollte diese Funktion oder _beginthreadNT anstelle von Thread-erzeugenden Funktionen des Betriebssystems verwendet werden, da nur für Funktionen der Laufzeitbibliothek auch die benötigten Initialisierungen durchgeführt werden.
Diese Funktion ist nur in den Multi-Thread-Bibliotheken verfügbar.
Rückgabewert
_beginthread liefert das Handle des neuen Thread zurück. Im Fehlerfall wird -1 zurückgegeben und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EAGAIN Zu viele Threads
EINVAL Ungültige Anforderung
Siehe auch die Win32-Beschreibung von GetLastError.
Siehe auch _beginthreadNT
_endthread
DDCHelp Hilfe zur Programmiersprache C Seite 155 von 606
_beginthreadNT
Syntax #include <process.h>
unsigned long _beginthreadNT(void (_USERENTRY *start_address)(void *),
unsigned stack_size, void *arglist, void *security_attrib, unsigned
long create_flags, unsigned long *thread_id);
Beschreibung
Startet die Ausführung eines neuen Thread unter Windows NT.
Alle Multi-Thread-Programme unter Windows NT müssen _beginthreadNT oder die Funktion _beginthread an Stelle der API-Funktion des Betriebssystems zur Erzeugung des Thread verwenden, da diese Funktionen eine Initialisierung ausführen, die für ein korrektes Arbeiten der Laufzeitbibliotheksfunktionen erforderlich sind. Die Funktion _beginthreadNT bietet Hilfen für die Betriebssystemsicherheit. Diese Funktionen sind nur in den Multi-Thread-Bibliotheken verfügbar.
Die Funktion _beginthreadNT erzeugt und startet einen neuen Thread. Der Thread beginnt mit der Ausführung bei start_address.
Hinweis: start_address muss als _USERENTRY deklariert sein.
Die Größe seines Stack in Bytes beträgt stack_size; der Stack wird durch das Betriebssystem reserviert, nachdem die Stack-Größe auf das nächste Vielfache von 4096 aufgerundet wurde. arglist kann NULL sein, muss allerdings angegeben werden. Der Thread terminiert, indem er einfach zurückkehrt oder indem er _endthread aufruft.
Die Funktion _beginthreadNT verwendet den Zeiger security_attr, um auf die Struktur SECURITY_ATTRIBUTES zuzugreifen. Die Struktur enthält die Sicherheitsattribute für den Thread. Wenn security_attr NULL ist, wird der Thread mit Standardsicherheitsattributen erzeugt. Das Thread-Handle wird nicht geerbt, wenn security_attr NULL ist.
_beginthreadNT greift auf die Variable create_flags für Flags zu, die zusätzliche Informationen über die Thread-Erzeugung bietet. Diese Variable kann Null sein. Damit wird angegeben, dass der Thread direkt nach der Erzeugung starten wird. Die Variable kann aber auch den Wert CREATE_SUSPENDED annehmen. In diesem Falle wird der Thread solange nicht laufen, bis die Funktion ResumeThread aufgerufen wird. ResumeThread wird durch Win32-API bereitgestellt.
_beginthreadNT initialisiert die Variable thread_id mit dem Thread-Bezeichner.
Rückgabewert
Bei Erfolg gibt _beginthreadNT das Handle des neuen Thread zurück.
Bei Fehler gibt sie -1 zurück und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EAGAIN Zu viele Threads
EINVAL Ungültige Anforderung
Siehe auch _beginthread
_endthread
biosequip
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 156 von 606
#include <bios.h>
int biosequip(void);
Beschreibung
Liefert eine Liste installierter Peripheriegeräte.
Diese Funktion benutzt den BIOS-Interrupt 0x11 und liefert einen Integerwert zurück, der die Systemkonfiguration beschreibt.
Rückgabewert
Der zurückgelieferte Wert setzt sich aus mehreren Bitfeldern zusammen. Die Werte für IBM-PC und -Kompatible sind folgende:
Bit 14-15 Anzahl der parallel angeschlossenen Drucker
00 = 0 Drucker
01 = 1 Drucker
10 = 2 Drucker
11 = 3 Drucker
Bit 13 seriell angeschlossener Drucker
Bit 12 Gameport angeschlossen
Bit 9-11 Anzahl der seriellen Schnittstellen (DOS sieht normalerweise nur zwei Schnittstellen vor, kann aber für vier eingerichtet werden; der IBM PS/2 sieht bis zu acht Schnittstellen vor.)
000 = 0 Schnittstellen
001 = 1 Schnittstelle
010 = 2 Schnittstellen
011 = 3 Schnittstellen
100 = 4 Schnittstellen
101 = 5 Schnittstellen
110 = 6 Schnittstellen
111 = 7 Schnittstellen
Bit 8 DMA (direct memory access)
0 = Rechner hat DMA
1 = Rechner hat kein DMA, z.B. PC Jr.
Bit 6-7 Anzahl von Laufwerken
00 = 1 Laufwerk
01 = 2 Laufwerke
10 = 3 Laufwerke
11 = 4 Laufwerke, nur falls Bit 0 den Wert 1 hat
Bit 4-5 Bildschirmmodus beim Start
00 = unbenutzt
01 = 40x25 schwarzweiß mit Farbkarte
10 = 80x25 schwarzweiß mit Farbkarte
11 = 80x25 schwarzweiß mit Monochromkarte
Bit 2-3 RAM-Größe auf Hauptplatine
00 = 16 K
01 = 32 K
10 = 48 K
11 = 64 K
Bit 1 Mathematischer Koprozessor installiert
Bit 0 Von Diskette booten
DDCHelp Hilfe zur Programmiersprache C Seite 157 von 606
_bios_equiplist
Syntax #include <bios.h>
unsigned _bios_equiplist(void);
Beschreibung
Liefert eine Liste installierter Peripheriegeräte.
_bios_equiplist benutzt den BIOS-Interrupt 0x11 und liefert einen Integerwert zurück, der die Systemkonfiguration beschreibt.
Rückgabewert
Der zurückgelieferte Wert setzt sich aus mehreren Bitfeldern zusammen. Die Werte für IBM-PC und -Kompatible sind folgende:
Bit 14-15 Anzahl der parallel angeschlossenen Drucker
00 = 0 Drucker
01 = 1 Drucker
10 = 2 Drucker
11 = 3 Drucker
Bit 13 seriell angeschlossener Drucker
Bit 12 Gameport angeschlossen
Bit 9-11 Anzahl der seriellen Schnittstellen (DOS sieht normalerweise nur zwei Schnittstellen vor, kann aber für vier eingerichtet werden; der IBM PS/2 sieht bis zu acht Schnittstellen vor.)
000 = 0 Schnittstellen
001 = 1 Schnittstelle
010 = 2 Schnittstellen
011 = 3 Schnittstellen
100 = 4 Schnittstellen
101 = 5 Schnittstellen
110 = 6 Schnittstellen
111 = 7 Schnittstellen
Bit 8 DMA (direct memory access)
0 = Rechner hat DMA
1 = Rechner hat kein DMA, z.B. PC Jr.
Bit 6-7 Anzahl von Laufwerken
00 = 1 Laufwerk
01 = 2 Laufwerke
10 = 3 Laufwerke
11 = 4 Laufwerke, nur falls Bit 0 den Wert 1 hat
Bit 4-5 Bildschirmmodus beim Start
00 = unbenutzt
01 = 40x25 schwarzweiß mit Farbkarte
10 = 80x25 schwarzweiß mit Farbkarte
11 = 80x25 schwarzweiß mit Monochromkarte
Bit 2-3 RAM-Größe auf Hauptplatine
00 = 16 K
01 = 32 K
10 = 48 K
11 = 64 K
Bit 1 Mathematischer Koprozessor installiert
DDCHelp Hilfe zur Programmiersprache C Seite 158 von 606
Bit 0 Von Diskette booten
biosmemory
Syntax #include <bios.h>
int biosmemory(void);
Beschreibung
Liefert die Größe des Hauptspeichers zurück.
Diese Funktion verwendet den BIOS-Interrupt 0x12 zur Bestimmung der RAM-Größe. Zusätzliches RAM in Grafikkarten, Erweiterungsspeicher und Expansionsspeicher wird nicht berücksichtigt.
Rückgabewert
biosmemory liefert die Größe des Hauptspeichers in Blöcken von einem KByte zurück.
_bios_memsize
Syntax #include <bios.h>
unsigned _bios_memsize(void);
Beschreibung
Liefert die Größe des Hauptspeichers zurück.
Diese Funktion verwendet den BIOS-Interrupt 0x12 zur Bestimmung der RAM-Größe. Zusätzliches RAM in Grafikkarten, Erweiterungsspeicher und Expansionsspeicher wird nicht berücksichtigt.
Rückgabewert
_bios_memsize liefert die Größe des Hauptspeichers in Blöcken von einem KByte zurück.
biostime
Syntax #include <bios.h>
long biostime(int cmd, long newtime);
Beschreibung
Liefert den Stand des BIOS-Timers zurück oder setzt einen neuen Wert.
Der BIOS-Timer ist ein eingebauter Zähler, der jeweils um 0 Uhr 00 auf den Wert 0 gesetzt und von da an pro Sekunde um eine durch _BIOS_CLOCKS_PER_SEC definierte Anzahl erhöht wird. biostime verwendet den BIOS-Interrupt 0x1A zum Lesen bzw. Setzen dieses Zählers.
Wenn cmd den Wert 0 hat, liefert biostime den aktuellen Wert des Zählers zurück. Wenn cmd den Wert 1 hat, setzt biostime den Zähler auf den durch newtime angegebenen long-Wert. Zum Beispiel:
totalsecs = biostime(int cmd, long newtime) / _BIOS_CLK_TCK;
Die Kostanten _BIOS_CLOCKS_PER_SEC und _BIOS_CLK_TCK sind in der Header-Datei bios.h definiert
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 159 von 606
Wenn cmd den Wert 0 hat, liefert biostime den aktuellen Wert des Zählers zurück.
_bios_timeofday
Syntax #include <bios.h>
unsigned _bios_timeofday(int cmd, long *timep);
Beschreibung
Liefert den Stand des BIOS-Timers zurück oder setzt einen neuen Wert.
Der BIOS-Timer ist ein eingebauter Zähler, der jeweils um 0 Uhr 00 auf den Wert 0 gesetzt und von da an rund 18.2 mal pro Sekunde um eins erhöht wird. _bios_timeofday verwendet den BIOS-Interrupt 0x1A zum Lesen bzw. Setzen dieses Zählers.
Der Parameter cmd kann einen der folgenden Werte haben:
_TIME_GETCLOCK _bios_timeofday speichert den aktuellen Stand des Zählers an der Position, auf die timep zeigt. Wurde der Zähler seit 0 Uhr 00 nicht gesetzt oder gelesen, liefert _bios_timeofday 1 zurück, andernfalls ist das Ergebnis 0.
_TIME_SETCLOCK _bios_timeofday setzt den Zähler auf den durch timep bezeichneten long-Wert. Die Funktion liefert keinen Wert zurück.
Rückgabewert
Die Funktion _bios_timeofday liefert den Wert zurück, auf den das Register AX durch die Abfrage des BIOS-Timers gesetzt wurde.
bsearch
Syntax #include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nelem, size_t
width, int (_USERENTRY *fcmp)(const void *, const void *));
Beschreibung
Binäres Absuchen eines Array.
bsearch sucht eine Tabelle (ein Array) mit nelem Elementen ab. Die Elemente müssen sortiert sein. bsearch liefert die Adresse des ersten Eintrags in der Tabelle, der mit dem Suchschlüssel *key übereinstimmt oder 0, wenn keine Übereinstimmung gefunden wird. Da es sich um eine binäre Suche handelt, ist die erste Fundstelle nicht notwendigerweise der erste Eintrag in der Tabelle.
Der Datentyp size_t ist in der Header-Datei stddef.h definiert.
base muss auf das erste Element des Array zeigen.
nelem ist ein Integer, der die Anzahl der Array-Elemente enthält.
width gibt die Größe eines einzelnen Elements in Bytes an.
Die Vergleichsroutine fcmp muss mit der _USERENTRY-Aufrufkonvention verwendet werden.
Der Parameter *fcmp zeigt auf eine vom Programmierer erstellte Routine, der jeweils zwei Argumente in Form von Zeigern (elem1, elem2) zum Vergleich übergeben werden: Die Routine vergleicht *elem1 und *elem2 und liefert für bsearch einen Integerwert mit den folgenden möglichen Werten zurück:
< 0 falls *elem1 << *elem2 == 0 falls *elem1 == *elem2
DDCHelp Hilfe zur Programmiersprache C Seite 160 von 606
> 0 falls *elem1 >> *elem2
Rückgabewert
bsearch liefert die Adresse des ersten Elements des Array zurück, das mit dem Suchschlüssel übereinstimmt. Falls der gesuchte Eintrag nicht existiert, wird 0 zurückgeliefert.
Siehe auch
lfind
lsearch
qsort
cabs, cabsl
Syntax #include <math.h>
double cabs(struct complex z);
long double cabsl(struct _complexl z);
Beschreibung
Berechnet den Absolutwert einer komplexen Zahl.
cabs ist ein Makro, das den Absolutwert von z, einer Struktur des Typs complex, berechnet. Dieser Strukturtyp ist in math.h folgendermaßen definiert:.
struct complex {
double x, y;
};
wobei x den Real- und y den Imaginärteil der komplexen Zahl aufnimmt.
Der Aufruf von cabs entspricht einem Aufruf von sqrt mit den Quadraten der reellen und imaginären Bestandteile von z, also
sqrt(z.x * z.x + z.y * z.y)
cabsl ist die long double Version und erwartet als Argument eine Struktur des Typs _complexl. Sie liefert ein Ergebnis vom Typ long double zurück.
Hinweis: Wenn Sie mit C++ arbeiten, können Sie auch Typ complex (definiert in complex.h,) und die Funktion abs zur Ermittlung des Absolutwerts einer komplexen Zahl verwenden.
Rückgabewert
cabs (oder cabsl) liefert den Absolutwert von z als double. Bei einem Überlauf liefert cabs (oder cabsl) HUGE_VAL (bzw. _LHUGE_VAL) und setzt errno auf
ERANGE Ergebnis außerhalb des Rechenbereichs
Die Fehlerbehandlung für diese Funktionen kann über _matherr und _matherrl modifiziert werden.
Siehe auch abs
complex
errno (globale Variable)
fabs
labs
_matherr
DDCHelp Hilfe zur Programmiersprache C Seite 161 von 606
calloc
Syntax #include <stdlib.h>
void *calloc(size_t nitems, size_t size);
Beschreibung
Reserviert Hauptspeicher.
Über diese Funktion wird der Heap verwaltet, in dem Platz für dynamische Variablen belegt und wieder freigegeben werden kann. Viele Datenstrukturen, wie z.B. Bäume und Listen, können nur auf dem Heap untergebracht werden.
Speichermodelle sind nur in 16-Bit Anwendungen verfügbar.
In den Datenmodellen Tiny (Nur unter DOS), Small und Medium liegt der Heap zwischen dem Ende des Datensegments und der Spitze des Stack. Der Heap belegt den gesamten hier zur Verfügung stehenden Speicherbereich bis auf einige Bytes direkt unterhalb der Stack-Spitze, die für Stackvergrößerungen und für das Betriebssystem reserviert sind.
In den großen Datenmodellen (Compact, Large und Huge) beginnt der Heap oberhalb des Stack und endet mit der höchsten vom System zur Verfügung gestellten Speicheradresse.
Hinweis: Speichermodelle sind nur für 16-Bit-Anwendungen verfügbar.
calloc belegt einen Speicherbereich von nitems * size Bytes, die mit 0 initialisiert werden. Für die Belegung von Speicherblöcken mit mehr als 64 KByte muss die Funktion farcalloc verwendet werden.
Rückgabewert
calloc liefert einen Zeiger auf den neu reservierten Speicherbereich. Wenn kein Speicherbereich ausreichender Größe zur Verfügung steht, oder wenn nitems oder size den Wert 0 haben, liefert calloc NULL zurück.
Siehe auch
farcalloc
free
malloc
realloc
ceil, ceill
Syntax #include <math.h>
double ceil(double x);
long double ceill(long double x);
Beschreibung
Rundet auf.
ceil ermittelt den kleinsten Integerwert größer oder gleich x.
ceill ist die long double Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
Die Funktionen ceil und ceill liefern ihr ganzzahliges Ergebnis als Wert vom Typ double bzw. long double zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 162 von 606
Siehe auch floor
fmod
_c_exit
Syntax #include <process.h>
void _c_exit(void);
Beschreibung
Führt die gleichen Arbeiten wie exit durch, ohne das laufende Programm zu beenden.
_c_exit führt die gleichen Arbeiten wie _exit, durch, beendet aber den aufrufenden Prozess nicht.
Rückgabewert
Keiner.
Siehe auch abort
atexit
_cexit
exec...
_exit
exit
signal
spawn...
_cexit
Syntax #include <process.h>
void _cexit(void);
Beschreibung
Führt die gleichen Arbeiten wie _exit durch, ohne das laufende Programm zu beenden.
_cexit führt die gleichen Arbeiten wie _exit durch, schließt aber keine offenen Dateien und beendet den aufrufenden Prozess nicht. Sämtliche Dateipuffer werden geschrieben und die mit atexit festgelegte Exit-Funktionen werden aufgerufen.
Rückgabewert
Keiner.
Siehe auch abort
atexit
_c_exit
exec...
_exit
DDCHelp Hilfe zur Programmiersprache C Seite 163 von 606
exit
signal
spawn...
cgets
Syntax #include <conio.h>
char *cgets(char *str);
Beschreibung
Liest einen String von der Tastatur.
cgets liest einen String von der Tastatur und speichert ihn (und die Stringlänge) an der Speicherstelle, auf die str zeigt.
cgets liest die Zeichen, bis es eine CR/LF-Kombination antrifft oder bis die maximal zulässige Zeichenzahl gelesen wurde. Vor der Speicherung des Strings wird die eventuell gelesene CR/LF-Kombination durch ein abschließendes Nullzeichen (\0) ersetzt.
Speichern Sie vor dem Aufruf von cgets in str[0] die Maximallänge des zu lesenden Strings. Nach der Rückkehr steht in str[1] die Anzahl der tatsächlich gelesenen Zeichen. Die gelesenen Zeichen werden ab str[2] gespeichert und enden mit einem Nullzeichen. str muss daher mindestens str[0] + 2 Bytes lang sein.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
cgets liefert einen Zeiger auf str[2] zurück, d.h. auf die Adresse des ersten eingelesenen Zeichens.
Siehe auch cputs
fgets
getch
getche
gets
_chain_intr
Syntax #include <dos.h>
void _chain_intr(void (interrupt far *newhandler)());
Beschreibung
Übergibt die Steuerung an einen anderen Interrupt-Handler.
_chain_intr übergibt die Steuerung vom aktuell ausgeführten Interrupt-Handler an den Interrupt-Handler mit der Adresse newhandler. Der aktuelle Registersatz wird dabei nicht an den neuen Handler übergeben. Der neue Interrupt-Handler übernimmt statt dessen die Register, die vom alten Handler auf dem Stack platziert und dort möglicherweise modifiziert wurden. Der neue Interrupt-Handler kann zurückkehren als wäre er der alte Handler. Dieser wird nicht wieder aktiviert.
_chain_intr kann nur von C-Interrupt-Funktionen aufgerufen werden. Die Funktion ist hilfreich beim Schreiben eines speicherresidenten Programms (TSR), das sich selbst in die Kette der Interrupt-
DDCHelp Hilfe zur Programmiersprache C Seite 164 von 606
Handler (z.B. dem Tastatur-Interrupt) einhängen muss.
Rückgabewert
Keiner.
Siehe auch _dos_getvect
_dos_setvect
chdir
Syntax #include <dir.h>
int chdir(const char *path);
Beschreibung
Wechselt das aktuelle Verzeichnis.
chdir setzt das durch path bezeichnete Verzeichnis als aktuelles Arbeitsverzeichnis. Der Parameter path muss ein existierendes Verzeichnis enthalten.
path kann auch eine Laufwerksangabe enthalten wie etwa:
chdir ("a:\\BC")
Hier wird jedoch nur das aktuelle Verzeichnis dieses Laufwerks gewechselt, nicht das aktive Laufwerk selbst.
Unter Windows ist nur der aktive Prozess betroffen.
Unter DOS ändert die Funktion auch das aktuelle Verzeichnis des Elternprozesses.
Rückgabewert
Wenn das angegebene Verzeichnis gesetzt werden konnte, liefert chdir den Wert 0; ansonsten wird -1 zurückgeliefert und die globale Variable errno erhält den Wert:
ENOENT Pfad/Datei nicht gefunden
Siehe auch getcurdir
getcwd
getdisk
mkdir
rmdir
setdisk
system
_chdrive
Syntax #include <direct.h>
int _chdrive(int drive);
Beschreibung
Setzt das aktuelle Laufwerk.
DDCHelp Hilfe zur Programmiersprache C Seite 165 von 606
_chdrive macht das durch drive bezeichnete Laufwerk (1 = A, 2 = B, 3 = C, usw.) zum aktuellen Laufwerk.
Diese Funktion ändert nur das aktuelle Laufwerk des Elternprozesses.
Rückgabewert
Wenn das aktuelle Laufwerk erfolgreich geändert werden konnte, liefert _chdrive den Wert 0; ansonsten wird -1 zurückgeliefert.
Siehe auch _dos_setdrive
chmod
Syntax #include <sys\stat.h>
int chmod(const char *path, int amode);
Beschreibung
Ändert die Zugriffsmöglichkeiten auf eine Datei.
chmod setzt die Zugriffsberechtigung der durch path angegebenen Datei auf den durch amode angegebenen Wert. path zeigt auf einen String.
amode kann eine (oder beide) der in sys\stat.h definierten symbolischen Konstanten S_IWRITE und S_IREAD enthalten:
Wert von amode Zugriffsberechtigung
S_IWRITE Schreiben erlaubt
S_IREAD Lesen erlaubt
S_IREAD|S_IWRITE Lesen und Schreiben erlaubt
Rückgabewert
Bei fehlerfreier Ausführung liefert chmod den Wert 0.
Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
Siehe auch access
fstat
open
_rtl_chmod
sopen
stat
DDCHelp Hilfe zur Programmiersprache C Seite 166 von 606
chsize
Syntax #include <io.h>
int chsize(int handle, long size);
Beschreibung
Ändert die Größe einer Datei.
chsize ändert die Größe der mit handle verbundenen Datei. Wenn diese Datei mehr als size Bytes umfasst, wird sie entsprechend verkürzt (d.h. alle Zeichen hinter dem neuen Dateiende-Flag werden gelöscht). Andernfalls wird sie mit Nullzeichen ('\0') aufgefüllt.
Die Datei muss in beiden Fällen in einem Modus geöffnet worden sein, der Schreibaktionen erlaubt.
Rückgabewert
Bei fehlerfreier Ausführung liefert chsize den Wert 0. Ansonsten ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht erlaubt
EBADF Ungültiges Handle
ENOSPC Nicht genügend Platz vorhanden
Siehe auch close
creat
open
_rtl_creat
_clear87
Syntax #include <float.h>
unsigned int _clear87 (void);
Beschreibung
Löscht das Statuswort für Gleitkommabearbeitung.
_clear87 löscht das Statuswort für Gleitkommabearbeitung, dessen Inhalt sich aus dem Statuswort des 80x87 und einigen Bits zusammensetzt, die von der Routine zur Behandlung von Ausnahmezuständen des 80x87 entdeckt werden.
Rückgabewert
Es wird der vorherige Inhalt des Statuswortes zurückgeliefert, dessen einzelne Bits in float.h dokumentiert sind.
Siehe auch _control87
_fpreset
_status87
DDCHelp Hilfe zur Programmiersprache C Seite 167 von 606
clearerr
Syntax #include <stdio.h>
void clearerr(FILE *stream);
Beschreibung
Setzt das Fehler- und das Dateiende-Flag für einen bestimmten Stream zurück.
clearerr setzt das Fehler-Flag und das Dateiende-Flag des durch stream bezeichneten Stream auf 0 zurück. Das Fehler-Flag einer Datei bleibt nach einem Fehler solange gesetzt, bis entweder clearerr oder rewind aufgerufen werden. Das Dateiende-Flag wird bei jeder Eingabeoperation in die Datei zurückgesetzt.
Rückgabewert
Keiner.
Siehe auch eof
feof
ferror
perror
rewind
clock
Syntax #include <time.h>
clock_t clock(void);
Beschreibung
Berechnet die seit dem Programmaufruf verbrauchte "CPU-Zeit".
clock kann verwendet werden, um die zwischen zwei Ereignissen vergangene Zeit zu bestimmen. Um die Zeit in Sekunden zu berechnen, kann die von clock gelieferte Zeit durch die Konstante CLK_TCK geteilt werden.
Rückgabewert
clock liefert die seit dem Programmaufruf bis jetzt verbrauchte "CPU-Zeit" zurück. Falls die Prozessorzeit nicht verfügbar ist oder deren Wert nicht dargestellt werden kann, liefert die Funktion -1 zurück
Siehe auch time
close
Syntax #include <io.h>
int close(int handle);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 168 von 606
Schließt eine Datei.
close schließt die durch handle bezeichnete Datei. Ein Handle wird durch einen Aufruf von creat, creatnew, creattemp, dup, dup2, open, _rtl_creat, oder _rtl_open.
Diese Funktion schreibt kein ^Z ([Ctrl-Z]) als Dateiende-Zeichen. Falls Sie eine Datei mit ^Z abschließen wollen, müssen Sie dieses Zeichen explizit ausgeben.
Rückgabewert
close liefert den Wert 0 zurück, wenn die Operation fehlerfrei ausgeführt werden konnte, ansonsten -1.
handle muss ein gültiges Handle sein, dem eine gültige, offene Datei zugeordnet ist. Falls dem nicht so ist, erhält die globale Variable errno den Wert:
EBADF Ungültiges Handle
Siehe auch chsize
creat
creatnew
dup
fclose
open
_rtl_close
sopen
closedir
Syntax #include <dirent.h>
void closedir(DIR *dirp);
Beschreibung
Schließt einen Verzeichnis-Stream.
Unter UNIX ist closedir auf POSIX-Systemen verfügbar.
Die Funktion schließt den Verzeichnis-Stream dirp, der vorher durch einen Aufruf von opendir geöffnet wurde. Nachdem der Stream geschlossen wurde, zeigt dirp nicht mehr auf einen gültigen Verzeichnis-Stream
Rückgabewert
Bei fehlerfreier Ausführung liefert closedir den Wert 0. Ansonsten ist der Rückgabewert -1 und die globale Variable errno wird auf den folgenden Wert gesetzt:
EBADF Der Parameter dirp zeigt nicht auf einen gültigen geöffneten Verzeichnis-Stream.
Siehe auch errno (globale Variable)
opendir
readdir
rewinddir
DDCHelp Hilfe zur Programmiersprache C Seite 169 von 606
clreol
Syntax #include <conio.h.>
void clreol(void);
Beschreibung
Löscht alle Zeichen von der aktuellen Cursorposition bis zum Zeilenende.
clreol löscht innerhalb des aktuellen Textfensters die Spalten von der Cursorposition bis zum Ende der Zeile. Der Cursor wird dabei nicht bewegt.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
Keiner.
Siehe auch clrscr
delline
window
clrscr
Syntax #include <conio.h>
void clrscr(void);
Beschreibung
Löscht den Inhalt des aktuellen Textfensters.
clrscr löscht den gesamten Inhalt des aktuellen Textfensters und platziert den Cursor in die obere linke Ecke des Textfensters, d.h. auf die Koordinaten (1,1).
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
Keiner.
Siehe auch clreol
delline
window
_control87
Syntax #include <float.h>
unsigned int _control87(unsigned int newcw, unsigned int mask);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 170 von 606
Liest und setzt das Steuerwort für Gleitkommaoperationen.
_control87 ermittelt oder ändert das Steuerwort für Gleitkommaoperationen. Über die Bits dieses Wortes - ein unsigned int-Wert - werden insbesondere die Modi für Genauigkeit, Rundungsrichtung und die Behandlung unendlicher Werte in den Gleitkommaroutinen festgelegt. Durch Änderung dieser Modi können Ausnahmesituationen bei Gleitkommarechnungen unterschiedlich behandelt werden.
Die einzelnen Bits von mask bestimmen, welche Bits des Steuerwortes verändert werden. Die entsprechenden Bits von newcw definieren die neuen Werte. Wenn ein Bit von mask auf 1 gesetzt ist, dann wird das entsprechende Bit des Steuerwortes auf den Wert gesetzt, den das korrespondierende Bit von newcw hat. Ein Beispiel:
Ursprüngliches Steuerwort: 0100 0011 0110 0011
mask: 1000 0001 0100 1111
newcw: 1110 1001 0000 0101
Geänderte Bits: 1xxx xxx1 x0xx 0101
Wenn mask 0 ist, liefert _control87 das Steuerwort zurück, ohne es zu ändern.
Rückgabewert
_control87 liefert das neue Steuerwort zurück, das als Bitmuster interpretiert werden muss. Eine vollständige Definition aller von _control87 zurückgelieferten Bits finden Sie in der Header-Datei float.h.
Siehe auch _clear87
_fpreset
signal
_status87
cos, cosl
Syntax #include <math.h>
double cos(double x);
long double cosl(long double x);
Beschreibung
Berechnet den Kosinus des Arguments.
cos erwartet einen Winkel in der Einheit rad als Argument und liefert den dazugehörigen Kosinus zurück.
cosl ist die long double Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
Für ein reelles Argument liefert cos Werte im Bereich von -1 bis +1 zurück. Die Fehlerbehandlung für cos und cosl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
Siehe auch acos
asin
DDCHelp Hilfe zur Programmiersprache C Seite 171 von 606
atan
atan2
bcd
complex
_matherr
sin
tan
cosh, coshl
Syntax #include <math.h>
double cosh(double x);
long double coshl(long double x);
Beschreibung
Berechnet den Kosinus hyperbolicus des Arguments.
cosh berechnet den Kosinus hyperbolicus .
coshl ist die long double Version und erwartet ein Argument vom Typ long double. Sie liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert cosh den Kosinus hyperbolicus des Arguments.
Bei Überläufen liefert cosh den Wert HUGE_VAL und coshl den Wert _LHUGE_VAL (jeweils mit korrektem Vorzeichen) zurück, und die globale Variable errno wird auf ERANGE (Ergebnis außerhalb des Rechenbereichs) gesetzt.
Die Fehlerbehandlung für cosh und coshl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
Siehe auch acos
asin
atan
atan2
bcd
complex
cos
_matherr
sin
sinh
tan
tanh
country
Syntax #include <dos.h>
DDCHelp Hilfe zur Programmiersprache C Seite 172 von 606
struct COUNTRY *country(int xcode, struct COUNTRY *cp);
Beschreibung
Liefert Informationen über nationale Formate für Uhrzeit, Datum und numerische Werte.
country setzt nationale Formate für numerische Werte, Trennzeichen, Uhrzeit und Datum, wobei die tatsächlich gesetzten Werte von der verwendeten Betriebssystemversion abhängig sind.
Wenn cp den Wert -1 hat, wird das landesspezifische Format auf den durch xcode angegebenen Wert gesetzt, der in diesem Fall ungleich Null sein muss. Ansonsten füllt country die Struktur, auf die cp zeigt: Wenn xcode den Wert 0 hat, entsprechen die Werte den aktuellen landesspezifischen Einstellungen, wenn xcode ungleich Null ist, werden die Werte des entsprechenden Landes ermittelt.
Die Struktur COUNTRY ist in dos.h wie folgt definiert:
struct COUNTRY {
short co_date; /* Datumsformat */
char co_curr[5]; /* Währungssymbol */
char co_thsep[2]; /* Trennzeichen für 1000er */
char co_desep[2]; /* Dezimaltrennzeichen */
char co_dtsep[2]; /* Datumstrennzeichen */
char co_tmsep[2]; /* Uhrzeittrennzeichen */
char co_currstyle; /* Währungsformat */
char co_digits; /* Anzahl Nachkommastellen bei Währung*/
char co_time; /* Uhrzeit: 12 / 24 Stunden */
long co_case; /* Groß-/Kleinschreibung */
char co_dasep[2]; /* Datentrennzeichen */
char co_fill[10]; /* Füllzeichen */
};
Der Integer co_date kann drei Werte annehmen:
0 USA-Format: Monat, Tag, Jahr
1 europäisches Format: Tag, Monat, Jahr
2 japanisches Format: Jahr, Monat, Tag
Das Element co_currstyle legt fest, in welchem Format Geldbeträge ausgegeben werden:
0 das Währungssymbol steht ohne Leerzeichen vor dem Betrag ("DM1000")
1 das Währungssymbol steht ohne Leerzeichen hinter dem Betrag ("1000DM")
2 wie 0, nur mit einem Leerzeichen zwischen Währungssymbol und Betrag
3 wie 1, nur mit einem Leerzeichen zwischen Betrag und Währungssymbol
Rückgabewert
Bei fehlerfreier Ausführung liefert country das Zeigerargument cp zurück, andernfalls NULL.
cprintf
Syntax #include <conio.h>
int cprintf(const char *format[, argument, ...]);
Beschreibung
Gibt eine formatierte Ausgabe auf den Bildschirm aus.
cprintf übernimmt eine Reihe von Argumenten, auf die jeweils eine Formatierungsanweisung angewendet wird. Die Formatierungsanweisungen sind in dem String enthalten, auf den format zeigt. Die so formatierten Daten werden direkt im aktuellen Textfenster ausgegeben. Die Anzahl der übergebenen Argumente muss mit der der Formatierungsanweisungen übereinstimmen.
Weitere Details über Formatierungsanweisungen finden Sie unter printf Formatierungsanweisungen.
DDCHelp Hilfe zur Programmiersprache C Seite 173 von 606
Abhängig vom Wert der globalen Variablen _directvideo wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben.
Anders als bei fprintf und printf wird keine Übersetzung des Zeichens \n (Zeilenvorschub) in \r\n (Wagenrücklauf/Zeilenvorschub) vorgenommen. Ebenso wird das Zeichen \t (Tabulator) nicht in Leerzeichen umgewandelt.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
cprintf liefert die Anzahl der ausgegebenen Zeichen zurück.
Siehe auch _directvideo (globale Variable)
fprintf
printf
putch
sprintf
vprintf
cputs
Syntax #include <conio.h>
int cputs(const char *str);
Beschreibung
Gibt einen String auf den Bildschirm aus.
cputs schreibt den nullterminierten String str auf den Bildschirm in das aktuelle Textfenster. Diese Funktion erzeugt keinen automatischen Zeilenvorschub am Ende der Ausgabe.
Abhängig vom Wert der globalen Variablen directvideo wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben. Anders als bei puts wird keine Übersetzung des Zeichens \n (Zeilenvorschub) in \r\n (Wagenrücklauf/Zeilenvorschub) vorgenommen.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
cputs liefert das zuletzt geschriebene Zeichen zurück.
Siehe auch cgets
fputs
putch
puts
creat
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 174 von 606
#include <io.h>
int creat(const char *path, int amode);
Beschreibung
Erzeugt eine neue Datei oder überschreibt eine bereits vorhandene Datei.
Hinweis: Beachten Sie, dass ein Backslash in einem Pfadname '\\' erfordert.
creat erzeugt einen neue Datei oder leitet das Überschreiben einer existierenden Datei ein, die durch path bezeichnet wird. Der Parameter amode wird nur bei neuen erzeugten Dateien ausgewertet.
Mit creat erzeugte Dateien werden grundsätzlich in dem durch die globale Variable _fmode gesetzten Modus (O_TEXT oder O_BINARY) erzeugt.
Existiert eine Datei des angegebenen Namens noch nicht, wird sie von creat erzeugt. Wenn die Datei bereits existiert und das Schreiben-Attribut gesetzt ist, wird sie auf null Bytes verkürzt und die Dateiattribute bleiben unverändert. Falls bei der Datei das Nur-Lesen-Attribut gesetzt ist, bricht creat mit einem Fehler ab, die Datei bleibt unverändert.
Ein Aufruf von creat überprüft nur das S_IWRITE-Bit von amode. Ist dieses Bit 1, kann in die Datei geschrieben werden, ist das Bit 0, ist nur das Lesen erlaubt. Alle anderen Dateiattribute des Betriebssystems werden auf 0 gesetzt.
Die folgenden Konstanten sind in sys\stat.h für amode definiert:
Wert von amode Zugriffsberechtigung
S_IWRITE Schreiben erlaubt
S_IREAD Lesen erlaubt
S_IREAD|S_IWRITE Lesen und Schreiben erlaubt
Die Erlaubnis zum Schreiben enthält automatisch die Leseerlaubnis.
Rückgabewert
Wenn die angegebene Datei fehlerfrei geöffnet werden konnte, liefert creat das neue Datei-Handle (einen positiven Integerwert) zurück.
Im Fehlerfall wird -1 geliefert und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
EMFILE Zu viele Dateien bereits offen
Siehe auch chmod
chsize
close
creatnew
creattemp
dup
dup2
_fmode (globale Variable)
fopen
open
_rtl_creat
sopen
write
DDCHelp Hilfe zur Programmiersprache C Seite 175 von 606
creatnew
Syntax #include <io.h>
int creatnew(const char *path, int mode);
Beschreibung
Erzeugt eine neue Datei.
creatnew arbeitet wie _rtl_creat - mit einer Ausnahme: Wenn die angegebene Datei bereits existiert, wird mit einer Fehlermeldung abgebrochen; die Datei bleibt dabei unverändert.
Der Parameter mode kann gleich Null oder eine ODER-Kombination der folgenden Konstanten sein, die in dos.h definiert sind:
FA_HIDDEN Verborgene Datei
FA_RDONLY Nur-Lesen-Attribut
FA_SYSTEM Systemdatei
Rückgabewert
Wenn die angegebene Datei fehlerfrei geöffnet werden konnte, liefert creatnew das neue Datei-Handle (einen positiven Integerwert) zurück. Im Fehlerfall wird -1 zurückgeliefert und die globale Variable errno erhält einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
EEXIST Datei existiert bereits
EMFILE Zu viele Dateien bereits offen
ENOENT Pfad/Datei nicht gefunden
Siehe auch close
creat
creattemp
_dos_creatnew
dup
_fmode (globale Variable)
open
_rtl_creat
creattemp
Syntax #include <io.h>
int creattemp(char *path, int attrib);
Beschreibung
Erzeugt eine neue Datei im angegebenen Verzeichnis, wobei die Namensvergabe automatisch erfolgt.
Mit creattemp erzeugte Dateien werden grundsätzlich in dem durch die globale Variable _fmode gesetzten Modus (O_TEXT oder O_BINARY) erzeugt.
Denken Sie daran, dass ein umgekehrter Schrägstrich als '\\' im Argument path erscheinen muss.
DDCHelp Hilfe zur Programmiersprache C Seite 176 von 606
Das als path übergebene Argument bezeichnet ein Verzeichnis, endet mit einem umgekehrten Schrägstrich und sollte lang genug für den resultierenden Dateinamen sein. Achtung: Durch creattemp erzeugte Dateien werden nach dem Ablauf des Programms nicht automatisch gelöscht!
creattemp durchsucht das angegebene Verzeichnis und erzeugt eine Datei, deren Name innerhalb dieses Verzeichnisses eindeutig ist; path wird danach auf den Namen dieser Datei gesetzt.
Der Funktion creattemp kann mit attrib ein Wort mit DOS-Dateiattributen übergeben werden. Nach einer fehlerfreien Erzeugung zeigt der Dateizeiger auf den Anfang der Datei. Die Datei wird für Lese- und Schreibzugriffe geöffnet.
Der Parameter attrib kann gleich Null oder eine ODER-Kombination der folgenden Konstanten sein, die in dos.h definiert sind:
FA_HIDDEN Verborgene Datei
FA_RDONLY Nur-Lesen-Attribut
FA_SYSTEM Systemdatei
Rückgabewert
Wenn die angegebene Datei fehlerfrei erstellt werden konnte, liefert creattemp das neue Datei-Handle (einen positiven Integerwert) zurück.
Im Fehlerfall wird -1 zurückgeliefert und die globale Variable errno enthält einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
EMFILE Zu viele Dateien bereits offen
Siehe auch close
creat
creatnew
dup
_fmode (globale Variable)
open
_rtl_creat
_crotl, _crotr
Syntax #include <stdlib.h>
unsigned char _crotl(unsigned char val, int count);
unsigned char _crotr(unsigned char val, int count);
Beschreibung
Rotiert einen unsigned char-Wert nach links oder rechts.
Die Funktionen _crotl und _crotr rotieren den übergebenen Wert val um count Bits nach links bzw. rechts.
Das Argument val ist ein unsigned char-Wert, oder seine dezimale oder hexadezimale Entsprechung.
Rückgabewert
Die Funktion liefert den rotierten Wert zurück:
_crotl liefert den um count Bits nach links rotierten Wert von val zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 177 von 606
_crotl liefert den um count Bits nach rechts rotierten Wert von val zurück.
Siehe auch _lrotl
_lrotr
_rotl
_rotr
cscanf
Syntax #include <conio.h>
int cscanf(char *format[, address, ...]);
Beschreibung
Liest und formatiert Eingaben von der Tastatur.
cscanf liest mehrere Eingabefelder zeichenweise direkt von der Tastatur ein. Jedes Feld wird dabei entsprechend einer Formatierungsanweisung formatiert, der cscanf im Formatstring format übergeben wird. Die formatierten Eingaben werden an Adressen, die nach dem Parameter format angegeben werden, gespeichert und direkt auf dem Bildschirm ausgegeben. Die Anzahl der übergebenen Adressen und der Formatierungsanweisungen muss übereinstimmen.
Hinweis: Details zu Formatierungsanweisungen finden Sie unter scanf Formatierungsanweisungen.
cscanf kann das Lesen eines bestimmten Eingabefeldes abbrechen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist. cscanf kann auch aus verschiedenen Gründen den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür werden unter scanf erläutert.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
cscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück. Gelesene, aber nicht gespeicherte Felder werden nicht mitgezählt. Wurden überhaupt keine Eingabefelder gespeichert, so wird der Wert 0 zurückgegeben.
Der Versuch, über das Ende einer Datei hinauszulesen, liefert den Wert EOF.
Siehe auch fscanf
getche
scanf
sscanf
ctime
Syntax #include <time.h>
char *ctime(const time_t *time);
DDCHelp Hilfe zur Programmiersprache C Seite 178 von 606
Beschreibung
Konvertiert Datum und Uhrzeit in einen String.
ctime erwartet einen Zeiger auf Datum und Uhrzeit des Systems (das ist der Wert, der von der Funktion time geliefert wird). Das Ergebnis von ctime ist ein String mit 26 Zeichen, der mit einem Zeilenvorschub und einem Nullzeichen abgeschlossen ist:
Sat Jul 03 11:31:54 1993\n\0
Alle Felder dieses Strings haben eine konstante Länge.
Die globale long-Variable _timezone enthält den Unterschied zwischen der lokalen Zeit und der Greenwich Mean Time (GMT) in Sekunden (für MEZ ist _timezone -1*60*60). Die globale Variable _daylight darf nur dann auf einen Wert ungleich Null gesetzt werden, wenn die Standardkonvertierung der USA für Sommer- und Winterzeit angewendet werden soll. Diese Variablen werden nicht vom einem Benutzerprogramm direkt, sondern von der Funktion tzset gesetzt
Rückgabewert
ctime liefert einen Zeiger auf einen statischen String zurück, der Datum und Uhrzeit enthält und mit jedem Aufruf dieser Funktion erneut gesetzt wird.
Siehe auch asctime
_daylight (globale Variable)
difftime
ftime
getdate
gmtime
localtime
settime
time
_timezone (globale Variable)
tzset
ctrlbrk
Syntax #include <dos.h>
void ctrlbrk(int (*handler)(void));
Beschreibung
Setzt die Behandlungsroutine für [Strg][Untbr].
ctrlbrk definiert die Funktion, auf die handler zeigt, als neue Behandlungsroutine von [Strg][Untbr]. Der Interrupt-Vektor 0x23 wird so modifiziert, dass er die angegebene Funktion aufruft. ctrlbrk richtet einen neuen DOS-Interrupt-Handler ein, der die angegebene Funktion aufruft; diese Funktion wird nur indirekt aufgerufen.
Über ctrlbrk gesetzte C-Routinen können beliebige Schritte und Systemaufrufe enthalten; anstelle eines Rücksprungs ist auch die Verzweigung zu anderen Programmteilen (mit longjmp) möglich. Die durch [Strg][Untbr] aufgerufene Routine kann entweder 0 (Abbruch des Programms) oder einen Wert ungleich 0 (Fortsetzung des Programms) zurückliefern.
Rückgabewert
Keiner.
DDCHelp Hilfe zur Programmiersprache C Seite 179 von 606
Siehe auch getcbrk
signal
cwait
Syntax #include <process.h>
int cwait(int *statloc, int pid, int action);
Beschreibung
Wartet auf das Ende eines Kindprozesses.
Die Funktion cwait wartet auf das Ende eines Kindprozesses mit der Prozess-ID pid. An der Adresse statloc wird (sofern nicht NULL) der Status des beendeten Prozesses gespeichert. Über den Parameter action wird festgelegt, ob nur auf das Ende des angegebenen Prozesses oder auch auf das seiner Kinder gewartet wird.
Wird der Kindprozess normal beendet (durch Aufruf von exit oder Rücksprung aus main), so wird das Statuswort wie folgt definiert:
Bit 0-7 Null
Bit 8-15 Das niederwertige Byte des Rückgabewertes des Kindprozesses. Das ist der durch exit oder den Rücksprung aus main erhaltene Wert. Wird der Kindprozess durch einfachen Rücksprung aus main (ohne Wert) verlassen, so ist der Inhalt dieser Bits unbestimmt.
Wird der Kindprozess nicht normal beendet, dann ist das Statuswort wie folgt definiert:
Bits 0-7 Information über die Beendigung des Kindprozesses
1 Abbruch durch kritischen Fehler
2 Ausführungsfehler, Schutzverletzung
3 Externes Signal
Bits 8-15 Null
Ist pid gleich Null, so wartet cwait auf das Ende aller Kindprozesse. Andernfalls enthält pid die Prozess-ID des Kindes, auf das gewartet wird. Diesen Wert muss man durch einen vorherigen Aufruf einer asynchronen spawn-Funktion ermittelt haben.
Gültige Wert für action sind WAIT_CHILD (nur auf den angegebenen Kindprozess warten) und WAIT_GRANDCHILD (auf den angegebenen Kindprozess und alle seine Kinder warten). Beide Werte sind in der Header-Datei process.h. definiert.
Rückgabewert
Bei einer normalen Beendigung des Kindprozesses liefert cwait die Prozess-ID des Kindes zurück.
Bei einer anormalen Beendigung des Kindprozesses liefert die Funktion -1 an den Vaterprozess zurück und setzt errno auf EINTR (anomales Ende des Kindprozesses).
Wenn cwait zurückkehrt, ohne dass ein Kindprozess beendet wurde, so liefert die Funktion -1 zurück und setzt errno auf einen der folgenden Werte:
ECHILD Kein Kind vorhanden oder pid ungültig
EINVAL Wert für action ist ungültig
Siehe auch spawnl
wait
DDCHelp Hilfe zur Programmiersprache C Seite 180 von 606
delline
Syntax #include <conio.h>
void delline(void);
Beschreibung
Entfernt eine Zeile im Textfenster.
delline löscht die Zeile, in der sich der Cursor befindet, und verschiebt danach alle Zeilen unter der gelöschten um eine Position nach oben. delline arbeitet im aktuell aktiven Textfenster.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter WIN32s oder WIN32 nicht verwendet werden.
Rückgabewert
Keiner.
Siehe auch clreol
clrscr
insline
window
difftime
Syntax #include <time.h>
double difftime(time_t time2, time_t time1);
Beschreibung
Berechnet die Differenz zwischen zwei Zeitangaben.
difftime berechnet die zwischen time1 und time2 liegende Zeit in Sekunden.
Rückgabewert
difftime liefert die Differenz zweier Zeiten als double-Wert zurück.
Siehe auch asctime
ctime
_daylight (globale Variable)
gmtime
localtime
time
_timezone (globale Variable)
disable, _disable, enable, _enable
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 181 von 606
#include <dos.h>
void disable(void);
void _disable(void);
void enable(void);
void _enable(void);
Beschreibung
Deaktiviert und aktiviert Hardware-Interrupts.
Diese Makros stellen dem Programmierer eine flexible Steuerung der Hardware-Interrupts zur Verfügung.
Die Makros disable und _disable deaktivieren alle Hardware-Interrupts. Lediglich NMIs (nicht maskierbare Interrupts) von Peripheriegeräten werden noch bearbeitet.
Die Makros enable und _enable aktivieren alle Hardware-Interrupts.
Rückgabewert
Keiner.
Siehe auch getvect
Beispiel disable
_disable
enable
_enable
div
Syntax #include <stdlib.h>
div_t div(int numer, int denom);
Beschreibung
Dividiert zwei ganzzahlige Werte und liefert den Quotienten und den Divisionsrest zurück.
div dividiert die als numer (Dividend) und denom (Divisor) übergebenen Integerwerte und liefert Quotienten und Divisionsrest in einer Struktur des Typs div_t zurück. Dieser Datentyp ist in stdlib.h folgendermaßen definiert:
typedef struct {
int quot; /* Quotient (Divisionsergebnis) */
int rem; /* Divisionsrest */
} div_t;
Rückgabewert
div liefert eine Struktur mit den Elementen quot (Quotient) und rem (Divisionsrest) zurück.
Siehe auch ldiv
DDCHelp Hilfe zur Programmiersprache C Seite 182 von 606
_dos_close
Syntax #include <dos.h>
unsigned _dos_close(int handle);
Beschreibung
Schließt eine Datei.
_dos_close schließt die durch handle bezeichnete Datei. handle ist ein Datei-Handle, das durch einen Aufruf von _dos_creat, _dos_creatnew oder _dos_open einer Datei zugeordnet wurde.
Rückgabewert
_dos_close liefert den Wert 0 zurück, wenn die Operation fehlerfrei ausgeführt werden konnte. Andernfalls liefert die Funktion den Fehlercode des Betriebssystems, und die globale Variable errno erhält den Wert:
EBADF Ungültiges Handle
Siehe auch _dos_creat
_dos_open
_dos_read
_dos_write
_dos_commit
Syntax #include <dos.h>
unsigned _dos_commit(int handle);
Beschreibung
Schreibt gepufferte Ausgaben einer Datei auf die Diskette/Festplatte.
_dos_commit veranlasst DOS, alle zu einem Datei-Handle gehörenden gepufferten Ausgaben physikalisch auf die Diskette/Festplatte zu schreiben.
Rückgabewert
_dos_commit liefert bei erfolgreicher Beendigung den Wert 0 zurück. Im Fehlerfall wird der DOS-Fehlercode zurückgeliefert und die globale Variable errno wird auf EBADF gesetzt.
Siehe auch _dos_creat
_dos_write
_rtl_close
_rtl_creat
_dos_creat
Syntax #include <dos.h>
unsigned _dos_creat(const char *path, int attrib, int *handlep);
DDCHelp Hilfe zur Programmiersprache C Seite 183 von 606
Beschreibung
Erzeugt eine neue Datei oder überschreibt eine bereits vorhandene Datei.
Die Funktion _dos_creat öffnet die durch path bezeichnete Datei grundsätzlich im binären Modus. Nach einer fehlerfreien Öffnung bzw. Erzeugung zeigt der Dateizeiger auf das erste Byte der Datei. _dos_creat speichert das Datei-Handle an der durch handlep bezeichneten Position. Die Datei wird für Lese- und Schreibzugriffe geöffnet.
Wenn die Datei bereits existiert, wird sie auf null Bytes Länge verkürzt (d.h. der vorherige Inhalt wird gelöscht).
Der Parameter attrib der Funktion _dos_creat enthält eine ODER-Kombination aus einer oder mehreren der folgenden in dos.h definierten Konstanten:
_A_NORMAL Normale Datei
_A_RDONLY Nur-Lesen-Datei
_A_HIDDEN Verborgene Datei
_A_SYSTEM Systemdatei
Rückgabewert
_dos_creat liefert bei fehlerfreier Ausführung 0, andernfalls wird der Fehlercode des Betriebssystems zurückgeliefert.
Im Fehlerfall wird die globale Variable errno auf einen der folgenden Werte gesetzt (dies gilt für creat und _dos_creat):
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
EMFILE Zu viele offene Dateien
Siehe auch chsize
close
creat
creatnew
creattemp
_rtl_chmod
_rtl_close
_dos_creatnew
Syntax #include <dos.h>
unsigned _dos_creatnew(const char *path, int attrib, int *handlep);
Beschreibung
Erzeugt eine neue Datei.
_dos_creatnew erzeugt und öffnet die durch path bezeichnete Datei im binären Modus. Die Datei erhält die Zugriffsberechtigung attrib (ein Attributwort des Betriebssystems). Nach einer fehlerfreien Erzeugung wird das Datei-Handle an der durch handlep bezeichneten Adresse gespeichert und der Dateizeiger zeigt auf den Anfang der Datei. Die Datei wird für Lese- und Schreibzugriffe geöffnet.
Existiert die Datei bereits, so liefert _dos_creatnew einen Fehler zurück und die Datei bleibt unverändert.
DDCHelp Hilfe zur Programmiersprache C Seite 184 von 606
Der Parameter attrib enthält eine ODER-Kombination aus einer oder mehreren der folgenden in dos.h definierten Konstanten:
_A_NORMAL Normale Datei
_A_RDONLY Nur-Lesen-Datei
_A_HIDDEN Verborgene Datei
_A_SYSTEM Systemdatei
Rückgabewert
Wenn die angegebene Datei fehlerfrei geöffnet werden konnte, liefert _dos_creatnew 0 zurück. Andernfalls wird der Fehlercode des Betriebssystems zurückgeliefert und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht erlaubt
EEXIST Datei existiert bereits
ENOENT Pfad/Datei nicht gefunden
EMFILE Zu viele Dateien bereits offen
Siehe auch creatnew
_dos_close
_dos_creat
_dos_getfileattr
_dos_setfileattr
dosexterr
Syntax #include <dos.h>
int dosexterr(struct DOSERROR *eblkp);
Beschreibung
Liefert einen erweiterten Fehlercode von DOS zurück.
dosexterr speichert in der Struktur DOSERROR nach einer fehlerhaften DOS-Operation zusätzliche Informationen. Die Struktur ist folgendermaßen definiert:
struct DOSERROR {
int de_exterror; /* erweiterter Fehlercode */
char de_class; /* Fehlerklasse */
char de_action; /* Aktion */
char de_locus; /* Fehlerstelle */
};
Die in dieser Struktur gespeicherten Werte werden durch den DOS-Funktion 0x59 ermittelt. Ein Wert von 0 für de_exterror zeigt an, dass die zuletzt ausgeführte DOS-Operation fehlerfrei verlaufen ist.
Rückgabewert
dosexterr liefert den Wert von de_exterror zurück.
_dos_findfirst
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 185 von 606
#include <dos.h>
unsigned _dos_findfirst(const char *pathname, int attrib,
struct find_t *ffblk);
Beschreibung
Durchsucht ein Dateiverzeichnis.
_dos_findfirst startet die Suche nach einer Datei in einem Verzeichnis.
Der Parameter pathname ist ein String und bezeichnet den zu suchenden Eintrag. Er kann optional eine Laufwerksbezeichnung und/oder einen Pfad enthalten, Jokerzeichen (* und ?) sind erlaubt. Falls eine Datei gefunden wird, werden in der über ffblk angegebenen Struktur find_t die im Verzeichnis enthaltenen Dateiinformationen gespeichert.
Die Struktur find_t ist folgendermaßen definiert:
struct find_t {
char reserved[21]; /* von Betriebssystem verwendet */
char attrib; /* Attribut */
int wr_time; /* Zeit der letzten Änderung */
int wr_date; /* Datum der letzten Änderung */
long size; /* Dateigröße in Bytes */
char name[13]; /* Name der gefundenen Datei */
};
Der Parameter attrib enthält das Datei-Attributwort des Betriebssystems und wird dazu verwendet, bestimmte Dateien bei der Suche auszuwählen. attrib enthält eine ODER-Kombination aus einer oder mehreren der folgenden in dos.h definierten Konstanten:
_A_NORMAL Normale Datei
_A_RDONLY Nur-Lesen-Attribut
_A_HIDDEN Verborgene Datei
_A_SYSTEM Systemdatei
_A_VOLID Name des Datenträgers
_A_SUBDIR Verzeichnis
_A_ARCH Archiv-Bit
Ausführliche Informationen über diese Attribute finden Sie in den Handbüchern Ihres Betriebssystems.
Beachten Sie, dass wr_time und wr_date Bitfelder für den Zeit- bzw. Datumseintrag der Datei enthalten. Die Struktur dieser Bitfelder ist durch das Betriebssystem vorgegeben.
wr_time:
Bits 0 bis 4 Sekunden geteilt durch 2 (d.h. 10 bedeutet hier 20 Sekunden)
Bits 5 bis 10 Minuten
Bits 11 bis 15 Stunden
wr_date:
Bits 0 bis 4 Tag
Bits 5 bis 8 Monat
Bits 9 bzw. 15 Jahre seit 1980 (d.h. 9 bedeutet hier 1989)
Rückgabewert
_dos_findfirst liefert den Wert 0 zurück, wenn ein zu pathname passender Eintrag gefunden wurde. Wenn kein Eintrag gefunden wird oder der angegebene Dateiname aus irgendeinem Grund ungültig ist, wird der Fehlercode des Betriebssystems als Ergebnis geliefert und errno erhält den Wert:
ENOENT Pfad/Datei nicht gefunden
DDCHelp Hilfe zur Programmiersprache C Seite 186 von 606
Siehe auch _dos_findnext
_dos_findnext
Syntax #include <dos.h>
unsigned _dos_findnext(struct find_t *ffblk);
Beschreibung
Setzt eine _dos_findfirst-Suche fort.
Mit _dos_findnext kann ein Verzeichnis nach weiteren Einträgen abgesucht werden, die zum Parameter pathname einer vorangegangenen __dosfindfirst-Suche passen. ffblk zeigt auf die gleiche Struktur wie bei _dos_findfirst und enthält die notwendigen Informationen zur Fortsetzung der Suche. _dos_findnext liefert bei jedem Aufruf einen weiteren Dateieintrag zurück - solange, bis das Verzeichnis keine weiteren Einträge mehr enthält, die dem Parameter pathname von _dos_findfirst entsprechen.
Rückgabewert
_dos_findnext liefert den Wert 0 zurück, wenn ein weiterer, zu pathname passender Eintrag gefunden wurde. Sind keine weiteren Einträge vorhanden, oder ist der angegebene Dateiname aus irgendeinem Grund ungültig, so wird der Fehlercode des Betriebssystems zurückgeliefert und errno erhält den Wert:
ENOENT Datei/Pfad nicht gefunden
Siehe auch _dos_findfirst
_dos_getdate, _dos_setdate, getdate, setdate
Syntax #include <dos.h>
void _dos_getdate(struct dosdate_t *datep);
unsigned _dos_setdate(struct dosdate_t *datep);
void getdate(struct date *datep);
void setdate(struct date *datep);
Beschreibung
Ermittelt oder setzt das Systemdatum.
getdate füllt die durch datep angegebene date-Struktur mit dem aktuellen Systemdatum.
setdate setzt das Systemdatum (Monat, Tag und Jahr) auf durch datep angegebenen Einträge einer date-Struktur.
Die Struktur date ist folgendermaßen definiert:
struct date {
int da_year; /* aktuelles Jahr */
char da_day; /* Tag des Monats */
char da_mon; /* Monat (1 = Januar) */
}
_dos_getdate füllt durch datep angegebene dosdate_t-Struktur mit dem aktuellen Systemdatum.
Die Struktur dosdate_t ist folgendermaßen definiert:
DDCHelp Hilfe zur Programmiersprache C Seite 187 von 606
struct dosdate_t {
unsigned char day; /* 1 - 31 */
unsigned char month; /* 1 - 12 */
unsigned int year; /* 1980 - 2099 */
unsigned char dayofweek; /* 0 - 6 (0 = Sonntag) */
}
Rückgabewert
_dos_getdate, getdate und setdate liefern keinen Wert zurück.
_dos_setdate liefert 0 zurück, wenn das Datum erfolgreich gesetzt werden konnte. Andernfalls wird ein Wert ungleich Null zurückgeliefert und die globale Variable errno erhält den Wert:
EINVAL Ungültiges Datum
Siehe auch ctime
gettime
settime
Beispiel getdate
_dos_getdate
_dos_setdate
setdate
_dos_getdiskfree
Syntax #include <dos.h>
unsigned _dos_getdiskfree(unsigned char drive, struct diskfree_t
*dtable);
Beschreibung
Ermittelt den freien Platz auf einer Diskette/Festplatte.
_dos_getdiskfree ermittelt Informationen über den freien Platz auf dem durch drive angegebenen Laufwerk und speichert sie in der durch dtable bezeichneten Struktur des Typs diskfree_t. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk angesprochen, ansonsten gilt A = 1, B = 2 usw.
Die Struktur diskfree_t ist folgendermaßen definiert:
struct diskfree_t {
unsigned avail_clusters; /* freie Cluster */
unsigned total_clusters; /*Gesamtzahl Cluster */
unsigned bytes_per_sector; /* Bytes pro Sektor */
unsigned sectors_per_cluster; /* Sektoren pro Cluster */
};
Rückgabewert
_dos_getdiskfree liefert bei fehlerfreier Ausführung 0 zurück. Andernfalls wird ein Wert ungleich Null zurückgeliefert und errno erhält den Wert:
EINVAL Ungültiges Laufwerk
Siehe auch
DDCHelp Hilfe zur Programmiersprache C Seite 188 von 606
getfat
getfatd
_dos_getdrive, _dos_setdrive
Syntax #include <dos.h>
void _dos_getdrive(unsigned *drivep);
void _dos_setdrive(unsigned drivep, unsigned *ndrives);
Beschreibung
Liest bzw. ändert die aktuelle Laufwerksnummer.
_dos_getdrive ermittelt die aktuelle Laufwerksnummer.
_dos_setdrive setzt die aktuelle Laufwerksnummer und speichert die Gesamtzahl der Laufwerke an der Adresse, auf die ndrives zeigt.
Für die Laufwerksnummern in der durch drivep angegebenen Adresse gilt: 1 = A, 2 = B, 3 = C, usw.
_dos_setdrive ändert das aktuelle Laufwerk des Elternprozesses.
Rückgabewert
Keiner. Mit _dos_getdrive können Sie feststellen, ob das aktuelle Laufwerk erfolgreich geändert wurde.
Siehe auch getcwd
Beispiel _dos_getdrive
_dos_setdrive
_dos_getfileattr, _dos_setfileattr
Syntax #include <dos.h>
int _dos_getfileattr(const char *path, unsigned *attribp);
int _dos_setfileattr(const char *path, unsigned attrib);
Beschreibung
Ändert den Zugriffsmodus einer Datei.
_dos_getfileattr liest die Dateiattribute der durch path angegebenen Datei. Die Attribute werden an der durch attribp angegebenen Adresse gespeichert.
_dos_setfileattr setzt die Zugriffsberechtigung der durch path angegebenen Datei auf den Wert von attrib. Die Dateiattribute bestehen aus einer ODER-Kombination der folgenden in dos.h definierten symbolischen Konstanten:
_A_RDONLY Nur-Lesen-Attribut
_A_HIDDEN Verborgene Datei
_A_SYSTEM Systemdatei
DDCHelp Hilfe zur Programmiersprache C Seite 189 von 606
_A_VOLID Datenträgername
_A_SUBDIR Verzeichnis
_A_ARCH Archiv-Bit
_A_NORMAL Normale Datei (keine Attribut-Bits gesetzt)
Rückgabewert
Bei fehlerfreier Ausführung liefern _dos_getfileattr und _dos_setfileattr als Ergebnis 0. Andernfalls wird der Fehlercode des Betriebssystems zurückgeliefert und die globale Variable errno erhält den Wert:
ENOENT Pfad/Datei nicht gefunden
Siehe auch chmod
stat
Beispiel _dos_getfileattr
_dos_setfileattr
_dos_getftime, _dos_setftime
Syntax #include <dos.h>
unsigned _dos_getftime(int handle, unsigned *datep, unsigned *timep);
unsigned _dos_setftime(int handle, unsigned date, unsigned time);
Beschreibung
Liest bzw. setzt Datum und Uhrzeit einer Datei.
_dos_getftime liest die Uhrzeit und das Datum der durch handle angegebenen Datei. Diese Datei muss vorher mit _dos_open ,_dos_creat oder _dos_creatnew geöffnet worden sein. _dos_getftime speichert das Datum und die Zeit an den durch datep und timep angegebenen Adressen.
_dos_setftime setzt Datum und Uhrzeit der Datei auf die neuen, in den Parametern time und date angegebenen Werte.
Beachten Sie, dass die Datums- und Uhrzeitwerte Bitfelder für die Uhrzeit und das Datum der Datei enthalten. Die Struktur dieser Bitfelder ist durch das Betriebssystem vorgegeben.
Datum:
Bits 0 bis 4 Tag
Bits 5 bis 8 Monat
Bits 9 bis 15 Jahre seit 1980 (d.h. 9 bedeutet hier 1989)
Uhrzeit:
Bits 0 bis 4 Resultierende Sekunden geteilt durch 2 (d.h. 10 bedeutet hier 20 Sekunden)
Bits 5 bis 10 Minuten
Bits 11 bis 15 Stunden
Rückgabewert
_dos_getftime und _dos_setftime liefern bei fehlerfreier Ausführung 0 zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 190 von 606
Im Fehlerfall wird der Fehlercode des Betriebssystems zurückgeliefert und die globale Variable errno erhält einen der folgenden Werte:
EACCES Zugriff verweigert
EBADF Ungültiges Handle
Siehe auch fstat
stat
Beispiel _dos_getftime
_dos_setftime
_dos_gettime, _dos_settime
Syntax #include <dos.h>
void _dos_gettime(struct dostime_t *timep);
unsigned _dos_settime(struct dostime_t *timep);
Beschreibung
Liest und setzt die Systemzeit.
_dos_gettime speichert die aktuelle Systemzeit in der über timep angegebenen Struktur des Typs dostime_t.
_dos_settime setzt die Systemzeit auf die Werte in der Struktur des Typs dostime_t, auf die timep zeigt.
Der Strukturtyp dostime_t ist folgendermaßen definiert:
struct dostime_t {
unsigned char hour; /* Stunden (0 bis 23) */
unsigned char minute; /* Minuten (0 bis 59) */
unsigned char second; /* Sekunden (0 bis 59) */
unsigned char hsecond; /* Hundertstel Sekunden (0 bis 99 */
};
Rückgabewert
_dos_gettime hat keinen Rückgabewert.
Bei fehlerfreier Ausführung liefert _dos_settime als Ergebnis 0. Andernfalls wird der Fehlercode des Betriebssystems zurückgeliefert und die globale Variable errno erhält den Wert:
EINVAL Ungültige Uhrzeit
Siehe auch _dos_getdate
_dos_setdate
_dos_settime
stime
time
DDCHelp Hilfe zur Programmiersprache C Seite 191 von 606
Beispiel dos_gettime
_dos_settime
_dos_getvect
Syntax #include <dos.h>
void interrupt(*_dos_getvect(unsigned interruptno)) ();
Beschreibung
Liest einen Interrupt-Vektor.
Die Prozessoren der 8086-Familie reservieren eine Reihe von Interrupt-Vektoren, die von 0 bis 255 durchnumeriert sind. Der vier Byte lange Wert jedes Vektors ist die Adresse einer Interrupt-Funktion.
_dos_getvect liefert den Wert des Vektors interruptno als far-Zeiger auf eine Funktion des Typs interrupt zurück. Der Wert von interruptno muss zwischen 0 und 255 liegen.
Rückgabewert
_dos_getvect liefert den aktuellen vier Byte langen Wert zurück, der im Interrupt-Vektor interruptno gespeichert ist.
Siehe auch _disable
_enable
_dos_setvect
_dos_open
Syntax #include <fcntl.h>
#include <share.h>
#include <dos.h>
unsigned _dos_open(const char *filename, unsigned oflags, int *handlep);
Beschreibung
Öffnet eine Datei für Lese- oder Schreiboperationen.
_dos_open öffnet die durch filename angegebene Datei entsprechend des Parameters oflags für Lese- und/oder Schreibzugriffe. Die Datei wird stets im Binärmodus geöffnet. _dos_open speichert das Datei-Handle an der von handlep angegebenen Adresse.
oflags verwendet die Flags der folgenden beiden Listen. Aus der ersten Liste darf (und muss) genau ein Flag verwendet werden. Die übrigen Flags können in jeder logischen Kombination benutzt werden.
Liste 1: Lese-/Schreib Flags
O_RDONLY Nur Lesen.
O_WRONLY Nur Schreiben.
O_RDWR Lesen und Schreiben.
DDCHelp Hilfe zur Programmiersprache C Seite 192 von 606
Die folgenden zusätzlichen Werte können mit eine ODER-Operation mit in oflags aufgenommen werden:
Liste 2: Weitere Zugriffs-Flags
O_NOINHERIT Datei wird nicht an Kindprozesse vererbt.
SH_COMPAT Ermöglicht weitere Zugriffe auf diese Datei mit SH_COMPAT. Wurde die Datei bereits in einem gemeinsamen Zugriffsmodus geöffnet, ergibt der Aufruf einen Fehler.
SH_DENYRW Ermöglicht den Zugriff auf die Datei nur über das aktuelle Handle.
SH_DENWR Über andere Handels kann diese Datei nur gelesen, aber nicht beschrieben werden..
SH_DENYRD Über andere Handles kann diese Datei nur beschrieben werden.
SH_DENYNO Sämtliche Zugriffe auf diese Datei sind erlaubt, jedoch nicht solche mit SH_COMPAT.
Hinweis: Diese symbolischen Konstanten sind in fcntl.h und share.h. definiert.
In einem Aufruf von _dos_open kann jeweils nur eine der SH_DENYxx-Konstanten angegeben werden. Diese Zugriffsattribute sind zusätzlich zu bestehenden Dateisperrungen gültig.
Die maximal mögliche Anzahl offener Dateien wird durch HANDLE_MAX definiert.
Rückgabewert
_dos_open liefert bei fehlerfreier Ausführung 0 zurück und speichert das Datei-Handle an der durch handlep angegebenen Adresse. Der Dateizeiger - er markiert die aktuelle Position in der Datei - wird auf den Dateianfang gesetzt.
Im Fehlerfall liefert _dos_open den DOS-Fehlercode zurück. die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht gestattet
EINVACC Ungültiger Zugriffscode
EMFILE Zu viele Dateien offen
ENOENT Pfad oder Datei nicht gefunden
Siehe auch open
_rtl_read
sopen
_dos_read
Syntax #include <dos.h>
unsigned _dos_read(int handle, void *buf, unsigned len, unsigned *nread);
Beschreibung
Liest Daten aus einer Datei.
_dos_read liest len Bytes aus der mit handle bezeichneten Datei in den durch den Zeiger buf angegebenen Speicherbereich. Die Anzahl der gelesenen Bytes wird an der Adresse gespeichert, auf die nread zeigt. Im Fehlerfall oder beim Erreichen des Dateiendes kann diese Zahl kleiner als len sein.
Die Funktion _dos_read entfernt keine Wagenrücklaufzeichen (CR), da sie ausschließlich mit
DDCHelp Hilfe zur Programmiersprache C Seite 193 von 606
binären Dateien arbeitet.
Der Parameter handle ist das über den Aufruf von _dos_creat, dos_creatnew oder _dos_open erhaltene Datei-Handle.
Für _read ist handle das über den Aufruf von creat, open, dup oder dup2 erhaltene Datei-Handle.
Bei Diskettendateien beginnt der Lesevorgang ab der aktuellen Position des Dateizeigers. Nach der Beendigung des Lesevorgangs wird der Dateizeiger um die Anzahl der gelesenen Bytes erhöht. Bei Gerätedateien ist eine Position nicht definiert - hier liest _dos_read direkt vom entsprechenden Gerät.
_dos_read kann maximal UINT_MAX -1 Bytes lesen, da UINT_MAX selbst dem Wert -1 und damit dem Fehlerindikator entspricht. Die Konstante UINT_MAX ist in limits.h. definiert.
Rückgabewert
Bei fehlerfreier Ausführung liefert _dos_read den Wert 0 zurück. Andernfalls liefert die Funktion den DOS-Fehlercode zurück und setzt die globale Variable errno zurück.
Bei erfolgreicher Ausführung liefert _read eine positive Ganzzahl zurück. Sie zeigt die Zahl der in den Puffer abgelegten Bytes an. Bei end-of-file gibt _read den Wert Null zurück. Im Fehlerfalle liefert _read den Wert -1 zurück und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht gestattet denied
EBADF Ungültiges Handle
Siehe auch open
read
_rtl_write
_dos_setvect
Syntax #include <dos.h>
void _dos_setvect(unsigned interruptno, void interrupt (*isr) ());
Beschreibung
Setzt den Eintrag eines Interrupt-Vektors.
Die Prozessoren der 8086-Familie reservieren eine Reihe von Interrupt-Vektoren, die von 0 bis 255 durchnumeriert sind. Der vier Byte lange Wert jedes Vektors ist die Adresse einer Interrupt-Funktion.
_dos_setvect setzt den Interrupt-Vektor Nummer interruptno so, dass er auf die C-Funktion zeigt, die durch den far-Zeiger isr (interrupt service routine) angegeben wird. Diese C-Funktion muss als Interrupt-Routine deklariert worden sein.
Solange die in dos.h deklarierten Prototypen verwendet werden, ist _dos_setvect ohne weitere Modifikationen in jedem Speichermodell anwendbar.
Rückgabewert
Keiner.
Siehe auch _dos_getvect
DDCHelp Hilfe zur Programmiersprache C Seite 194 von 606
dostounix
Syntax #include <dos.h>
long dostounix(struct date *d, struct time *t);
Beschreibung
Konvertiert Datum und Uhrzeit in das UNIX-Format.
dostounix erwartet einen Zeiger auf eine Struktur des Typs date (die beispielsweise von getdate zurückgegeben wird) sowie einen Zeiger auf eine Struktur des Typs time (wie sie gettime liefert) und konvertiert beide Strukturen in das Unix-Datumsformat. Die Strukturen date und time müssen Datum und Uhrzeit im DOS-Format enthalten.
Die Datums- und die Zeitangabe dürfen nicht älter sein als der 1. Januar 1980, 00:00:00 Uhr.
Rückgabewert
dostounix liefert Datum und Uhrzeit im UNIX-Format zurück: die Zahl der Sekunden seit dem 1. Januar 1970, 00:00:00 Uhr (GMT - Greenwich Mean Time).
Siehe auch getdate
gettime
unixtodos
_dos_write
Syntax #include <dos.h>
unsigned _dos_write(int handle, const void far *buf, unsigned len,
unsigned *nwritten);
unsigned _dos_write(int handle, const void *buf, unsigned len, unsigned
*nwritten);
Beschreibung
Schreibt Daten in eine Datei.
_dos_write liest mit Hilfe der DOS-Funktion 0x40 len Bytes aus dem Puffer, auf den der far-Zeiger buf zeigt, und schreibt sie in die durch handle bezeichnete Datei. Da die Funktion _dos_write nur mit binären Dateien arbeitet, übersetzt sie Zeilenvorschubzeichen (LF) nicht in CR/LF (Wagenrücklauf/Zeilenvorschub).
_dos_write speichert die Anzahl der geschriebenen Bytes an der durch nwritten bezeichneten Adresse. Werden weniger als len Bytes geschrieben, sollte dies als Fehler interpretiert werden und deutet normalerweise auf eine volle Diskette/Festplatte hin. Bei Dateien auf Diskette/Festplatte schreibt _dos_write ab der aktuellen Positionen des Dateizeigers, bei Gerätedateien werden die Bytes direkt an das jeweilige Gerät gesendet.
Rückgabewert
_dos_write liefert bei fehlerfreier Ausführung das Ergebnis 0. Andernfalls wird der Fehlercode des Betriebssystems zurückgeliefert und die globale Variable errno erhält den einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
EBADF Ungültiges Handle
DDCHelp Hilfe zur Programmiersprache C Seite 195 von 606
Siehe auch _dos_open
_dos_creat
_dos_read
dup
Syntax #include <io.h>
int dup(int handle);
Beschreibung
Verdoppelt ein Handle für eine Datei.
dup erzeugt aus einem Datei-Handle ein zweites Handle, das mit dem Original folgende Gemeinsamkeiten hat:
die offene Datei bzw. das Gerät;
den Dateizeiger (ändert man den Dateizeiger des einen Handle, so ändert man auch den des anderen);
die Zugriffsberechtigungen (Lesen, Schreiben, Lesen und Schreiben).
handle ist ein Datei-Handle, das man durch einen Aufruf von _rtl_creat, creat, _rtl_open, open, dup oder dup2 erhalten hat.
Rückgabewert
dup liefert bei fehlerfreier Ausführung das neu erzeugte Datei-Handle als positiven Integerwert zurück. Im Fehlerfall liefert die Routine den Wert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EMFILE Zu viele offene Dateien
EBADF Ungültiges Handle
Siehe auch close
creat
creatnew
creattemp
dup2
fopen
open
_rtl_close
_rtl_creat
_rtl_open
dup2
Syntax #include <io.h>
int dup2(int oldhandle, int newhandle);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 196 von 606
Bildet das Datei-Handle (oldhandle) auf dem existierendem Datei-Handle (newhandle) ab.
dup2 erzeugt aus einem Handle ein zweites, das mit dem Original folgende Gemeinsamkeiten hat:
die offene Datei bzw. das Gerät;
den Dateizeiger (ändert man den Dateizeiger des einen Handle, so ändert man auch den des anderen);
de Zugriffsberechtigungen (Lesen, Schreiben, Lesen und Schreiben).
dup2 erzeugt ein neues Handle mit dem Wert von newhandle. Ist die mit newhandle verbundene Datei beim Aufruf von dup2 geöffnet, wird sie geschlossen. newhandle und oldhandle sind Datei-Handle, die durch Aufrufe von creat, open, dup oder dup2 erzeugt wurden.
Rückgabewert
dup2 liefert bei fehlerfreier Ausführung den Wert 0 zurück. Im Fehlerfall liefert die Routine den Wert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EBADF Ungültiges Handle
EMFILE Zu viele offene Dateien
Siehe auch close
creat
creatnew
creattemp
dup
fopen
open
_rtl_close
_rtl_creat
_rtl_open
ecvt
Syntax #include <stdlib.h>
char *ecvt(double value, int ndig, int *dec, int *sign);
Beschreibung
Konvertiert eine Gleitkommazahl in einen String.
ecvt konvertiert value in einen nullterminierten String mit ndig Ziffern, der mit der höchstwertigen Ziffer (links) beginnt. ecvt liefert einen Zeiger auf diesen String zurück. Über dec wird die Position des Dezimalpunkts relativ zum Beginn des Strings zurückgeliefert (negative Werte bedeuten hier: "Dezimalpunkt befindet sich links vom Stringanfang"). Der String selbst enthält keinen Dezimalpunkt. Wenn value negativ ist, dann setzt ecvt das über sign adressierte Wort auf einen Wert ungleich Null (für positive Werte von value ist *sign == 0). Die letzte Ziffer des zurückgelieferten Strings ist gerundet.
Rückgabewert
ecvt liefert einen Zeiger auf diesen statischen String zurück, dessen Inhalt durch jeden Aufruf von fcvt und ecvt überschrieben wird.
Siehe auch
DDCHelp Hilfe zur Programmiersprache C Seite 197 von 606
fcvt
gcvt
sprintf
__emit__
Syntax #include <dos.h>
void __emit__(argument, ...);
Beschreibung
Fügt Literale direkt in den Objektcode ein.
__emit__ ist eine Inline-Funktion, die das direkte Einfügen von Literalen während des Kompilierens eines Objektcodes ermöglicht. Die Funktion dient zur Erzeugung von Assembler-Anweisungen ohne Verwendung eines Assemblers. Im allgemeinen wird man als Argumente für __emit__ einzelne Bytes (d.h. Prozessorbefehle) verwenden. Es lassen sich aber auch wesentlich komplexere Konstrukte bilden -- inklusive Zugriffen auf C-Variablen.
Sie sollten diese Funktion nur verwenden, wenn Sie mit der Maschinensprache der 8086-Prozessorfamilie vertraut sind. Sie können mit Hilfe dieser Funktion beliebige Bytes in den Befehlscode einer Funktion einfügen. Ein einziges fehlerhaftes Byte kann zu unerwartetem Verhalten Ihres Programms und auch ohne weiteres zu einem Systemabsturz führen. Der Compiler unternimmt keinen Versuch, die eingefügten Byte-Folgen auf formale Korrektheit oder in irgendeiner anderen Weise zu prüfen. Der Compiler bemerkt nicht, ob Sie Maschinenbefehle einfügen, die den Inhalt von Prozessorregistern oder des Speichers ändern. Anders als bei der Verwendung von Inline-Assembler, wo beispielsweise die Benutzung der Register SI und DI erkannt wird, ergreift der Compiler keine Maßnahmen zur Sicherung von Registerinhalten. Der korrekte Einsatz dieser Funktion liegt allein in der Verantwortung des Programmierers.
__emit__ erwartet zumindest ein Argument, es können aber beliebig viele übergeben werden. Die Argumente für diese Funktion werden nicht wie Argumente bei normalen Funktionsaufrufen behandelt, da keinerlei Konvertierungen durchgeführt werden.
Die Parameter dieser Funktion unterliegen denselben Beschränkungen wie Initialisierungswerte statischer Objekte: es dürfen Integer- und Gleitkommakonstanten und die Adressen statischer Objekte verwendet werden. Die Werte dieser Ausdrücke werden exakt an der Stelle des Aufrufs in den Objektcode genauso geschrieben, als dienten sie der Initialisierung von Daten. Es darf auch die Adresse eines Parameters oder einer automatischen Variablen plus oder minus einem konstanten Offset verwendet werden. Für diese Argumente wird der Offset der Variablen vom BP-Register gespeichert.
Die Anzahl der im Objektcode gespeicherten Bytes hängt, abgesehen von folgenden Einschränkungen, vom Typ des jeweiligen Arguments ab:
eine vorzeichenbehaftete Integer-Konstante (zum Beispiel: 0x90) wird als ein Zeichen behandelt, wenn sie im Bereich zwischen 0 und 255 liegt;
für die Adresse einer automatischen Variablen oder eines Parameters wird ein Byte geschrieben, wenn der Offset der Variablen vom BP-Register zwischen -128 und 127 liegt, andernfalls wird ein Wort (2 Bytes) geschrieben.
Ein einfaches Byte schreiben Sie so:
__emit__ (0x90);
Falls Sie ein Wort einfügen wollen, dessen Wert kleiner als 255 ist, wandeln Sie den Typ einfach mit einer der beiden folgenden Methoden in unsigned um:
__emit__ (0xB8, (unsigned)17);
__emit__ (0xB8, 17u);
Zwei bzw. vier Byte lange Adressen können durch die Typumwandlung einer Adresse in void near* bzw. void far* erzwungen werden.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 198 von 606
Keiner.
_endthread
Syntax #include <process.h>
void _endthread(void);
Beschreibung
Beendet die Ausführung eines Threads.
Die Funktion _endthread beendet den aktuell ausgeführten Thread, der zuvor mit einem Aufruf von _beginthread oder von _beginthreadNT gestartet wurde.
Diese Funktion ist nur in den Multi-Thread Bibliotheken verfügbar.
Rückgabewert
Keiner.
Siehe auch _beginthread (Win32s-Version)
_beginthreadNT (Windows NT-Version)
Beispiel _beginthread (Win32s version)
_beginthreadNT (Windows NT version)
eof
Syntax #include <io.h>
int eof(int handle);
Beschreibung
Prüft, ob das Ende einer Datei erreicht ist.
eof prüft, ob der Dateizeiger der durch handle bezeichneten Datei am Dateiende steht.
Rückgabewert
Wenn das Ende der Datei erreicht ist, liefert eof den Wert 1, ansonsten den Wert 0. Der Rückgabewert -1 zeigt einen Fehler an, die globale Variable errno erhält in diesem Fall den Wert
EBADF Ungültiges Handle
Siehe auch clearerr
feof
ferror
perror
DDCHelp Hilfe zur Programmiersprache C Seite 199 von 606
execl, execle, execlp, execlpe, execv, execve, execvp, execvpe
Syntax #include <process.h>
int execl(char *path, char *arg0 *arg1, ..., *argn, NULL);
int execle(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);
int execlp(char *path, char *arg0,*arg1, ..., *argn, NULL);
int execlpe(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);
int execv(char *path, char *argv[]);
int execve(char *path, char *argv[], char **env);
int execvp(char *path, char *argv[]);
int execvpe(char *path, char *argv[], char **env);
Beschreibung
Funktionen zum Laden und Starten eines anderen Programms.
Die Funktionen der exec...-Familie laden und starten andere Programme, die als Kindprozesse bezeichnet werden. Wenn ein exec...-Aufruf fehlerfrei ausgeführt werden konnte, überlagert der Kindprozess (child process) seinen Elternprozess (parent process). Im Hauptspeicher muss genügend Platz sein, um den Kindprozess laden und ausführen zu können. Der Parameter path gibt den Dateinamen des Kindprozesses an - verwendet wird der Standard-Suchalgorithmus:
wenn weder eine Namenserweiterung noch ein Punkt angegeben ist, wird zuerst nach Dateien ohne Namenserweiterung gesucht. Wird die Datei nicht gefunden, so wird der Dateiname um .EXE erweitert und die Suche erneut gestartet. Wird die Datei wieder nicht gefunden, so wird .COM angehängt und abermals gesucht. Schließlich wird die Batch-Datei mit Hilfe des Kommandozeileninterpreters (COMSPEC unter Windows bzw. COMMAND.COM unter DOS) gestartet.
wenn eine Namenserweiterung oder ein Punkt angegeben ist, wird nur nach dem angegebenen Dateinamen gesucht.
Die einzelnen Funktionen der exec...-Familie unterscheiden sich durch die Namensendungen l, v, p und e, wobei jeder dieser Buchstaben auf andere Fähigkeiten hinweist.
Es bedeuten:
l Die Zeiger (arg0, ..., argn) werden in Form einer Liste einzelner Argumente übergeben. Die Listenform wird normalerweise verwendet, wenn die Zahl der zu übergebenden Argumente bekannt und konstant ist.
v Die Argumentzeiger werden als Zeiger-Array übergeben, das heißt als argv[0], argv[1] ...argv[n]. Diese Form wird normalerweise bei einer variablen Zahl von Argumenten verwendet.
p Die exec-Funktion sucht nicht nur innerhalb des aktuellen Verzeichnisses nach der Datei, sondern auch in sämtlichen in der Umgebungsvariablen PATH festgelegten Verzeichnissen, falls der Parameter path kein explizites Verzeichnis enthält.
e Erlaubt die Übergabe des Zeiger-Array env (d.h. eines eigenen Environment für den Kindprozess). Über exec...-Varianten ohne e aufgerufene Prozesse verwenden dieselben Umgebungsparameter wie das aufrufende Programm.
Jede Variante der exec...-Familie enthält entweder ein l oder ein v im Namen, die weiteren Kombinationen mit p und e sind optional.
Zwei Beispiele dazu:
execl verwendet eine Liste von Argumenten, sucht nur das aktuelle Verzeichnis oder das Stammverzeichnis nach dem Kindprozess ab und übergibt die Environment-Parameter, die auch für das momentan laufende Programm gültig sind;
execvpe übernimmt ein Zeiger-Array, führt nötigenfalls eine Suche nach dem Kindprozess über
DDCHelp Hilfe zur Programmiersprache C Seite 200 von 606
die durch PATH festgelegten Pfade aus und übergibt Environment-Parameter, die vom Programmierer für diesen Prozess definiert worden sind.
Sämtliche exec...-Funktionen müssen zumindest ein Argument an den Kindprozess übergeben, nämlich arg0 bzw. argv[0]. Dieses Argument enthält per Konvention eine Kopie von path. Die Übergabe anderer Daten als erstem Parameter widerspricht nur den Gepflogenheiten, ist aber kein Fehler.
Somit ist das Argument path für den Kindprozess verfügbar.
Bei den l-Funktionen zeigt arg0 normalerweise auf path. Die Parameter arg1,...,argn bilden die aus weiteren Strings bestehende neue Argumentliste, die mit einer NULL nach argn beendet werden muss.
Die e-Funktionen erwarten das Argument env als Zeiger-Array. Jedes Element dieses Array zeigt auf einem nullterminierten String der Form
U_Var = Wert
wobei U_Var der Name einer Umgebungsvariablen ist und Wert der String, auf den U_Var gesetzt wird.
Das letzte Element des Array muss einen Zeiger mit dem Wert NULL enthalten. Dadurch wird das Listenende gekennzeichnet. Wenn env den Wert NULL hat, verwendet der Kindprozess das Environment seines Elternprozesses.
Die Gesamtlänge sämtlicher als arg übergebenen Argumente darf bei 16 Bit Anwendungen 128 Byte, bei Win32 Anwendungen 260 Byte nicht überschreiten (inklusive der automatisch eingesetzten Leerzeichen zur Trennung einzelner Parameter). Nullzeichen und Environment-Parameter werden bei dieser Zählung nicht berücksichtigt.
exec... schließt keine Dateien - sämtliche durch den Elternprozess geöffneten Dateien stehen auch dem Kindprozess zur Verfügung.
Rückgabewert
Bei fehlerfreier Ausführung kehrt eine exec...-Funktion überhaupt nicht zum Programm zurück. Konnte die exec...-Funktion dagegen nicht ausgeführt werden, dann wird -1 zurückgeliefert, und die globale Variable errno erhält einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
EMFILE Zu viele offene Dateien
ENOENT Pfad/Dateiname nicht gefunden
ENOEXEC exec-Formatfehler
ENOMEM Nicht genug Platz im Hauptspeicher
Siehe auch abort
atexit
_c_exit
_cexit
_exit
exit
_fpreset
searchpath
spawn...
system
Beispiel execl
DDCHelp Hilfe zur Programmiersprache C Seite 201 von 606
execle
execlp
execlpe
execv
execve
execvp
execvpe
_exit
Syntax #include <stdlib.h>
void _exit(int status);
Beschreibung
Beendet das laufende Programm.
_exit beendet das Programm, ohne Dateien zu schließen, Ausgabepuffer zu leeren oder Exit-Funktionen aufzurufen.
_exit beendet das Programm mit dem als status angegebenen Exit-Code, der vom aufrufenden Prozess geprüft werden kann. Der Wert NULL steht normalerweise für eine fehlerfreie Ausführung, Werte ungleich Null signalisieren Fehler.
Rückgabewert
Keiner.
Siehe auch abort
atexit
_c_exit
_cexit
exec...
exit
spawn...
exit
Syntax #include <stdlib.h>
void exit(int status);
Beschreibung
Beendet das laufende Programm.
exit beendet das aufrufende Programm. Vor dem Rücksprung werden sämtliche Dateipuffer geschrieben, offene Dateien geschlossen und (mit atexit) festgelegte Exit-Funktionen aufgerufen.
Die Funktion beendet das Programm mit dem als status angegebenen Exit-Code, der vom aufrufenden Prozess geprüft werden kann. Der Wert Null steht normalerweise für eine fehlerfreie Ausführung, Werte ungleich Null signalisieren Fehler. Folgende Konstanten stehen für status zur Verfügung:
DDCHelp Hilfe zur Programmiersprache C Seite 202 von 606
EXIT_FAILURE Fehlerhaftes Programmende - Signal an das Betriebssystem, dass das Programm mit einem Fehler endete.
EXIT_SUCCESS Normales Programmende.
Rückgabewert
Keiner.
Siehe auch abort
atexit
_c_exit
_cexit
exec...
_exit
signal
spawn...
exp, expl
Syntax #include <math.h>
double exp(double x);
long double expl(long double x);
Beschreibung
Berechnet die Exponentialfunktion ex.
expl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
exp liefert ex zurück. Falls die Argumente zu nicht-berechenbaren Resultaten führen, werden die folgenden Fehlerbedingungen erzeugt: Bei einem Überlauf liefert exp HUGE_VAL und expl _LHUGE_VAL. Die globale Variable errno wird in diesen Fällen auf folgenden Wert gesetzt:
ERANGE Ergebnis außerhalb des Rechenbereichs
Bei einem Unterlauf liefern exp und expl 0.0 zurück, die globale Variable errno wird nicht verändert.
Die Fehlerbehandlung für exp und expl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
Siehe auch frexp
ldexp
log
log10
_matherr
pow
pow10
sqrt
DDCHelp Hilfe zur Programmiersprache C Seite 203 von 606
_expand
Syntax #include <malloc.h>
void *_expand(void *block, size_t size);
Beschreibung
Vergrößert oder verkleinert einen Heap-Speicherblock.
Diese Funktion versucht die Größe des bereits reservierten Speicherblocks block zu ändern, ohne ihn dabei zu verschieben. Die im Speicherblock enthaltenen Daten werden bis hin zum Minimum der alten und neuen Bereichsgröße nicht geändert. Der Speicherblock muss durch einen vorhergehenden Aufruf von malloc, calloc, oder realloc reserviert und darf noch nicht wieder freigegeben worden sein.
Rückgabewert
Konnte die Größe des Speicherblocks ohne Verschiebung geändert werden, so liefert _expand die (unveränderte) Adresse des Speicherblocks zurück. Andernfalls wird ein NULL-Zeiger zurückgeliefert und die Größe des Speicherbereichs bleibt unverändert.
Siehe auch calloc
malloc
realloc
fabs, fabsl
Syntax #include <math.h>
double fabs(double x);
long double fabsl(long double x);
Beschreibung
Berechnet den absoluten Wert einer Gleitkommazahl.
fabs berechnet den absoluten Betrag des double-Arguments x. fabsl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double.
Rückgabewert
fabs und fabsl liefern den absoluten Betrag von x zurück.
Siehe auch
abs
cabs
labs
DDCHelp Hilfe zur Programmiersprache C Seite 204 von 606
farcalloc
Syntax #include <alloc.h>
void far *farcalloc(unsigned long nunits, unsigned long unitsz);
Beschreibung
Reserviert Speicherplatz auf dem FAR-Heap.
farcalloc reserviert Platz auf dem FAR-Heap für ein Array mit nunits Elementen, deren Größe jeweils unitsz Bytes beträgt.
Bei der Arbeit mit dem FAR-Heap sind einige sonst vorhandene Grenzen aufgehoben:
der gesamte verfügbare RAM-Speicherplatz kann reserviert werden;
{bmc bullet.mrb die Größe einzelner Blöcke kann 64 KByte überschreiten;
für Zugriffe auf die Blöcke müssen grundsätzlich far-Zeiger (oder huge-Zeiger,
wenn die Blöcke größer als 64 KByte sind) benutzt werden.
Bei Verwendung der Speichermodelle Compact, Large oder Huge verhält sich farcalloc ähnlich wie
calloc, die Funktionen sind aber nicht identisch: Die Parameter von calloc sind vom Typ unsigned,
diejenigen von farcalloc dagegen vom Typ unsigned long. Für DOS-Anwender gilt, dass
Programme bei Einsatz des Speichermodells Tiny faralloc nicht verwenden können.
Rückgabewert
farcalloc liefert einen far-Zeiger auf die Startadresse des neu reservierten Speicherblocks zurück. Wenn nicht ausreichend Platz zur Verfügung steht, wird der Zeigerwert NULL zurückgeliefert.
Siehe auch
calloc
farfree
farmalloc
malloc
farfree
Syntax #include <alloc.h>
void farfree(void far * block);
Beschreibung
Gibt einen Speicherblock auf dem FAR-Heap frei.
farfree gibt einen zuvor reservierten Speicherblock auf dem FAR-Heap wieder frei.
In den Modellen Small und Medium sind der Heap und der FAR-Heap zwei völlig voneinander getrennte Speicherbereiche - durch farmalloc reservierte Blöcke können nicht mit free freigegeben werden, durch malloc reservierte Blöcke nicht mit farfree. Für DOS-Anwender gilt, dass Programme bei Einsatz des Speichermodells Tiny farfree nicht verwenden können.
Rückgabewert
Keiner.
DDCHelp Hilfe zur Programmiersprache C Seite 205 von 606
Siehe auch
farcalloc
farmalloc
farmalloc
Syntax #include <alloc.h>
void far *farmalloc(unsigned long nbytes);
Beschreibung
Reserviert Speicher auf dem FAR-Heap.
farmalloc reserviert einen Speicherblock von nbytes Größe auf dem FAR-Heap.
Bei der Arbeit mit dem FAR-Heap sind einige sonst vorhandene Grenzen aufgehoben:
der gesamte verfügbare RAM-Speicherplatz kann reserviert werden;
die Größe einzelner Blöcke kann 64 KByte überschreiten;
für Zugriffe auf die Blöcke müssen grundsätzlich far-Zeiger benutzt werden.
Bei Verwendung der Speichermodelle Compact oder Large verhält sich farmalloc ähnlich wie die Funktion malloc - identisch sind sie aber nicht: die Parameter von malloc sind vom Typ unsigned, die von farmalloc dagegen vom Typ unsigned long. Für DOS-Anwender gilt, dass Programme bei Einsatz des Speichermodells Tiny farmalloc nicht verwenden können.
Rückgabewert
farmalloc liefert einen far-Zeiger auf die Startadresse des neu reservierten Speicherblocks zurück. Wenn nicht genügend Platz zur Verfügung steht, wird der Zeigerwert NULL zurückgeliefert.
Siehe auch
farcalloc
farfree
farrealloc
malloc
farrealloc
Syntax #include <alloc.h>
void far *farrealloc(void far *oldblock, unsigned long nbytes);
Beschreibung
Vergrößert oder verkleinert einen auf dem FAR-Heap reservierten Speicherbereich.
farrealloc verändert die Größe eines bereits reservierten Blocks auf nbytes, wobei der Blockinhalt nötigenfalls in einen anderen Speicherbereich kopiert wird.
Bei der Arbeit mit dem FAR-Heap sind einige sonst vorhandene Grenzen aufgehoben:
der gesamte verfügbare RAM-Speicherplatz kann reserviert werden;
die Größe einzelner Blöcke kann 64 KByte überschreiten;
für Zugriffe auf die Blöcke müssen grundsätzlich far-Zeiger benutzt werden.
DDCHelp Hilfe zur Programmiersprache C Seite 206 von 606
Für DOS-Anwender gilt, dass Programme bei Einsatz des Speichermodells Tiny farrealloc nicht
verwenden können.
Rückgabewert
farrealloc liefert einen far-Zeiger auf die Startadresse des veränderten Speicherblocks zurück, die sich von der alten Startadresse unterscheiden kann. Falls nicht ausreichend Platz zur Verfügung steht, wird der Wert NULL geliefert.
Siehe auch
realloc
fclose
Syntax #include <stdio.h>
int fclose(FILE *stream);
Beschreibung
Schließt einen Stream.
fclose schließt den durch stream angegebenen Stream, wobei alle zum Stream gehörenden Puffer zuvor auf Diskette bzw. Platte geschrieben werden. Durch das System reservierte Puffer werden durch fclose freigegeben. Puffer, die mit setbuf oder setvbuf zugeordnet wurden, werden nicht automatisch freigegeben (es sei denn, beim Aufruf von setvbuf wurde als Pufferzeiger der Wert NULL übergeben).
Rückgabewert
fclose liefert bei fehlerfreier Ausführung den Wert 0, im Fehlerfall den Wert EOF zurück.
Siehe auch
close
fcloseall
fdopen
fflush
flushall
fopen
freopen
fcloseall
Syntax #include <stdio.h>
int fcloseall(void);
Beschreibung
Schließt offene Streams.
fcloseall schließt sämtliche offenen Streams außer:
DDCHelp Hilfe zur Programmiersprache C Seite 207 von 606
stdin
stdout
stdprn
stderr
stdaux, stdstreams
Hinweis: Die Streams stdprn und stdaux sind unter OS/2 und Win32 nicht verfügbar.
Rückgabewert
fcloseall liefert bei fehlerfreier Ausführung die Anzahl der geschlossenen Streams zurück, im Fehlerfall den Wert EOF.
Siehe auch
fclose
fdopen
flushall
fopen
freopen
fcvt
Syntax #include <stdlib.h>
char *fcvt(double value, int ndig, int *dec, int *sign);
Beschreibung
Konvertiert eine Gleitkommazahl in einen String.
fcvt konvertiert value in einen nullterminierten String mit ndig Ziffern rechts des Dezimalpunkts, der mit der höchstwertigen Ziffer (links) beginnt. fcvt liefert einen Zeiger auf diesen String zurück. Über dec wird die Position des Dezimalpunkts relativ zum Beginn des Strings zurückgeliefert (negative Werte bedeuten hier: "Dezimalpunkt befindet sich links vom Stringanfang"). Der String selbst enthält keinen Dezimalpunkt. Wenn value negativ ist, dann setzt fcvt das über sign adressierte Wort auf einen Wert ungleich null (für positive Werte von value ist *sign == 0).
Die Ziffern werden auf ndig Stellen hinter dem Dezimalpunkt gerundet.
Rückgabewert
fcvt liefert einen Zeiger auf einen statischen String zurück, dessen Inhalt durch jeden Aufruf dieser Funktion (oder von ecvt) neu gesetzt wird.
Siehe auch
ecvt
gcvt
sprintf
fdopen
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 208 von 606
#include <stdio.h>
FILE *fdopen(int handle, char *type);
Beschreibung
Ordnet einem Datei-Handle einen Stream zu.
fdopen ordnet dem offenen Datei-Handle handle, das über einen Aufruf creat, dup, dup2, oder open. erhalten wurde, einen Stream zu. Der Typ des Stream muss zum Modus des Datei-Handle passen. Der Parameter type kann einen der folgenden Werte annehmen:
Wert Beschreibung
r Öffnung ausschließlich für Leseoperationen.
w Erzeugung einer Datei für Schreiboperationen.
a Öffnung für Schreiboperationen. Falls die Datei bereits existiert, werden zusätzliche
Informationen an das aktuelle Dateiende angefügt, ansonsten wird sie für
Schreiboperationen erzeugt.
r+ Öffnung einer Datei für Lese- und Schreiboperationen. Die Datei muss bereits
existieren.
w+ Erzeugung einer neuen Datei für Lese- und Schreiboperationen.
a+ Öffnung einer Datei zum Lesen und Anhängen neuer Daten durch
Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten -
falls nicht, wird sie automatisch erzeugt.
Bei der Öffnung kann zusätzlich explizit angegeben werden, ob die Datei im Text- (t) oder Binärmodus (b) bearbeitet werden soll. Die Angabe geschieht durch ein einfaches Anhängen des jeweiligen Buchstabens (also wb, w+b, rt, a+t etc.).
Wenn die Modusangabe fehlt, wird der jeweilige Modus durch die globale Variable _fmode. bestimmt, deren Wert über die direkte Zuweisung einer der in fcntl.h definierten Konstanten O_TEXT oder O_BINARY festgelegt werden kann.
Mit r+ und w+ erzeugte Dateien können sowohl gelesen als auch beschrieben werden:
Zwischen einem Wechsel von "Schreiben" nach "Lesen" muss allerdings ein Aufruf von fseek
oder rewind stattfinden.
Zwischen einem Wechsel von "Lesen" nach "Schreiben" muss ebenfalls ein Aufruf von fseek
oder rewind stattfinden, es sei denn, die Leseoperation hat das Dateiende erreicht.
Rückgabewert
fdopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream zurück, im Fehlerfall den Wert NULL.
Siehe auch
fclose
fopen
freopen
_get_osfhandle
open
feof
Syntax #include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 209 von 606
int feof(FILE *stream);
Beschreibung
Prüft, ob das Ende eines Stream erreicht ist.
Das Makro feof prüft das Dateiende-Flag des über stream angegebenen Stream. Dieses Flag wird beim Erreichen des Dateiendes automatisch gesetzt. Leseoperationen liefern dann solange dieses Flag, bis rewind aufgerufen oder die Datei geschlossen wird. Vor jeder Schreiboperation in diese Datei wird das Flag gelöscht.
Rückgabewert
feof liefert einen Wert ungleich 0 zurück, wenn das Dateiende-Flag des angegebenen Stream gesetzt ist, ansonsten ist der Rückgabewert 0.
Siehe auch
clearerr
eof
ferror
perror
ferror
Syntax #include <stdio.h>
int ferror(FILE *stream);
Beschreibung
Prüft Fehlerbedingungen bei Streams.
ferror ist ein Makro, das den über stream angegebenen Stream auf Schreib- und Lesefehler prüft. Das Fehler-Flag eines Stream bleibt nach einem Fehler solange gesetzt, bis entweder clearerr oder rewind aufgerufen oder der Stream geschlossen wird.
Rückgabewert
ferror liefert einen Wert ungleich null zurück, wenn das Fehler-Flag des angegebenen stream gesetzt ist, sonst den Wert 0.
Siehe auch
clearerr
eof
feof
fopen
gets
perror
fflush
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 210 von 606
#include <stdio.h>
int fflush(FILE *stream);
Beschreibung
Schreibt den Ausgabepuffer eines Stream in die zugeordnete Datei.
fflush erzwingt bei gepufferten Ausgabe-Streams ein Schreiben eventueller Pufferinhalte, sorgt also dafür, dass ausgegebene Daten in die zugehörige Datei geschrieben werden.
Der durch stream bezeichnete Stream bleibt offen. Auf ungepufferte Streams hat fflush keine Auswirkung.
Rückgabewert
Bei fehlerfreier Ausführung liefert fflush den Wert 0, im Fehlerfall den Wert EOF zurück.
Siehe auch
fclose
flushall
setbuf
setvbuf
fgetc
Syntax #include <stdio.h>
int fgetc(FILE *stream);
Beschreibung
Liest ein Zeichen aus einem Stream.
fgetc liest das jeweils nächste Zeichen aus dem Eingabe-Stream stream.
Rückgabewert
fgetc konvertiert bei fehlerfreier Ausführung das gelesene Zeichen in einen int-Wert ohne Vorzeichenerweiterung und liefert diesen zurück. Bei Erreichen des Dateiendes oder im Fehlerfall wird der Wert EOF zurückgeliefert.
Siehe auch
fgetchar
fputc
getc
getch
getchar
getche
ungetc
ungetch
DDCHelp Hilfe zur Programmiersprache C Seite 211 von 606
fgetchar
Syntax #include <stdio.h>
int fgetchar(void);
Beschreibung
Liest ein Zeichen aus stdin.
Die Funktion fgetchar liest das jeweils nächste Zeichen aus stdin und liefert es zurück. Sie ist definiert als fgetc(stdin).
Hinweis: In Win32 oder Win32s GUI-Anwendungen muss stdin umgelenkt werden.
Rückgabewert
fgetchar konvertiert bei fehlerfreier Ausführung das gelesene Zeichen in einen int-Wert ohne Vorzeichenerweiterung und liefert diesen zurück. Bei Erreichen des Dateiendes oder im Fehlerfall wird der Wert EOF zurückgeliefert.
Siehe auch
fgetc
fputchar
freopen
getchar
fgetpos
Syntax #include <stdio.h>
int fgetpos(FILE *stream, fpos_t *pos);
Beschreibung
Ermittelt die aktuelle Position des Dateizeigers einer Datei.
fgetpos speichert die Position des zu stream gehörigen Dateizeigers in *pos. Der Wert wird speziell codiert gespeichert und ist nur als Parameter für einen folgenden Aufruf von fsetpos sinnvoll.
Rückgabewert
fgetpos liefert bei fehlerfreier Ausführung 0 zurück. Im Fehlerfall liefert fgetpos einen Wert ungleich null und setzt die globale Variable errno auf:
EBADF Ungültiges Handle
EINVAL Ungültiges Argument
Siehe auch
fseek
fsetpos
ftell
tell
DDCHelp Hilfe zur Programmiersprache C Seite 212 von 606
fgets
Syntax #include <stdio.h>
char *fgets(char *s, int n, FILE *stream);
Beschreibung
Liest einen String aus einem Stream.
fgets liest einen String aus stream in den durch s angegebenen String und bricht ab, wenn entweder ein Zeilenvorschub (\n) gelesen wird oder n-1 Zeichen gelesen wurden. Der Zeilenvorschub wird am Ende von s gespeichert. Anschließend hängt fgets automatisch ein Nullzeichen (\0) an, um das Ende des Strings zu markieren.
Rückgabewert
fgets liefert bei fehlerfreier Ausführung den durch s bezeichneten String zurück. Bei Erreichen des Dateiendes oder im Fehlerfall ist der Rückgabewert NULL.
Siehe auch
cgets
fputs
gets
filelength
Syntax #include <io.h>
long filelength(int handle);
Beschreibung
Ermittelt die Länge einer Datei in Bytes.
filelength liefert die Länge der über handle angegebenen Datei in Bytes zurück.
Rückgabewert
Bei fehlerfreier Ausführung liefert filelength die Dateigröße in Bytes als long-Wert. Im Fehlerfall liefert filelength -1 zurück und setzt die globale Variable errno auf
EBADF Ungültiges Handle
Siehe auch
fopen
lseek
open
fileno
Syntax
DDCHelp Hilfe zur Programmiersprache C Seite 213 von 606
#include <stdio.h>
int fileno(FILE *stream);
Beschreibung
Liefert das zu einem Stream gehörende Datei-Handle.
fileno ist ein Makro und liefert das Handle des über den Parameter stream angegebenen Stream zurück. Wenn stream mehr als ein Handle zugeordnet ist, wird das beim ersten Öffnen des Stream vergebene Handle zurückgeliefert.
Rückgabewert
fileno liefert das zu stream gehörende Datei-Handle als Integer zurück.
Siehe auch
fdopen
fopen
freopen
_get_osfhandle
findfirst
Syntax #include <dir.h>
int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);
Beschreibung
Durchsucht ein Dateiverzeichnis.
findfirst startet die Suche in einem Verzeichnis nach Dateien, die über Attribute oder Jokerzeichen angegeben werden.
Der Parameter pathname ist ein String und bezeichnet den zu suchenden Eintrag. Er kann optional eine Laufwerksbezeichnung, einen Pfad und den zu suchenden Dateinamen enthalten. Nur im Dateinamen sind Jokerzeichen (* und ?) erlaubt. Falls eine passende Datei gefunden wird, werden in der über ffblk angegebenen Struktur die im Verzeichnis enthaltenen Dateiinformationen gespeichert.
Die Struktur ffblk ist folgendermaßen definiert:
Win16 struct ffblk {
char ff_reserved[21]; /* von DOS verwendet */
char ff_attrib; /* gefundenes Attribut */
int ff_ftime; /* Uhrzeit der letzten Änderung */
int ff_fdate; /* Datum der letzten Änderung */
long ff_fsize; /* Dateigröße in Bytes */
char ff_name[13]; /* Name der gefundenen Datei */
};
Win32 struct ffblk {
long ff_reserved[21];
long ff_fsize; /* Dateigröße */
unsigned long ff_attrib; /* gefundenes Attribut */
unsigned short ff_ftime; /* Uhrzeit der letzten Änderung */
unsigned short ff_fdate; /* Datum der letzten Änderung */
char ff_name[256]; /* Name der gefundenen Datei */
DDCHelp Hilfe zur Programmiersprache C Seite 214 von 606
};
Über den Parameter attrib wird das Attribut des zu suchenden Eintrags angegeben. attrib kann eine der folgenden Konstanten sein, die in dos.h: definiert sind:
FA_RDONLY Nur-Lesen-Attribut
FA_HIDDEN Verborgene Datei
FA_SYSTEM Systemdatei
FA_LABEL Datenträgername
FA_DIREC Verzeichnis
FA_ARCH Archiv-Bit
Eine Kombination der obiger Konstanten kann durch eine ODER-Verknüpfung angegeben werden.
Ausführliche Informationen über diese Attribute finden Sie in den Referenzhandbüchern Ihres Betriebssystems.
Beachten Sie, dass ff_ftime und ff_fdate Bitfelder für die aktuelle Uhrzeit und das aktuelle Datum enthalten. Die Struktur dieser Bitfelder ist vom Betriebssystem vorgegeben. Es handelt sich in beiden Fällen um 16 Bit große Strukturen, die in drei Felder unterteilt sind:
ff_ftime:
Bits 0 bis 4 Resultierende Sekunden geteilt durch 2 (d.h. 10 bedeutet hier 20 Sekunden)
Bits 5 bis 10 Minuten
Bits 11 bis 15 Stunden
ff_fdate:
Bits 0 bis 4 Tag
Bits 5 bis 8 Monat
Bits 9 bis 15 Jahre seit 1980 (d.h. 9 bedeutet hier 1989)
Die in io.h definierte Struktur ftime verwendet Datums- und Uhrzeit-Bitfelder ähnlicher Struktur wie in ff_fdate und ff_ftime.
Rückgabewert
findfirst liefert den Wert 0 zurück, wenn ein zu pathname passender Eintrag gefunden wurde.
Wenn kein Eintrag gefunden wird oder der angegebene Dateiname aus irgendeinem Grund ungültig ist:
wird -1 als Ergebnis geliefert
und die globale Variable errno erhält den Wert:
ENOENT Datei/Pfad nicht gefunden
_doserrno wird in diesem Fall auf einen der folgenden Werte gesetzt:
ENMFILE Keine weiteren passenden Einträge
ENOENT Datei/Pfad nicht gefunden
Siehe auch
findnext
getftime
setftime
DDCHelp Hilfe zur Programmiersprache C Seite 215 von 606
findnext
Syntax #include <dir.h>
int findnext(struct ffblk *ffblk);
Beschreibung
Mit findnext kann ein Verzeichnis nach weiteren Einträgen abgesucht werden, die zum Parameter pathname einer vorangegangenen findfirst-Suche passen. Als Argument muss die Struktur des Typs ffblk übergeben werden, die durch findfirst gefüllt wurde, da diese notwendige Informationen zur Fortsetzung der Suche enthält. findnext liefert bei jedem Aufruf einen weiteren Dateieintrag über ffblk zurück, bis das Verzeichnis keine weiteren Einträge mehr enthält, die dem Parameter pathname des vorherigen Aufrufs von findfirst entsprechen.
Rückgabewert
findnext liefert den Wert 0 zurück, wenn ein weiterer zu pathname passender Eintrag gefunden wurde. Wenn keine weiteren Einträge mehr vorhanden sind oder der angegebene Dateiname aus irgendeinem Grund ungültig ist, wird -1 geliefert und errno erhält den Wert:
ENOENT Datei/Pfad nicht gefunden
_doserrno wird auf einen der folgenden Werte gesetzt:
ENOENT Datei/Pfad nicht gefunden
ENMFILE Keine weiteren passenden Einträge
Siehe auch
findfirst
floor, floorl
Syntax #include <math.h>
double floor(double x);
long double floorl(long double x);
Beschreibung
Rundet ab.
floor rundet auf den größten Integerwert ab, der nicht größer als x ist. floorl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
floor liefert den Integer als double-Wert zurück. floorl liefert den Integer als Wert vom Typ long double zurück.
Siehe auch
ceil
fmod
DDCHelp Hilfe zur Programmiersprache C Seite 216 von 606
flushall
Syntax #include <stdio.h>
int flushall(void);
Beschreibung
Entleert die Puffer aller Streams.
flushall löscht alle zu offenen Eingabe-Streams gehörigen Puffer und schreibt alle zu offenen Ausgabe-Streams gehörigen Puffer in ihre jeweiligen Dateien. Die auf flushall folgenden Leseoperationen lesen aus ihren Eingabedateien neue Daten in die Puffer ein. Durch flushall werden keine Streams geschlossen.
Rückgabewert
flushall liefert die Gesamtzahl der offenen Ein- und Ausgabe-Streams als Integerwert zurück.
Siehe auch
fclose
fcloseall
fflush
fmod, fmodl
Syntax #include <math.h>
double fmod(double x, double y);
long double fmodl(long double x, long double y);
Beschreibung
Berechnet x Modulo y, den Rest der Division x/y.
fmod berechnet x Modulo y (den Rest f, wobei x = ay + f für einen Integer a und 0 <<= f << y gilt). fmodl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
fmod und fmodl liefern den Rest f, wobei x = ay + f gilt (wie beschrieben). Wenn y gleich 0 ist, liefern fmod und fmodl den Wert 0 zurück.
Siehe auch
ceil
floor
modf
fnmerge
Syntax #include <dir.h>
void fnmerge(char *path, const char *drive, const char *dir, const char
DDCHelp Hilfe zur Programmiersprache C Seite 217 von 606
*name, const char *ext);
Beschreibung
Erzeugt einen Pfadnamen aus einzelnen Komponenten.
fnmerge erzeugt einen Pfadnamen aus Einzelkomponenten und speichert ihn in dem durch path bezeichneten String.
Der neue Pfadname heißt
X:\DIR\SUBDIR\NAME.EXT
wobei gilt:
drive = X dir = \DIR\SUBDIR\ name = NAME ext = .EXT
fnmerge setzt voraus, dass der mit path übergebene String eine ausreichende Größe für den konstruierten Pfadnamen hat. Die Maximalgröße ist durch die in dir.h definierte Konstante MAXPATH festgelegt.
fnmerge und fnsplit verhalten sich invers zueinander. Die Anwendung von fnmerge auf die durch fnsplit ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.
Rückgabewert
Keiner.
Siehe auch
fnsplit
fnsplit
Syntax #include <dir.h>
int fnsplit(const char *path, char *drive, char *dir, char *name, char
*ext);
Beschreibung
Zerlegt einen vollständigen Pfadnamen in Einzelkomponenten.
fnsplit übernimmt einen vollständigen Dateinamen (Parameter path) als String in der Form
X:\DIR\SUBDIR\NAME.EXT
und zerlegt path in seine vier Einzelkomponenten. Diese werden dann in den durch drive, dir, name und ext bezeichneten Strings gespeichert. (Alle fünf Parameter müssen übergeben werden, einzelne davon dürfen aber NULL sein, was zur Folge hat, dass die zugehörige Komponente zwar analysiert, aber nicht gespeichert wird.)
Die Maximalgrößen aller beteiligten Strings (inklusive des abschließenden Nullzeichen \0) sind durch die Konstanten MAXDRIVE, MAXDIR, MAXPATH, MAXFILE und MAXEXT in dir.h festgelegt.
Konstante Max 16-bit Max 32-bit String
MAXPATH 80 260 path
MAXDRIVE 3 3 drive inklusive Doppelpunkt (:)
MAXDIR 66 256 dir inklusive führendem und abschließendem
umgekehrten Schrägstrich (\)
DDCHelp Hilfe zur Programmiersprache C Seite 218 von 606
MAXFILE 9 256 name
MAXEXT 5 256 ext inklusive führendem Punkt (.)
fnsplit unterstellt, dass die durch drive, dir, name und ext bezeichneten Strings eine ausreichende Größe haben, um jede Komponente zu speichern, die nicht NULL ist.
fnsplit verteilt die Interpunktionszeichen aus path in folgender Weise:
drive enthält den Laufwerksbezeichner mit einem Doppelpunkt (C:, A:, usw.);
dir enthält den führenden und den abschließenden umgekehrten Schrägstrich
(\INCLUDE\, \SOURCE\, usw.);
name enthält den Dateinamen;
ext enthält den Punkt, der die Namenserweiterung einleitet (.C, .EXE, usw.).
fnmerge und fnsplit verhalten sich invers zueinander. Die Anwendung von fnmerge auf die durch fnsplit ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.
Rückgabewert
fnsplit liefert einen Integerwert zurück, der sich aus fünf in dir.h definierten Flags zusammensetzt. Ein gesetztes Flag zeigt an, dass die zugehörige Komponente in path vorhanden war. Folgende Flags sind in dir.h definiert:
EXTENSION Eine Namenserweiterung
FILENAME Ein Dateiname
DIRECTORY Mindestens ein Verzeichnis
DRIVE Ein Laufwerksbezeichner
WILDCARDS Jokerzeichen (* und/oder ?)
Siehe auch
fnmerge
fopen
Syntax #include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
Beschreibung
Öffnet einen Stream.
fopen öffnet die durch filename bezeichnete Datei und ordnet ihr einen Stream zu. Zurückgeliefert wird ein Zeiger auf diesen Stream, über den weitere Operationen mit diesem Stream ausgeführt werden können.
Der Parameter mode kann einen der folgenden Werte annehmen:
Wert Beschreibung
r Öffnung ausschließlich für Leseoperationen.
w Erzeugung einer Datei für Schreiboperationen. Falls die Datei bereits existiert,
wird sie überschrieben.
a Öffnung für Schreiboperationen. Falls die Datei bereits existiert, werden
zusätzliche Informationen an das aktuelle Dateiende angefügt, ansonsten wird
sie automatisch erzeugt.
DDCHelp Hilfe zur Programmiersprache C Seite 219 von 606
r+ Öffnung einer Datei für Lese- und Schreiboperationen. Die Datei muss bereits
existieren.
w+ Erzeugung einer neuen Datei für Lese- und Schreiboperationen. Falls die Datei
bereits existiert, wird sie überschrieben.
a+ Öffnung einer Datei zum Lesen und Anhängen neuer Daten durch
Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt
erhalten - falls nicht, wird sie automatisch erzeugt.
Bei der Öffnung kann zusätzlich explizit angegeben werden, ob die Datei im Modus text (t) oder binary (b) bearbeitet werden soll. Die Angabe geschieht durch ein einfaches Anhängen des jeweiligen Buchstabens (also wb, w+b, rt, a+t etc.). Im Parameter mode kann bei fopen das Zeichen t bzw. b auch zwischen den Buchstaben und dem Pluszeichen eingefügt werden. So ist beispielsweise rt+ identisch mit r+t.
Wenn die Angabe b oder t im mode-String fehlt, wird der jeweilige Modus durch die globale Variable _fmode bestimmt, deren Wert über die direkte Zuweisung einer der in fcntl.h. definierten Konstanten O_TEXT oder O_BINARY festgelegt werden kann.
Mit r+ und w+ erzeugte Dateien können sowohl gelesen als auch beschrieben werden:
Zwischen einem Wechsel von "Schreiben" nach "Lesen" muss allerdings ein Aufruf von fseek
oder rewind stattfinden.
Zwischen einem Wechsel von "Lesen" nach "Schreiben" muss ebenfalls fseek oder rewind
stattfinden, es sei denn, die Leseoperation hat das Dateiende erreicht.
Rückgabewert
fopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream, im Falle eines Fehlers den Wert NULL zurück.
Siehe auch
creat
dup
fclose
fdopen
ferror
_fmode (global variable)
fread
freopen
fseek
fwrite
open
rewind
setbuf
setmode
FP_OFF, FP_SEG
Syntax #include <dos.h>
unsigned FP_OFF(void far *p);
unsigned FP_SEG(void far *p);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 220 von 606
Ermittelt den Offset- oder Segment-Anteil einer far-Adresse.
FP_OFF ist ein Makro, das den Offset-Anteil des far-Zeigers p ermittelt oder setzt.
FP_SEG ist ein Makro, das den Segment-Anteil des far-Zeigers p ermittelt oder setzt.
Rückgabewert
FP_OFF liefert den Offset-Anteil eines Zeigers als unsigned int zurück.
FP_SEG liefert den Segment-Anteil eines Zeigers als unsigned int zurück.
Siehe auch
MK_FP
movedata
segread
_fpreset
Syntax #include <float.h>
void _fpreset(void);
Beschreibung
Initialisiert die Gleitkommafunktionen neu.
_fpreset reinitialisiert die Gleitkommafunktionen und wird normalerweise zusammen mit system, exec... oder spawn... verwendet. Die Funktion wird außerdem bei Gleitkommafehlern vor dem Aufruf von longjmp eingesetzt.
Hinweis: Wird ein 80x87 Koprozessor im Programm verwendet, so kann ein Kindprozess (der
von system, exec... oder spawn... gestartet wurde) den Gleitkommastatus seines
Elternprozesses ändern.
Wenn ein 80x87 Koprozessor verwendet wird, sollten daher die folgenden Vorsichtsmaßnahmen
getroffen werden:
Die Funktionen system, exec... und spawn... dürfen nicht aufgerufen werden, während
ein Gleitkommaausdruck ausgewertet wird.
Nach Aufrufen von system, exec... und spawn... sollte der Gleitkommastatus mit
_fpreset zurückgesetzt werden, wenn die Möglichkeit besteht, dass der
Kindprozess Gleitkommaoperationen mit dem 80x87 durchgeführt hat.
Rückgabewert
Keiner.
Siehe auch
_clear87
_control87
_status87
DDCHelp Hilfe zur Programmiersprache C Seite 221 von 606
fprintf
Syntax #include <stdio.h>
int fprintf(FILE *stream, const char *format[, argument, ...]);
Beschreibung
Schreibt formatiert in einen Stream.
Hinweis: Weitere Details über Formatierungsanweisungen finden Sie unter printf.
fprintf übernimmt eine Folge von Argumenten, wendet auf jedes die im Formatstring (Parameter format) festgelegte Formatierungsanweisung an und schreibt die formatierten Daten in einen Stream. Die Anzahl der Formatierungsanweisungen und der Argumente muss übereinstimmen.
Rückgabewert
fprintf liefert bei fehlerfreier Ausführung die Anzahl der ausgegebenen Bytes, im Fehlerfall den Wert EOF zurück.
Siehe auch
cprintf
fscanf
printf
putc
sprintf
fputc
Syntax #include <stdio.h>
int fputc(int c, FILE *stream);
Beschreibung
Schreibt ein Zeichen in einen Stream.
fputc schreibt das Zeichen c in den durch stream angegebenen Stream.
Hinweis: In Win32 oder Win32s GUI-Anwendungen muss stdout umgelenkt werden.
Rückgabewert
fputc liefert das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.
Siehe auch
fgetc
putc
fputchar
Syntax #include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 222 von 606
int fputchar(int c);
Beschreibung
Schreibt ein Zeichen in stdout.
fputchar schreibt das Zeichen c in stdout und hat dieselbe Wirkung wie fputc(c, stdout).
Hinweis: In Win32 oder Win32s GUI-Anwendungen muss stdout umgelenkt werden.
Rückgabewert
fputchar liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.
Siehe auch
fgetchar
freopen
putchar
fputs
Syntax #include <stdio.h>
int fputs(const char *s, FILE *stream);
Beschreibung
Schreibt einen String in einen Stream.
fputs schreibt den nullterminierten String s in den angegebenen Ausgabe-Stream. Diese Funktion erzeugt keinen automatischen Zeilenvorschub am Ende der Ausgabe und das abschließende Nullzeichen (\0) wird nicht ausgegeben.
Rückgabewert
Bei fehlerfreier Ausführung liefert fputs das zuletzt geschriebene Zeichen (einen positiven Wert), im Falle eines Fehlers den Wert EOF zurück.
Siehe auch
fgets
gets
puts
fread
Syntax #include <stdio.h>
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
Beschreibung
Liest Daten aus einem Stream.
fread liest n Datenelemente, die jeweils die Größe size Bytes haben, aus dem angegebenen Stream in den Speicherbereich, auf den ptr zeigt.
DDCHelp Hilfe zur Programmiersprache C Seite 223 von 606
Es werden insgesamt (n * size) Bytes gelesen.
Rückgabewert
fread liefert bei fehlerfreier Ausführung die Anzahl der gelesenen Datenelemente (nicht Bytes) zurück. Im Falle eines Fehlers oder am Dateiende wird die Anzahl von Elementen (möglicherweise 0) zurückgeliefert, die noch fehlerfrei gelesen werden konnten.
Siehe auch
fopen
fwrite
printf
read
free
Syntax #include <stdlib.h>
void free(void *block);
Beschreibung
Gibt einen reservierten Speicherblock wieder frei.
free gibt einen zuvor mit calloc, malloc oder realloc reservierten Block wieder frei.
Rückgabewert
Keiner.
Siehe auch
calloc
malloc
realloc
strdup
freopen
Syntax #include <stdio.h>
FILE *freopen(const char *filename, const char *mode, FILE *stream);
Beschreibung
Ordnet einem offenen Stream eine neue Datei zu.
freopen ersetzt die zu stream gehörende, offene Datei durch die über den Parameter filename angegebene Datei. Dabei wird - unabhängig vom Erfolg des anschließenden Öffnens - der Stream in jedem Fall geschlossen. Meistens wird diese Funktion verwendet, um stdin, stdout und stderr eine andere Datei zuzuordnen.
Der Parameterstring mode kann einen der folgenden Werte annehmen:
DDCHelp Hilfe zur Programmiersprache C Seite 224 von 606
Wert Beschreibung
r Öffnung ausschließlich für Leseoperationen.
w Erzeugung einer Datei für Schreiboperationen.
a Öffnung für Schreiboperationen. Falls die Datei bereits existiert, werden zusätzliche
Informationen an das aktuelle Dateiende angefügt, ansonsten wird sie automatisch
erzeugt.
r+ Öffnung einer Datei für Lese- und Schreiboperationen. Die Datei muss bereits
existieren.
w+ Erzeugung einer neuen Datei für Lese- und Schreiboperationen.
a+ Öffnung einer Datei zum Lesen und Anhängen neuer Daten durch
Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt erhalten -
falls nicht, wird sie automatisch erzeugt.
Bei der Öffnung kann zusätzlich explizit angegeben werden, ob die Datei im Modus text (t) oder binary (b) bearbeitet werden soll. Die Angabe geschieht durch ein einfaches Anhängen des jeweiligen Buchstabens (also wb, w+b, rt, a+t etc.).Wenn sie fehlt, wird der jeweilige Modus durch die globale Variable _fmode bestimmt, deren Wert über die direkte Zuweisung einer der in fcntl.h definierten Konstanten O_TEXT oder O_BINARY festgelegt werden kann.
Mit r+ und w+ erzeugte Dateien können sowohl gelesen als auch beschrieben werden:
Zwischen einem Wechsel von "Schreiben" nach "Lesen" muss allerdings ein fseek oder rewind
stattfinden.
Zwischen einem Wechsel von "Lesen" nach "Schreiben" muss ebenfalls fseek oder rewind
stattfinden, es sei denn, die Leseoperation hat das Dateiende erreicht.
Rückgabewert
freopen liefert bei fehlerfreier Ausführung das Argument stream, im Fehlerfall den Wert NULL zurück.
Siehe auch
fclose
fdopen
fopen
open
setmode
frexp, frexpl
Syntax #include <math.h>
double frexp(double x, int *exponent);
long double frexpl(long double x, int *exponent);
Beschreibung
Ermittelt die Mantisse und den Exponenten einer Gleitkommazahl.
frexp berechnet zu x die Mantisse m (ein double-Wert, dessen absoluter Betrag größer/gleich 0.5 und kleiner als 1.0 ist) und den Integerwert n so, dass die Gleichung x = m * 2n gilt. Der Exponent n wird in dem Integer, auf den der Parameter exponent zeigt, gespeichert.
frexpl ist die long double Version. Sie erwartet für x ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 225 von 606
Rückgabewert
frexp und frexpl liefern die Mantisse m zurück. Die Fehlerbehandlung für frexp und frexpl kann über die Funktionen _matherr . _matherrl modifiziert werden.
Siehe auch
exp
ldexp
_matherr
fscanf
Syntax #include <stdio.h>
int fscanf(FILE *stream, const char *format[, address, ...]);
Beschreibung
Liest und formatiert Eingaben aus einem Stream.
fscanf liest eine Reihe von Eingabefeldern zeichenweise aus einem Stream. Entsprechend den Formatierungsanweisungen, die fscanf im Formatstring format übergeben wurden, wird jedes Feld gelesen, formatiert und an einer Adresse gespeichert, die nach format übergeben wurde. Die Anzahl der Formatierungsanweisungen, der übergebenen Adressen und der Eingabefelder müssen übereinstimmen.
Hinweis: Unter der Funktion scanf finden Sie eine ausführliche Beschreibung der Formatierungsanweisungen.
fscanf kann das Lesen eines bestimmten Eingabefeldes abbrechen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist. fscanf kann auch aus verschiedenen Gründen den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür werden unter scanf erläutert.
Rückgabewert
fscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück. Gelesene, aber nicht gespeicherte Felder werden nicht mitgezählt.
Der Versuch, über das Ende einer Datei hinauszulesen, ergibt den Wert EOF. Wenn überhaupt keine Felder gespeichert wurden, wird 0 zurückgeliefert.
Siehe auch
atof
cscanf
fprintf
printf
scanf
sscanf
vfscanf
vscanf
vsscanf
DDCHelp Hilfe zur Programmiersprache C Seite 226 von 606
fseek
Syntax #include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
Beschreibung
Setzt den Dateizeiger eines Streams auf eine neue Position.
fseek setzt den zu stream gehörenden Dateizeiger auf die neue Position, die offset Bytes von der durch whence angegebenen Dateiposition entfernt ist. Für Streams im Textmodus sollte offset 0 sein oder ein Wert, der von ftell geliefert wurde.
Die Art der Positionierung wird über drei in stdio.h definierte Konstanten für whence festgelegt:
Konstante whence DateipositionFile
SEEK_SET (Wert 0) Relativ zum Dateianfang
SEEK_CUR (Wert 1) Relativ zur aktuellen Position
SEEK_END (Wert 2) Relativ zum Dateiende
Mit ungetc zurückgestellte Zeichen sind nach fseek nicht mehr erreichbar. Benutzen Sie fseek für Stream-Ein-/Ausgabe und lseek für Datei-Handle-Ein-/Ausgabe.
In Dateien, die für Lese- und Schreiboperationen geöffnet worden sind, kann nach fseek zwischen "Lesen" und "Schreiben" gewechselt werden.
Rückgabewert
fseek liefert bei fehlerfreier Ausführung den Wert 0 zurück, ansonsten einen Wert ungleich null.
Es ist möglich, dass fseek 0 zurückliefert, obwohl bei der Ausführung der Funktion ein Fehler aufgetreten ist. Dies liegt daran, dass der Zeiger letztendlich von DOS gesetzt und das Ergebnis der Positionierung nichtüberprüft wird. fseek gibt nur für ungeöffnete Dateien oder Geräte einen Fehlercode zurück.
Im Fehlerfall wird die globale Variable errno auf einen der folgenden Werte gesetzt:
EBADF Ungültiger Dateizeiger
EINVAL Ungültiges Argument
ESPIPE Suche auf diesem Gerät nicht möglich
Siehe auch
fgetpos
fopen
fsetpos
ftell
lseek
rewind
setbuf
tell
fsetpos
Syntax #include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 227 von 606
int fsetpos(FILE *stream, const fpos_t *pos);
Beschreibung
Positioniert den Dateizeiger eines Stream.
fsetpos setzt den Dateizeiger von stream auf eine neue Position. Die neue Position ist der Wert, der durch einen vorherigen Aufruf von fgetpos für diesen Stream ermittelt wurde. Das zum Stream gehörende Dateiende-Flag wird gelöscht, zuvor mit ungetc zurückgestellte Zeichen sind nach dieser Operation nicht mehr verfügbar.
Die nächste Operation nach einem Aufruf von fsetpos kann sowohl eine Lese- als auch eine Schreiboperation sein.
Rückgabewert
fsetpos liefert bei fehlerfreier Ausführung den Wert 0 zurück. Im Fehlerfall wird ein Wert ungleich null zurückgeliefert und die globale Variable errno wird auf einen Wert ungleich null gesetzt.
Siehe auch
fgetpos
fseek
ftell
_fsopen
Syntax #include <stdio.h>
#include <share.h>
FILE *_fsopen(const char *filename, const char *mode, int shflag);
Beschreibung
Öffnet einen Stream für gemeinsamen Zugriff.
_fsopen öffnet die durch filename angegebene Datei und ordnet ihr einen Stream zu. _fsopen liefert einen Zeiger zurück, über den bei anschließenden Operationen auf den Stream zugegriffen werden kann.
Der Parameterstring mode kann einen der folgenden Werte annehmen:
Wert Beschreibung
r Öffnung ausschließlich für Leseoperationen.
w Erzeugung einer Datei für Schreiboperationen.
a Öffnung für Schreiboperationen. Falls die Datei bereits existiert, werden
zusätzliche Informationen an das aktuelle Dateiende angefügt, ansonsten wird
sie automatisch erzeugt.
r+ Öffnung einer Datei für Lese- und Schreiboperationen. Die Datei muss bereits
existieren.
w+ Erzeugung einer neuen Datei für Lese- und Schreiboperationen. Existiert
bereits eine Datei des angegebenen Namens, wird sie überschrieben.
a+ Öffnung einer Datei zum Lesen und Anhängen neuer Daten durch
Schreiboperationen. Falls die Datei bereits existiert, bleibt ihr alter Inhalt
erhalten - falls nicht, wird sie automatisch erzeugt.
Bei der Öffnung kann zusätzlich explizit angegeben werden, ob die Datei im Modus text (t) oder binary (b) bearbeitet werden soll. Die Angabe geschieht durch ein einfaches Anhängen des
DDCHelp Hilfe zur Programmiersprache C Seite 228 von 606
jeweiligen Buchstabens (also wb, w+b, rt, a+t etc.). Wenn sie fehlt, wird der jeweilige Modus durch die globale Variable _fmode bestimmt, deren Wert über die direkte Zuweisung einer der in fcntl.h definierten Konstanten O_TEXT oder O_BINARY festgelegt werden kann.
Mit r+ und w+ erzeugte Dateien können sowohl gelesen als auch beschrieben werden:
Zwischen einem Wechsel von "Schreiben" nach "Lesen" muss allerdings ein fseek oder rewind stattfinden.
Zwischen einem Wechsel von "Lesen" nach "Schreiben" muss ebenfalls fseek oder rewind stattfinden, es sei denn, die Leseoperation hat das Dateiende erreicht.
shflag legt den Typ des gemeinsamen Zugriffs fest, der für Datei filename zugelassen werden soll. Der DOS-Befehl SHARE muss ausgeführt worden sein, damit shflag nicht ignoriert wird. Die symbolischen Konstanten für shflag sind in share.h definiert:
Wert von shflag Beschreibung
SH_COMPAT Setzt Kompatibilitätsmodus
SH_DENYRW Lesen und Schreiben nicht erlaubt
SH_DENYWR Schreiben nicht erlaubt
SH_DENYRD Lesen nicht erlaubt
SH_DENYNONE Lesen und Schreiben erlaubt
SH_DENYNO Lesen und Schreiben erlaubt
Rückgabewert
_fsopen liefert bei fehlerfreier Ausführung einen Zeiger auf den neu geöffneten Stream, im Fehlerfall NULL zurück.
Siehe auch
creat
_dos_open
dup
fclose
fdopen
ferror
_fmode (global variable)
fopen
fread
freopen
fseek
fwrite
open
rewind
setbuf
setmode
sopen
DDCHelp Hilfe zur Programmiersprache C Seite 229 von 606
fstat, stat
Syntax #include <sys\stat.h>
int fstat(int handle, struct stat *statbuf);
int stat(char *path, struct stat *statbuf);
Beschreibung
Liefert Informationen über eine offene Datei.
fstat speichert in der Struktur des Typs stat Informationen über die offene Datei oder das Verzeichnis, die bzw. das mit handle angegeben ist.
Die Funktion stat speichert Informationen über die angegebene Datei oder das Verzeichnis in einer Struktur des Typs stat. Der Dateiname wird durch den Parameter path angegeben.
statbuf zeigt auf eine stat-Struktur, die in sys\stat.h definiert ist und folgende Felder enthält:
st_mode Bitmuster mit Informationen über den Modus der Datei
st_dev Nummer des Laufwerks, das die Datei enthält, oder ein Datei-Handle, wenn die
Datei
auf einem Gerät ist
st_rdev wie st_dev.
st_nlink immer eine Integerkonstante mit dem Wert 1
st_size Größe der Datei in Bytes
st_atime Datum/Uhrzeit des letzten Zugriffs (Windows) oder der letzten Änderung (DOS)
st_mtime wie st_atime
st_ctime wie st_atime
Der Strukturtyp stat enthält noch drei weitere Felder, die hier nicht aufgeführt sind, da die darin enthaltenen Werte nur unter UNIX von Bedeutung sind.
Das Bitmuster st_mode setzt sich aus mehreren Einzelinformationen zusammen, die in sys\stat.h als Bit-Konstanten definiert sind.
Eines dieser beiden Bits ist gesetzt:
S_IFCHR Wenn handle sich auf ein Gerät bezieht;
S_IFREG Wenn es sich um eine reguläre Datei handelt.
Eines oder beide der folgenden Bits ist/sind gesetzt:
S_IWRITE Wenn der Benutzer Schreiberlaubnis hat;
S_IREAD Wenn der Benutzer Leseerlaubnis hat.
Die Dateisysteme HPFS und NTFS machen zusätzlich folgende Unterschiede:
st_atime Zeitpunkt des letzten Zugriffs
st_mtime Zeitpunkt der letzten Änderung
st_ctime Zeitpunkt, zu dem die Datei angelegt wurde
Rückgabewert
fstat und stat liefern den Wert 0 zurück, wenn sie die Informationen über die offene Datei erfolgreich ermitteln konnten. Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf folgenden Wert gesetzt:
EBADF Ungültiges Handle
Siehe auch
access
DDCHelp Hilfe zur Programmiersprache C Seite 230 von 606
chmod
Beispiel
fstat
stat
_fstr*
Syntax #include <string.h>
__far Stringfunktionen
Beschreibung
far-Stringfunktionen
Ist der Rückgabewert einer far-Stringfunktion vom Typ int oder size_t, wird er nicht vom Schlüsselwort far modifiziert.
Im Abschnitt Siehe auch weiter unten finden Sie eine Liste der String-Funktionen, zu denen eine far-Version gibt. Der far-Version einer String-Funktion wird die Namenserweiterung _fstr vorangestellt. Die far-Versionen verhalten sich genau wie die entsprechenden Standardversionen mit der einen Ausnahme, dass Parameter und Rückgabewert (sofern er vom Typ char far * ist) durch das Schlüsselwort far modifiziert werden. In der Beschreibung der Standardfunktion ist die jeweilige far-Version enthalten.
Rückgabewert
Ist der Rückgabewert der Standardfunktion ein char-Zeiger, so gibt die _fstr-Version einen charfar-Zeiger zurück.
Hinweis: Wenn eine far-Version einer String-Funktion ein Resultat vom Typ int oder size_t
liefert, so wird dieser Rückgabewert niemals durch das far-Schlüsselwort modifiziert.
Siehe auch
strcat
strchr
strcmp
strcpy
strcspn
strdup
stricmp
strlen
strlwr
strncat
strncmp
strncpy
strnicmp
strnset
strpbrk
strrchr
strrev
DDCHelp Hilfe zur Programmiersprache C Seite 231 von 606
strset
strspn
strstr
strtok
strupr
ftell
Syntax #include <stdio.h>
long int ftell(FILE *stream);
Beschreibung
Liefert den aktuellen Dateizeiger.
ftell liefert den aktuellen Dateizeiger von stream zurück. Die Position wird relativ zum Dateianfang in Bytes gemessen (falls es sich um eine Binärdatei handelt). Der von ftell zurückgelieferte Wert kann bei einem nachfolgenden Aufruf von fseek verwendet werden.
Rückgabewert
ftell liefert bei fehlerfreier Ausführung die aktuelle Position des Dateizeigers zurück. Im Fehlerfall ist der Rückgabewert -1L und die globale Variable errno wird auf einen der beiden folgenden Werte gesetzt:
EBADF Ungültiger Dateizeiger
EINVAL Suche auf diesem Gerät nicht möglich
Siehe auch
fgetpos
fseek
fsetpos
lseek
rewind
tell
ftime
Syntax #include <sys\timeb.h>
void ftime(struct timeb *buf)
Beschreibung
Speichert die Systemzeit in einer Struktur des Typs timeb.
Unter UNIX ist ftime nur unter System V verfügbar.
ftime ermittelt die aktuelle Systemzeit und speichert sie in den Feldern der durch buf bezeichneten timeb-Struktur. Der Strukturtyp timeb enthält die vier Felder time, millitm, timezone und dstflag:
struct timeb {
long time;
DDCHelp Hilfe zur Programmiersprache C Seite 232 von 606
short millitm;
short timezone;
short dstflag;
};
time ist die Zeit in Sekunden seit dem 1.1.1970 00:00:00 GMT (Greenwich Mean Time).
millitm ist der Bruchteil einer Sekunde in Millisekunden
_timezone ist der lokale Zeitunterschied zur GMT in Minuten. Der Zeitunterschied zur GMT wird
über die globale Variable _timezone berechnet, deren Wert durch tzset gesetzt wird.
dstflag gibt an, ob in der aktuellen Zeitzone eine Verschiebung durch die Sommerzeit
berücksichtigt wird.
Hinweis: Da ftime die Funktion tzset aufruft, ist es nicht nötig, vorher tzset explizit aufzurufen.
Rückgabewert
Keiner.
Siehe auch
asctime
ctime
gmtime
localtime
stime
time
tzset
_fullpath
Syntax #include <stdlib.h>
char * _fullpath(char *buffer, const char *path, int buflen);
Beschreibung
Konvertiert einen relativen Pfadnamen in einen absoluten.
_fullpath konvertiert den relativen Pfadnamen in path in einen absoluten Pfadnamen. Dieser wird in dem Zeichen-Array gespeichert, auf das buffer zeigt. buflen gibt an, wie viele Zeichen in buffer gespeichert werden können. _fullpath liefert NULL zurück, wenn der Puffer nicht groß genug für den absoluten Pfadnamen ist oder der Pfad eine ungültige Laufwerksangabe enthält.
Wenn buffer NULL ist, reserviert _fullpath einen Puffer mit bis zu _MAX_PATH Zeichen. Dieser Puffer sollte durch einen Aufruf von free freigegeben werden, wenn er nicht mehr benötigt wird. Die Konstante _MAX_PATH ist in stdlib.h definiert.
Rückgabewert
Bei fehlerfreier Ausführung liefert _fullpath einen Zeiger auf den Puffer zurück, der den absoluten Pfadnamen enthält. Andernfalls ist das Ergebnis NULL.
Siehe auch
_makepath
_splitpath
DDCHelp Hilfe zur Programmiersprache C Seite 233 von 606
fwrite
Syntax #include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
Beschreibung
Schreibt Daten in einen Stream.
fwrite fügt n Datenelemente der Größe size Bytes an die durch stream gegebene Datei an. Die zu schreibenden Daten beginnen bei der Adresse, auf die ptr zeigt. Es werden n * size Bytes geschrieben. ptr kann auf beliebige Objekte zeigen.
Rückgabewert
fwrite liefert bei fehlerfreier Ausführung die Anzahl der geschriebenen Datenelemente (nicht Bytes) zurück. Im Fehlerfall wird die Anzahl der Datenelemente zurückgeliefert, die noch fehlerfrei geschrieben werden konnten.
Siehe auch
fopen
fread
gcvt
Syntax #include <stdlib.h>
char *gcvt(double value, int ndec, char *buf);
Beschreibung
Konvertiert eine Gleitkommazahl in einen String.
gcvt konvertiert value in einen nullterminierten ASCII-String, der in buf gespeichert wird. Die Funktion versucht, ndec signifikante Ziffern im F-Format von FORTRAN zu erzeugen. Wenn dies nicht möglich ist, liefert sie den Wert im E-Format von printf (druckfertig formatiert). Abschließende Nullen werden möglicherweise unterdrückt.
Rückgabewert
gcvt liefert die Adresse des durch buf bezeichneten Strings zurück.
Siehe auch
ecvt
fcvt
sprintf
DDCHelp Hilfe zur Programmiersprache C Seite 234 von 606
geninterrupt
Syntax #include <dos.h>
void geninterrupt(int intr_num);
Beschreibung
Erzeugt einen Software-Interrupt.
Das Makro geninterrupt löst einen Software-Interrupt für den Interrupt intr_num aus. Der Zustand der Register nach dem Aufruf hängt von dem aufgerufenen Interrupt ab.
Interrupts können Register in einem nicht vorhersehbaren Zustand zurücklassen.
Rückgabewert
Keiner.
Siehe auch
bdos
bdosptr
disable
enable
getvect
int86
int86x
intdos
intdosx
intr
getc
Syntax #include <stdio.h>
int getc(FILE *stream);
Beschreibung
Liest ein Zeichen aus einem Stream.
getc gibt das nächste Zeichen aus dem gegebenen Eingabe-Stream zurück und erhöht den
Dateizeiger des Streams entsprechend, dass dieser auf das nächste Zeichen zeigt.
Hinweis: In Win32 oder Win32s GUI-Anwendungen muss stdin umgelenkt werden.
Rückgabewert
getc liefert bei fehlerfreier Ausführung das gelesene Zeichen als int ohne Vorzeichenerweiterung zurück. Am Dateiende oder im Fehlerfall liefert die Funktion EOF zurück.
Siehe auch
fgetc
getch
getchar
DDCHelp Hilfe zur Programmiersprache C Seite 235 von 606
getche
gets
putc
putchar
ungetc
getcbrk
Syntax #include <dos.h>
int getcbrk(void);
Beschreibung
Ermittelt, ob DOS auf [Strg][Untbr] prüft.
getcbrk verwendet den DOS-Systemaufruf 0x33, um zu ermitteln, wann DOS auf [Strg][Untbr] prüft.
Rückgabewert
getcbrk liefert 0, wenn die Überprüfung abgeschaltet ist, ansonsten den Wert 1 zurück.
Siehe auch
ctrlbrk
setcbrk
getch
Syntax #include <conio.h>
int getch(void);
Beschreibung
Liest ein Zeichen von der Tastatur, ohne es auf dem Bildschirm auszugeben.
getch liest ein einzelnes Zeichen von der Tastatur, ohne es als "Echo" am Bildschirm auszugeben.
Hinweis: Diese Funktion sollte in Win32 oder Win32s GUI-Anwendungen nicht verwendet
werden.
Rückgabewert
getch liefert das von der Tastatur gelesene Zeichen zurück.
Siehe auch
cgets
cscanf
fgetc
getc
getchar
getche
getpass
DDCHelp Hilfe zur Programmiersprache C Seite 236 von 606
kbhit
putch
ungetch
getchar
Syntax #include <stdio.h>
int getchar(void);
Beschreibung
Liest ein Zeichen aus stdin.
getchar ist ein Makro, das das jeweils nächste Zeichen aus dem Eingabe-Stream stdin liest und zurückliefert. Es ist definiert als getc(stdin).
Hinweis: In Win32s oder Win32 GUI-Anwendungen muss stdin umgelenkt werden.
Rückgabewert
getchar liefert bei fehlerfreier Ausführung das gelesene Zeichen als int-Wert ohne Vorzeichenerweiterung zurück. Am Dateiende oder im Fehlerfall liefert die Funktion EOF zurück.
Siehe auch
fgetc
fgetchar
freopen
getc
getch
getche
gets
putc
putchar
scanf
ungetc
getche
Syntax #include <conio.h>
int getche(void);
Beschreibung
Liest ein Zeichen von der Tastatur und gibt es auf dem Bildschirm aus.
getche liest ein einzelnes Zeichen von der Tastatur und gibt dieses Zeichen auf dem Bildschirm in das aktuelle Textfenster aus. getche schreibt direkt in den Bildschirmspeicher oder benutzt BIOS-Routinen.
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet
werden.
DDCHelp Hilfe zur Programmiersprache C Seite 237 von 606
Rückgabewert
getche liefert das von der Tastatur gelesene Zeichen zurück.
Siehe auch
cgets
cscanf
fgetc
getc
getch
getchar
kbhit
putch
ungetch
getcurdir
Syntax #include <dir.h>
int getcurdir(int drive, char *directory);
Beschreibung
Ermittelt das aktuelle Verzeichnis eines Laufwerks.
getcurdir ermittelt das aktuelle Verzeichnis auf dem durch drive angegebenen Laufwerk. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk verwendet, ansonsten gilt A = 1, B = 2 usw. directory zeigt auf einen Speicherbereich der Größe MAXDIR - hier trägt getcurdir den nullterminierten Namen des ermittelten Verzeichnisses ein (ohne führenden Backslash und ohne Laufwerksbezeichner).
Rückgabewert
Bei fehlerfreier Ausführung liefert getcurdir den Wert 0, im Fehlerfall -1 zurück.
Siehe auch
chdir
getcwd
getdisk
mkdir
rmdir
getcwd
Syntax #include <dir.h>
char *getcwd(char *buf, int buflen);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 238 von 606
Ermittelt das aktuelle Arbeitsverzeichnis.
getcwd speichert den vollständigen Pfadnamen des aktuellen Arbeitsverzeichnisses (inklusive des Laufwerks) als String an der durch buf bezeichneten Adresse. Die Maximallänge des Pfadnamens wird durch den Parameter buflen begrenzt. Ist der vollständige Pfadname einschließlich des abschließenden Nullzeichens länger als buflen Bytes, so wird ein Fehler erzeugt.
Wenn der als buf übergebene Zeiger den Wert NULL hat, reserviert getcwd über einen Aufruf von malloc selbständig einen Bereich von buflen Bytes. Später können Sie diesen reservierte Speicherbereich wieder freigegeben, indem Sie der Funktion free den Rückgabewert von getcwd übergeben.
Rückgabewert
getcwd liefert folgende Werte zurück:
Ist buf bei der Eingabe ungleich NULL, wird bei fehlerfreier Ausführung buf, im Fehlerfall NULL
zurückgeliefert.
Ist buf bei der Eingabe gleich NULL, liefert getcwd bei fehlerfreier Ausführung einen Zeiger auf
den reservierten Puffer zurück.
Im Fehlerfall wird errno auf einen der folgenden Werte gesetzt:
ENODEV Gerät nicht bereit/nicht vorhanden
ENOMEM Nicht genug Platz im Hauptspeicher (buf gleich NULL)
ERANGE Verzeichnisname länger als buflen (buf ungleich NULL)
Siehe auch
chdir
getcurdir
_getdcwd
getdisk
mkdir
rmdir
_getdcwd
Syntax #include <direct.h>
char * _getdcwd(int drive, char *buffer, int buflen);
Beschreibung
Liefert das aktuelle Arbeitsverzeichnis des angegebenen Laufwerks.
_getdcwd liefert den vollständigen Pfadnamen des Arbeitsverzeichnisses im angegebenen Laufwerk (einschließlich des Laufwerknamens) als String in buffer zurück, dessen Maximallänge durch den Parameter buflen gesetzt wird. Ist der vollständige Pfadname einschließlich des abschließenden Nullzeichens länger als buflen Bytes, so wird ein Fehler erzeugt. Für den Parameter drive gilt: 0 = aktuelles Laufwerk, 1 = A, 2 = B, etc.
Wenn der als buffer übergebene Zeiger den Wert NULL hat, reserviert _getdcwd einen Puffer von mindestens buflen Bytes. Später kann dieser Speicherbereich durch Übergabe des Rückgabewerts von _getdcwd an die Funktion free wieder freigegeben werden.
Rückgabewert
_getdcwd liefert bei fehlerfreier Ausführung einen Zeiger auf den Puffer zurück, der den Namen des aktuellen Verzeichnisses im angegebenen Laufwerk enthält. Im Fehlerfall liefert _getdcwd den
DDCHelp Hilfe zur Programmiersprache C Seite 239 von 606
Wert NULL und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
ENOMEM Nicht genug Platz im Hauptspeicher (buffer ist NULL)
ERANGE Verzeichnisname ist länger als buflen (buffer ist ungleich NULL)
Siehe auch
chdir
getcwd
mkdir
rmdir
getdfree
Syntax #include <dos.h>
void getdfree(unsigned char drive, struct dfree *dtable);
Beschreibung
Ermittelt den freien Platz auf einer Diskette/Festplatte.
getdfree ermittelt Informationen über das durch den Parameter drive angegebene Laufwerk und speichert sie in einer Struktur des Typs dfree. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk bearbeitet, ansonsten gilt A = 1, B = 2 usw.
Der Strukturtyp dfree ist folgendermaßen definiert:
struct dfree {
unsigned df_avail; /* freie Cluster */
unsigned df_total; /* Gesamtzahl Cluster */
unsigned df_bsec; /* Bytes pro Sektor */
unsigned df_sclus; /* Sektoren pro Cluster */
};
Rückgabewert
getdfree liefert keinen Wert zurück. Im Fehlerfall wird das Element df_sclus auf (unsigned) -1 gesetzt.
Siehe auch
getfat
getfatd
getdisk, setdisk
Syntax #include <dir.h>
int getdisk(void);
int setdisk(int drive);
Beschreibung
Ermittelt oder setzt die aktuelle Laufwerksnummer.
getdisk liefert die Nummer des aktuellen Laufwerks als Integer zurück: 0 entspricht Laufwerk A, 1
DDCHelp Hilfe zur Programmiersprache C Seite 240 von 606
entspricht Laufwerk B usw. setdisk setzt das aktuelle Laufwerk auf die Nummer in drive: 0 entspricht Laufwerk A, 1 entspricht Laufwerk B usw.
Rückgabewert
getdisk liefert die aktuelle Laufwerksnummer zurück. setdisk liefert die Anzahl der verfügbaren Laufwerke zurück.
Siehe auch
getcurdir
getcwd
Beispiel
getdisk
setdisk
getdta
Syntax #include <dos.h>
char far *getdta(void);
Beschreibung
Liefert die Adresse der aktuellen DTA zurück.
getdta liefert die aktuelle disk transfer address (DTA).
In den Speichermodellen Small und Medium geht der Compiler im Allgemeinen davon aus, dass sich die DTA im aktuellen Datensegment befindet. Solange ausschließlich mit C oder C++ gearbeitet wird, ist das auch der Fall - von Routinen in Maschinensprache kann die DTA aber auf eine beliebige Adresse gesetzt werden.
In den Speichermodellen Compact und Large liefert getdta die korrekte Adresse zurück, die sich auch außerhalb der Programmsegmente befinden kann.
Rückgabewert
getdta liefert einen Zeiger auf die aktuelle DTA zurück.
Siehe auch
fcb (structure)
setdta
getenv
Syntax #include <stdlib.h>
char *getenv(const char *name);
Beschreibung
Ermittelt den Wert einer Umgebungsvariable.
DDCHelp Hilfe zur Programmiersprache C Seite 241 von 606
getenv liefert den Wert der durch den Parameter name angegebenen Umgebungsvariable zurück. Unter DOS und OS/2 muss name in Großbuchstaben vorliegen, in anderen Systemen kann er entweder in Groß- oder Kleinbuchstaben geschrieben sein. name darf das Gleichheitszeichen (=) nicht enthalten. Existiert die angegebene Umgebungsvariable nicht, so liefert getenv einen NULL-Zeiger zurück.
Über den Aufruf getenv("name=") kann eine Umgebungsvariable gelöscht werden.
Hinweis: Umgebungsvariablen dürfen nicht direkt geändert werden. Wenn ein bestimmter Wert
geändert werden soll, muss putenv verwendet werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert getenv den Wert zurück, der der Variablen zugeordnet ist. Falls die angegebene Variable name nicht existiert, so liefert getenv einen NULL-Zeiger zurück.
Siehe auch
_environ (global variable)
getpsp
putenv
getfat
Syntax #include <dos.h>
void getfat(unsigned char drive, struct fatinfo *dtable);
Beschreibung
Ermittelt Informationen über die FAT des angegebenen Laufwerks.
getfat füllt die mit dtable angegebene Struktur des Typs fatinfo mit Informationen über die FAT (File Allocation Table) des Laufwerks drive. Wenn drive den Wert 0 hat, wird das aktuelle Laufwerk benutzt, ansonsten gilt A = 1, B = 2 usw. Der Strukturtyp fatinfo ist folgendermaßen definiert:
struct fatinfo {
char fi_sclus; /* Sektoren pro Cluster */
char fi_fatid; /* FAT ID-Byte */
unsigned fi_nclus; /* Gesamtzahl Cluster */
int fi_bysec; /* Bytes pro Sektor */
};
Rückgabewert
Keiner.
Siehe auch
getdfree
getfatd
getfatd
Syntax #include <dos.h>
DDCHelp Hilfe zur Programmiersprache C Seite 242 von 606
void getfatd(struct fatinfo *dtable);
Beschreibung
Ermittelt Informationen über die FAT des aktuellen Laufwerks.
getfatd füllt die über dtable angegebene Struktur des Typs fatinfo mit Informationen über die FAT des Datenträgers im aktuellen Laufwerk. Der Strukturtyp fatinfo ist folgendermaßen definiert:
struct fatinfo {
char fi_sclus; /* Sektoren pro Cluster */
char fi_fatid; /* FAT ID-Byte */
int fi_nclus; /* Gesamtzahl Cluster */
int fi_bysec; /* Bytes pro Sektor */
};
Rückgabewert
Keiner.
Siehe auch
getdfree
getfat
getftime, setftime
Syntax #include <io.h>
int getftime(int handle, struct ftime *ftimep);
int setftime(int handle, struct ftime *ftimep);
Beschreibung
Liest und setzt Datum und Uhrzeit einer Datei.
getftime ermittelt Datum und Uhrzeit der durch handle bezeichneten offenen Datei und speichert die entsprechenden Werte in der durch ftimep angegebenen ftime-Struktur.
setftime setzt Datum und Uhrzeit der durch handle bezeichneten offenen Datei auf die Werte der ftime-Struktur, auf die ftimep zeigt. Nach dem Aufruf von setftime darf nicht in die Datei geschrieben werden, da die geänderten Daten ansonsten verloren gehen. Die Datei muss für Schreibzugriffe geöffnet worden sein, da ansonsten der Fehler EACCES auftritt.
Der Strukturtyp ftime ist folgendermaßen definiert:
struct ftime {
unsigned ft_tsec: 5; /* Zwei Sekunden */
unsigned ft_min: 6; /* Minuten */
unsigned ft_hour: 5; /* Stunden */
unsigned ft_day: 5; /* Tage */
unsigned ft_month: 4; /* Monate */
unsigned ft_year: 7; /* Jahr - 1980 */
};
Rückgabewert
getftime und setftime liefern bei fehlerfreier Ausführung den Wert 0.
Im Fehlerfall wird der Wert -1 zurückgeliefert und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht erlaubt
EBADF Ungültiges Handle
EINVFNC Ungültige Funktionsnummer
DDCHelp Hilfe zur Programmiersprache C Seite 243 von 606
Siehe auch
fflush
open
setftime
Beispiele
getftime
setftime
_get_osfhandle
Syntax #include <io.h>
long _get_osfhandle(int filehandle);
Beschreibung
Verbindet Datei-Handles.
_get_osfhandle verbindet ein Datei-Handle des Betriebssystems mit einem existierenden Laufzeit-Datei-Handle. Der Parameter filehandle ist ein Datei-Handle Ihres Programms.
Rückgabewert
Bei erfolgreicher Ausführung liefert _get_osfhandle ein Datei-Handle des Betriebssystems zurück, das filehandle entspricht. Andernfalls wird der Wert -1 zurückgeliefert und errno wird auf EBADF (ungültiges Handle) gesetzt
Siehe auch
fdopen
fileno
_open_osfhandle
getpass
Syntax #include <conio.h>
char *getpass(const char *prompt);
Beschreibung
Liest ein Passwort.
getpass gibt den durch prompt bezeichneten nullterminierten String aus und erwartet die Eingabe eines Passworts über die Tastatur. Die vom Benutzer eingegebenen Zeichen werden nicht auf dem Bildschirm dargestellt. Der String hat eine Maximallänge von acht Zeichen (wobei das abschließende Nullzeichen nicht mitgezählt wird).
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet
werden.
DDCHelp Hilfe zur Programmiersprache C Seite 244 von 606
Rückgabewert
getpass liefert einen Zeiger auf einen statischen String zurück, der durch jeden erneuten Aufruf überschrieben wird.
Bei erfolgreicher Ausführung liefert _get_osfhandle ein Datei-Handle des Betriebssystems zurück, das filehandle entspricht. Andernfalls wird der Wert -1 zurückgeliefert und errno wird auf EBADF (ungültiges Handle) gesetzt
Siehe auch
getch
getpid
Syntax #include <process.h>
unsigned getpid(void)
Beschreibung
Liefert die Prozess-ID eines Programms.
Diese Funktion liefert die aktuelle Prozess-ID zurück. Die Prozess-ID ist ein Integerwert, der einen Prozess eindeutig kennzeichnet.
Rückgabewert
getpid liefert die Prozess-ID des aktuellen Prozesses zurück.
Siehe auch
getpsp
getpsp
Syntax #include <dos.h>
unsigned getpsp(void);
Beschreibung
Liefert die Adresse des Programmsegment-Präfix (PSP).
getpsp verwendet den DOS-Funktionsaufruf 0x62, um die Segmentadresse des Programmsegment-Präfix (PSP) zu ermitteln.
Rückgabewert
getpsp liefert die Segmentadresse des PSP zurück.
Siehe auch
getenv
_psp (global variable)
DDCHelp Hilfe zur Programmiersprache C Seite 245 von 606
gets
Syntax #include <stdio.h>
char *gets(char *s);
Beschreibung
Liest einen String aus stdin.
gets liest einen String aus dem Standardeingabe-Stream stdin und speichert sie in der durch s angegebenen Stringvariablen. Die Eingabe wird durch einen Zeilenvorschub beendet, der ins als Nullzeichen (\0) gespeichert wird.
Eingabestrings dürfen bestimmte Whitespace-Zeichen (Leerzeichen, Tabs) enthalten. gets kehrt zurück, wenn ein Zeilenvorschub gelesen wird; der String bis zu diesem Zeilenvorschub wird in s gespeichert.
Hinweis: In Win32 oder Win32s GUI-Anwendungen muss stdin umgelenkt werden.
Rückgabewert
gets liefert bei fehlerfreier Ausführung die Stringvariable s zurück. Im Fehlerfall oder wenn beim Lesen das Dateiende überschritten wird, ist der Rückgabewert NULL.
Siehe auch
cgets
ferror
fgets
fopen
fputs
fread
freopen
getc
puts
scanf
gettext
Syntax #include <conio.h>
int gettext(int links, int oben, int rechts, int unten, void *destin);
Beschreibung
Kopiert Text vom Textbildschirm in den Speicher.
gettext speichert den Inhalt eines rechteckigen Textbildschirmausschnitts in dem Speicherbereich, auf den destin zeigt. Die linke obere Ecke des Ausschnitts ist durch (links, oben), die rechte untere Ecke durch (unten, rechts) festgelegt.
Die Funktion arbeitet unabhängig von einem eventuell definierten Textfenster mit absoluten Bildschirmkoordinaten, wobei die obere linke Koordinatenecke mit (1,1) angesprochen wird.
Der Inhalt des Rechtecks wird von gettext sequentiell von links nach rechts und von oben nach unten in den Speicher eingelesen.
DDCHelp Hilfe zur Programmiersprache C Seite 246 von 606
Jede Bildschirmposition benötigt zwei Bytes Speicherplatz: Das erste Byte ist das Zeichen selbst, das zweite das Video-Attribut an der jeweiligen Position. Der benötigte Speicherplatz für ein Rechteck mit w Spalten und h Zeilen ergibt sich aus:
Bytes = (h Zeilen) * (w Spalten) * 2
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet
werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert gettext den Wert 1, im Fehlerfall (wenn Sie z.B. Koordinaten außerhalb des aktuellen Bildschirmmodus angegeben haben) 0 zurück.
Siehe auch
movetext
puttext
gettextinfo
Syntax #include <conio.h>
void gettextinfo(struct text_info *r);
Beschreibung
Ermittelt Informationen über den aktuellen Textmodus.
gettextinfo füllt die Elemente der mit r übergebenen Struktur des Typs text_info mit den aktuellen Parametern für Textausgaben.
Der Strukturtyp text_info ist in conio.h folgendermaßen definiert:
struct text_info {
unsigned char winleft; /* linke Fensterkoordinate */
unsigned char wintop; /* obere Fensterkoordinate */
unsigned char winright; /* rechte Fensterkoordinate */
unsigned char winbottom; /* untere Fensterkoordinate */
unsigned char attribute; /* Textattribut */
unsigned char normattr; /* normales Attribut */
unsigned char currmode; /* BW40, BW80, C40, C80 oder C4350 */
unsigned char screenheight; /* Höhe des Textfensters */
unsigned char screenwidth; /* Breite des Textfensters */
unsigned char curx, /* Cursorposition im */
unsigned char cury; /* aktuellen Fenster */
};
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet
werden.
Rückgabewert
Keiner. Die Ergebnisse werden in der Struktur, auf die r zeigt, zurückgeliefert.
Siehe auch
textattr
textbackground
textcolor
textmode
DDCHelp Hilfe zur Programmiersprache C Seite 247 von 606
wherex
wherey
window
gettime, settime
Syntax #include <dos.h>
void gettime(struct time *timep);
void settime(struct time *timep);
Beschreibung
Lesen und Setzen der Systemzeit.
gettime liefert in der über timep angegebenen Struktur des Typs time die aktuelle Uhrzeit des Systems zurück.
settime setzt die Uhrzeit des Systems auf die Werte, die in der über timep angegebenen Struktur des Typs time enthalten sind.
Der Strukturtyp time ist in dos.h folgendermaßen definiert:
struct time {
unsigned char ti_min; /* Minuten */
unsigned char ti_hour; /* Stunden */
unsigned char ti_hund; /* 1/100 Sekunden */
unsigned char ti_sec; /* Sekunden */
};
Rückgabewert
Keiner
Siehe auch
_dos_gettime
_dos_settime
getdate
setdate
stime
time
Beispiel
gettime
settime
getvect, setvect
Syntax #include <dos.h>
void interrupt(*getvect(int interruptno)) (); /* C
version */
void interrupt(*getvect(int interruptno)) ( ... ); // C++
DDCHelp Hilfe zur Programmiersprache C Seite 248 von 606
version
void setvect(int interruptno, void interrupt (*isr) ()); /* C
version */
void setvect(int interruptno, void interrupt (*isr) ( ... )); // C++
version
Beschreibung
Lesen und Setzen eines Interrupt-Vektors.
Die Prozessoren der 8086-Familie reservieren eine Reihe von Interrupt-Vektoren, die von 0 bis 255 durchnumeriert sind. Der vier Byte lange Wert jedes Vektors ist die Adresse einer Interrupt-Funktion.
getvect liefert den Wert des Vektors interruptno als far-Zeiger auf eine Interrupt-Funktion zurück. Der Wert von interruptno muss zwischen 0 und 255 liegen.
setvect setzt den Vektor mit der Nummer interruptno so, dass er auf die als isr (interrupt service routine) angegebene C-Funktion zeigt. Diese C-Funktion muss als interrupt-Routine deklariert worden sein.
Hinweis: In C++ können nur statische Elementfunktionen und globale Funktionen als Interrupt-
Funktionen deklariert werden. Solange die in dos.h deklarierten Prototypen verwendet
werden, ist setvect ohne weitere Modifikationen durch Übergabe der Adresse einer
Interrupt-Funktion in jedem Speichermodell anwendbar.
Rückgabewert
getvect liefert den aktuellen vier Byte langen Wert zurück, der im Interrupt-Vektor interruptno gespeichert ist.
setvect liefert keinen Wert zurück.
Siehe auch
disable
_dos_getvect
_dos_setvect
enable
geninterrupt
getverify
Syntax #include <dos.h>
int getverify(void);
Beschreibung
Liefert den Status des Verify-Flag des Betriebssystems.
getverify liefert den aktuellen Status des Verify-Flag zurück.
Über das Verify-Flag wird festgelegt, ob Schreiboperationen auf der Diskette/Festplatte automatisch überprüft werden oder nicht. Wenn dieses Flag gesetzt ist, werden alle Schreiboperationen auf ihre Korrektheit überprüft.
Rückgabewert
getverify liefert den aktuellen Status des Verify-Flag: 0 (Überprüfung ein) oder 1 (Überprüfung aus).
Siehe auch
DDCHelp Hilfe zur Programmiersprache C Seite 249 von 606
setverify
getw
Syntax #include <stdio.h>
int getw(FILE *stream);
Beschreibung
Liest einen Integerwert aus einem Stream.
getw liest den nächsten Integer aus dem durch stream bezeichneten Eingabe-Stream. Eine spezielle Anordnung des Dateiinhalts wird nicht vorausgesetzt.
getw sollte nicht benutzt werden, wenn der Stream im Textmodus geöffnet wurde.
Rückgabewert
getw liest zwei Bytes aus der angegebenen Datei und liefert sie als int zurück. Bei Überschreitung des Dateiendes ist der Rückgabewert EOF. Da EOF aber auch einen gültigen Wert darstellen kann, sollte ein expliziter Test mit feof oder ferror folgen, um auf Dateiende oder Fehler zu prüfen.
Siehe auch
putw
gmtime
Syntax #include <time.h>
struct tm *gmtime(const time_t *timer);
Beschreibung
Rechnet Datum und Uhrzeit in die Greenwich Mean Time (GMT) um.
gmtime erwartet die Adresse eines Wertes, der von time zurückgeliefert wird, und liefert einen Zeiger auf eine Struktur vom Typ tm, in der die einzelnen Komponenten der Uhrzeit gespeichert sind.
Die globale long-Variable _timezone sollte den Unterschied zwischen der lokalen Zeit und der GMT in Sekunden enthalten (für MEZ ist _timezone = -1 * 60 * 60). Die globale Variable _daylight darf nur dann auf einen Wert ungleich null gesetzt werden, wenn die Standardkonvertierung der USA für Sommer- und Winterzeit angewendet werden soll.
Der Strukturtyp tm ist in time.h folgendermaßen definiert:
struct tm {
int tm_sec; /* Sekunden */
int tm_min; /* Minuten */
int tm_hour; /* Stunde (0 bis 23) */
int tm_mday; /* Tag im Monat (1 bis 31) */
int tm_mon; /* Monat (0 bis 11) */
int tm_year; /* Jahr (Kalenderjahr minus 1900) */
int tm_wday; /* Wochentag (0 bis 6, Sonntag = 0) */
int tm_yday; /* Tag im Jahr (0 bis 365) */
int tm_isdst; /* Ungleich null bei US-Sommerzeitkonvertierung */
};
Die Tageszeit wird in 24 Stunden gemessen, der Tag im Monat von 1 bis 31, der Monat von 0 bis
DDCHelp Hilfe zur Programmiersprache C Seite 250 von 606
11 und der Tag im Jahr von 0 bis 365. Der Wochentag beginnt mit Sonntag = 0 und zur Jahresangabe muss 1900 addiert werden. Das Flag tm_isdst gibt an, ob die Sommerzeitkonvertierung durchgeführt wurde.
Rückgabewert
gmtime liefert einen Zeiger auf eine statische Struktur mit der ermittelten Information zurück, die durch jeden Aufruf dieser Funktion überschrieben wird.
Siehe auch
asctime
ctime
ftime
localtime
stime
time
tzset
gotoxy
Syntax #include <conio.h>
void gotoxy(int x
int y);
Beschreibung
Positioniert den Cursor im Textfenster.
gotoxy positioniert den Cursor auf die angegebene Position im aktuellen Textfenster. Wenn die Koordinaten in irgendeiner Weise ungültig sind, wird der Aufruf von gotoxy vollständig ignoriert. Dies ist z.B. dann der Fall, wenn gotoxy(40,30) angegeben wird, die Koordinaten der rechten unteren Fensterecke aber bei (35,25) liegen.
Keines der beiden Argumente von gotoxy darf gleich 0 sein.
Hinweis: Diese Funktion sollte in GUI-Anwendungen unter Win32s oder Win32 nicht verwendet
werden.
Rückgabewert
Keiner.
Siehe auch
wherex
wherey
window
Beispiel
gotoxy, gotoxy_Ex
DDCHelp Hilfe zur Programmiersprache C Seite 251 von 606
_heapadd
Syntax #include <malloc.h>
int _heapadd(void *block, size_t size);
Beschreibung
Erweitert den Heap um einen Speicherblock.
_heapadd erweitert den Heap um einen neuen Speicherblock, der über den Parameter block angegeben wird. Der Speicherblock darf nicht zuvor auf dem Heap reserviert worden sein. _heapadd wird normalerweise eingesetzt, um dem Heap große, statische Datenbereiche hinzuzufügen.
Rückgabewert
_heapadd liefert bei fehlerfreier Ausführung 0, im Fehlerfall -1 zurück.
Siehe auch free
malloc
heapcheck
Syntax #include <alloc.h>
int heapcheck(void);
Beschreibung
Überprüft den Heap.
heapcheck überprüft jeden Heap-Block auf seine Zeiger, Größe und weitere wichtige Attribute. Unter der DOS-Umgebung ist heapcheck identisch mit farheapcheck, wenn als Speichermodell Large oder Huge gewählt wurde.
Rückgabewert
Bei fehlerfreier Ausführung wird ein Wert größer als 0, im Fall eines Fehlers ein Wert kleiner als 0 zurückgeliefert. Im einzelnen können von der Funktion folgende Werte zurückgeliefert werden:
_HEAPCORRUPT Der Heap ist ungültig
_HEAPEMPTY Es gibt keinen Heap
_HEAPOK Kein Fehler gefunden
heapcheckfree
Syntax #include <alloc.h>
int heapcheckfree(unsigned int fillvalue);
Beschreibung
heapcheckfree überprüft die freien Blöcke des Heap auf einen konstanten Wert.
Rückgabewert
Bei erfolgreicher Ausführung ist der Rückgabewert größer als 0, im Fall eines Fehlers kleiner als 0. Im einzelnen können von der Funktion folgende Werte zurückgeliefert werden:
DDCHelp Hilfe zur Programmiersprache C Seite 252 von 606
_BADVALUE Ein anderer Wert wurde gefunden
_HEAPCORRUPT Der Heap ist ungültig
_HEAPEMPTY Es gibt keinen Heap
_HEAPOK Kein Fehler gefunden
heapchecknode
Syntax #include <alloc.h>
int heapchecknode(void *node);
Beschreibung
Überprüft einen einzelnen Knoten des Heap.
heapchecknode überprüft einzelne Knoten auf dem Heap. Wird heapchecknode nach der Freigabe eines Knotens mit einem Zeiger auf diesen Block aufgerufen, kann _BADNODE anstelle des erwarteten _FREEENTRY zurückgeliefert werden. Der Grund liegt darin, dass benachbarte freie Blöcke auf dem Heap zusammengefasst werden und der betreffende Block deshalb nicht mehr existiert.
Rückgabewert
Folgende Werte können zurückgeliefert werden:
_BADNODE Der Knoten wurde nicht gefunden
_FREEENTRY Der Knoten ist ein freier Block
_HEAPCORRUPT Der Heap ist ungültig
_HEAPEMPTY Es gibt keinen Heap
_USEDENTRY Der Knoten ist ein reservierter Block
_heapchk
Syntax #include <malloc.h>
int _heapchk(void);
Beschreibung
Überprüft den Heap.
Die Funktion _heapchk durchläuft den Heap, untersucht jeden Block und überprüft seine Zeiger, seine Größe und weitere wichtige Attribute.
Rückgabewert
Einer der folgenden Werte wird zurückgeliefert:
_HEAPBADNODE Ein fehlerhafter Block wurde gefunden
_HEAPEMPTY Es gibt keinen Heap
_HEAPOK Der Heap scheint fehlerfrei zu sein
Siehe auch _heapset
_rtl_heapwalk
DDCHelp Hilfe zur Programmiersprache C Seite 253 von 606
heapfillfree
Syntax #include <alloc.h>
int heapfillfree(unsigned int fillvalue);
Beschreibung
Füllt die freien Blöcke des Heap mit einem konstanten Wert.
Rückgabewert
Die Funktion _heapfillfree liefert einen der folgenden Werte zurück:
_HEAPCORRUPT Der Heap ist fehlerhaft.
_HEAPEMPTY Es gibt keinen Heap.
_HEAPOK Der Heap scheint fehlerfrei zu sein.
_heapmin
Syntax #include <malloc.h>
int _heapmin(void);
Beschreibung
Gibt unbenutzte Heap-Bereiche wieder frei.
Die Funktion _heapmin gibt unbenutzte Heap-Bereiche wieder für das Betriebssystem frei. Dadurch können reservierte und danach wieder freigegebene Speicherblöcke von anderen Prozessen genutzt werden. Es ist kein Fehler, wenn wegen der Fragmentierung des Heap nicht immer alle unbenutzten Speicherblöcke an das Betriebssystem zurückgegeben werden können.
Rückgabewert
_heapmin liefert bei erfolgreicher Ausführung 0, im Fehlerfall -1 zurück
Siehe auch free
malloc
_heapset
Syntax #include <malloc.h>
int _heapset(unsigned int fillvalue);
Beschreibung
Füllt die freien Blöcke des Heap mit einem konstanten Wert.
_heapset überprüft den Zustand des Heap und verwendet dabei dieselben Methoden wie die Funktion _heapchk. . Danach werden alle freien Blöcke des Heap mit dem Inhalt des niederwertigen Byte von fillvalue gefüllt. Die Funktion kann bei der Lösung von Problemen hilfreich sein, deren Ursache mit dem Heap zu tun hat. Sie garantiert jedoch nicht, dass später reservierte Speicherblöcke mit dem angegebenen Wert gefüllt sind.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 254 von 606
Einer der folgenden Werte wird zurückgeliefert:
_HEAPOK Kein Fehler gefunden
_HEAPEMPTY Es gibt keinen Heap
_HEAPBADNODE Ein fehlerhafter Block wurde gefunden
Siehe auch _heapchk
_rtl_heapwalk
heapwalk
Syntax #include <alloc.h>
int heapwalk(struct heapinfo *hi);
Beschreibung
Durchläuft den Heap Knoten für Knoten.
heapwalk durchläuft den Heap Knoten für Knoten. Die Funktion geht davon aus, dass der Heap gültig ist (überprüfen Sie dies vorher mit heapcheck). Mit dem letzten Block wird _HEAPOK zurückgeliefert. Bei einem erneuten Aufruf von heapwalk ist das Ergebnis _HEAPEND.
Die Funktion heapwalk übernimmt einen Zeiger auf eine Struktur vom Typ heapinfo (deklariert in alloc.h). Setzen Sie das Feld hi.ptr beim ersten Aufruf der Funktion auf NULL. Nach der Rückkehr enthält hi.ptr die Adresse des ersten Blocks, während hi.size die Größe des Blocks in Bytes angibt. Wird der Block zur Zeit benutzt, ist das Flag hi.in_use gesetzt.
Rückgabewert
Einer der folgenden Werte wird zurückgeliefert:
_HEAPEMPTY Es gibt keinen Heap
_HEAPEND Das Ende des Heap wurde erreicht
_HEAPOK Der heapinfo-Block enthält gültige Daten
highvideo
Syntax #include <conio.h>
void highvideo(void);
Beschreibung
Setzt hohe Intensität für nachfolgende Textausgaben.
highvideo setzt das Bit für "hohe Intensität" der aktuellen Vordergrundfarbe und schaltet damit "hohe Intensität" für nachfolgende Textausgaben ein.
Bereits ausgegebene Zeichen bleiben unverändert - es wird lediglich das Zeichenattribut für Funktionen wie z.B. cprintf festgelegt, die direkte Bildschirmausgaben durchführen, nachdem die Funktion highvideo aufgerufen wurde.
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Keiner.
DDCHelp Hilfe zur Programmiersprache C Seite 255 von 606
Siehe auch cprintf
cputs
gettextinfo
lowvideo
normvideo
textattr
textcolor
hypot, hypotl
Syntax #include <math.h>
double hypot(double x, double y);
long double hypotl(long double x, long double y);
Beschreibung
Berechnet die Hypotenuse eines rechtwinkligen Dreiecks.
hypot berechnet den Wert z, wobei gilt: z2 = x2 + y2 sowie z <= 0.
Dies entspricht der Länge der Hypotenuse eines rechtwinkligen Dreiecks, dessen Kathete und Ankathete die Längen x bzw. y haben.
hypotl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
Bei fehlerfreier Ausführung wird z als double (hypot) bzw. long double (hypotl) zurückgeliefert. Im Falle eines Fehlers (zum Beispiel bei einem Überlauf) liefert hypot HUGE_VAL und hypotl _LHUGE_VAL zurück und die globale Variable errno wird auf folgenden Wert gesetzt:
ERANGE Ergebnis außerhalb des gültigen Bereichs
Die Fehlerbehandlung für hypot und hypotl kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
inp
Syntax #include <conio.h>
int inp(unsigned portid);
Beschreibung
Liest ein Byte aus einer Schnittstelle.
Das Makro inp liest ein einzelnes Byte von der durch portid angegebenen Eingabeschnittstelle. inp ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn
conio.h nicht aufgenommen wird (oder ein entsprechendes #undef stattgefunden hat).
Rückgabewert
inp liefert den gelesenen Wert zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 256 von 606
Siehe auch inpw
outp
outpw
inport
Syntax #include <dos.h>
int inport(int portid);
Beschreibung
Liest ein Wort aus einer Schnittstelle.
inport liest das niederwertige Byte eines Worts aus der durch portid angegebenen Schnittstelle und das höherwertige Byte aus der durch portid + 1 angegebenen Adresse. Diese Funktion arbeitet wie die 80x86-Anweisung IN.
Rückgabewert
inport liefert den gelesenen Wert zurück.
Siehe auch inportb
outport
outportb
inportb
Syntax #include <dos.h>
unsigned char inportb(int portid);
Beschreibung
Liest ein Byte aus einer Schnittstelle.
inportb ist ein Makro, das einzelne Bytes von der durch portid angegebenen Schnittstelle einliest.
inportb ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn dos.h nicht aufgenommen wird oder wenn ein entsprechendes #undef stattgefunden hat.
Rückgabewert
inportb liefert den gelesenen Wert zurück.
Siehe auch inport
outport
outportb
DDCHelp Hilfe zur Programmiersprache C Seite 257 von 606
inpw
Syntax #include <conio.h>
unsigned inpw(unsigned portid);
Beschreibung
Liest ein Wort aus einer Schnittstelle.
Das Makro inpw liest ein 16-Bit-Wort von der durch portid angegebenen Schnittstelle. inpw liest das niederwertige Byte des Wortes von portid und das höherwertige von portid +1.
inpw ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn conio.h nicht aufgenommen wird oder ein entsprechendes #undef stattgefunden hat.
Rückgabewert
inpw liefert den gelesenen Wert zurück.
Siehe auch inp
outp
outpw
insline
Syntax #include <conio.h>
void insline(void);
Beschreibung
Fügt eine Leerzeile an der Cursor-Position in das Textfenster ein.
insline verschiebt alle Zeilen zwischen der aktuellen Cursor-Position und dem Ende des Textfensters um eine Zeile nach unten; die unterste Zeile wird dabei aus dem Fenster geschoben. Die neue Zeile wird in der aktuellen Hintergrundfarbe dargestellt.
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet werden.
insline arbeitet nur im Textmodus.
Rückgabewert
Keiner.
Siehe auch clreol
delline
window
int86
Syntax #include <dos.h>
int int86(int intno, union REGS *inregs, union REGS *outregs);
DDCHelp Hilfe zur Programmiersprache C Seite 258 von 606
Beschreibung
Allgemeiner 8086 Software-Interrupt.
int86 führt einen 8086 Software-Interrupt durch, d.h. einen Aufruf der Routine, auf die der durch intno angegebene Interrupt-Vektor zeigt. Vor der Ausführung des Interrupts werden die Prozessorregister mit den durch inregs definierten Werten geladen.
Nach der Ausführung werden die Registerinhalte in outregs, der Status des Carry-Flag im Feld x.cflag von outregs und das 8086-Flag-Register im Feld x.flags von outregs gespeichert. Ein gesetztes Carry-Flag zeigt im allgemeinen einen Fehler an.
Hinweis: inregs und outregs können auf dieselbe Struktur zeigen.
Rückgabewert
int86 liefert den Wert des Registers AX nach der Ausführung des Interrupt zurück. Wenn das Carry-Flag durch den Interrupt gesetzt wurde (outregs->x.cflag != 0), so wird der globalen Variablen _doserrno der entsprechende Fehlercode zugewiesen. Beachten Sie, dass bei gelöschten Carry-Flag (outregs -> x.cflag == 0) ebenfalls ein Fehler aufgetreten sein kann. Überprüfen Sie daher zur Sicherheit immer _doserrno.
Siehe auch bdos
bdosptr
geninterrupt
int86x
intdos
intdosx
intr
int86x
Syntax #include <dos.h>
int int86x(int intno, union REGS *inregs, union REGS *outregs, struct
SREGS *segregs);
Beschreibung
Allgemeine Schnittstelle für 8086 Software-Interrupts.
int86x führt einen Software-Interrupt durch, d.h. einen Aufruf der Routine, auf die der durch intno angegebene Interrupt-Vektor zeigt. Vor der Ausführung des Interrupt werden die Prozessorregister mit den durch inregs angegebenen Werten geladen.
Zusätzlich kopiert int86x die Werte von segregs->ds und segregs->es in die entsprechenden Register, bevor es den Interrupt ausführt. Auf diese Weise kann ein Programm, das far-Zeiger oder ein großes Speichermodell benutzt, angeben, welches Segment für den Software-Interrupt verwendet werden soll.
Nach der Rückkehr vom Software-Interrupt kopiert int86x die Registerwerte in outregs, den Status des Carry-Flag in das Feld x.cflag von outregs und das 8086-Flag-Register in das Feld x.flags von outregs. Anschließend stellt int86x den alten Inhalt des DS-Registers wieder her und speichert die Werte der Segmentregister in den Feldern segregs->es bzw. segregs->ds. Ist das Carry-Flag gesetzt, zeigt das im allgemeinen einen Fehler an.
int86x ermöglicht den Aufruf eines 8086-Software-Interrupt, der mit einem anderen Wert von DS als dem voreingestellten arbeitet und/oder ein Argument in ES benötigt.
Hinweis: inregs und outregs können auf dieselbe Struktur zeigen.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 259 von 606
int86x liefert den Wert des Registers AX nach der Ausführung des Interrupt zurück. Wenn das Carry-Flag durch den Interrupt gesetzt wurde (outregs->x.cflag != 0), so wird der globalen Variablen _doserrno der entsprechende Fehlercode zugewiesen. Beachten Sie, dass bei gelöschtem Carry-Flag (outregs -> x.cflag == 0) ebenfalls ein Fehler aufgetreten sein kann. Überprüfen Sie daher zur Sicherheit immer _doserrno.
Siehe auch bdos
bdosptr
geninterrupt
intdos
intdosx
int86
intr
segread
intdos
Syntax #include <dos.h>
int intdos(union REGS *inregs, union REGS *outregs);
Beschreibung
Allgemeine Schnittstelle für DOS-Interrupts.
intdos führt einen Aufruf des DOS-Interrupt 0x21 aus, wobei die Nummer der auszuführenden Funktion durch inregs->h.ah angegeben sein muss.
Nach der Rückkehr vom Interrupt 0x21 kopiert intdos die Registerwerte in outregs, den Status des Carry-Flag in das Feld x.cflag von outregs und den Inhalt des 8086-Flag-Register in das Feld x.flags von outregs. Ein gesetztes Carry-Flag zeigt einen Fehler an.
Hinweis: inregs und outregs können auf dieselbe Struktur zeigen.
Rückgabewert
intdos liefert den von DOS gesetzten Inhalt des Registers AX zurück. Wenn das Carry-Flag durch den Aufruf gesetzt wurde (outregs->x.cflag != 0), dann wird der globalen Variablen _doserrno der entsprechende Fehlercode zugewiesen. Beachten Sie, dass bei gelöschtem Carry-Flag (outregs -> x.cflag == 0) ebenfalls ein Fehler aufgetreten sein kann. Überprüfen Sie daher zur Sicherheit immer _doserrno.
Siehe auch bdos
bdosptr
geninterrupt
int86
int86x
intdosx
intr
DDCHelp Hilfe zur Programmiersprache C Seite 260 von 606
intdosx
Syntax #include <dos.h>
int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS
*segregs);
Beschreibung
Allgemeine Schnittstelle für DOS-Interrupts.
intdosx führt einen Aufruf des DOS-Interrupt 0x21 aus, wobei die Nummer der auszuführenden Funktion durch inregs->h.ah angegeben sein muss.
Zusätzlich kopiert intdosx die Werte von segregs->ds und segregs->es in die entsprechenden Register, bevor es den Interrupt ausführt. Auf diese Weise kann ein Programm, das far-Zeiger oder ein großes Speichermodell benutzt, angeben, welches Segment für den Software-Interrupt verwendet werden soll.
Nach der Rückkehr vom Interrupt 0x21 kopiert intdosx die Registerwerte in outregs, den Status des Carry-Flag in das Feld x.cflag von outregs und das 8086-Flag-Register in das Feld x.flags von outregs. Anschließend stellt int86x den alten Inhalt des DS-Registers wieder her und speichert die Werte der Segmentregister in den Feldern segregs->es bzw. segregs->ds. Ist das Carry-Flag gesetzt, zeigt dies im allgemeinen einen Fehler an.
intdosx ermöglicht den Aufruf eines 8086-Software-Interrupt, der mit einem anderen Wert von DS als dem voreingestellten arbeitet und/oder ein Argument in ES benötigt.
Hinweis: inregs und outregs können auf dieselbe Struktur zeigen.
Rückgabewert
intdosx liefert den von DOS gesetzten Inhalt des Registers AX zurück. Wenn das Carry-Flag durch den Aufruf gesetzt wurde (outregs->x.cflag != 0), wird der globalen Variablen _doserrno der entsprechende Fehlercode zugewiesen. Beachten Sie, dass bei gelöschtem Carry-Flag (outregs -> x.cflag = 0) ebenfalls ein Fehler aufgetreten sein kann. Überprüfen Sie daher zur Sicherheit immer _doserrno.
Siehe auch bdos
bdosptr
geninterrupt
int86
int86x
intdos
intr
segread
intr
Syntax #include <dos.h>
void intr(int intno, struct REGPACK *preg);
Beschreibung
Alternative Schnittstelle für 8086-Software-Interrupts.
Die Funktion intr ist eine alternative Schnittstelle für die Ausführung von Interrupts. Sie erzeugt den vom Parameter intno angegebenen 8086 Software-Interrupt.
Vor der Ausführung des Interrupts werden die Prozessorregister auf die Werte der REGPACK-
DDCHelp Hilfe zur Programmiersprache C Seite 261 von 606
Struktur gesetzt, auf die der Parameter preg zeigt. Nach der Ausführung erfolgt eine Kopie der Registerinhalte (und der Flags) in die Struktur *preg.
Folgende Parameter werden der Funktion intr übergeben:
intno Nummer des auszuführenden Interrupts.
preg Adresse einer Struktur mit
(a) den Registerinhalten vor dem Aufruf
(b) den Registerinhalten nach dem Aufruf
Der Strukturtyp REGPACK ist in dos.h folgendermaßen definiert:
struct REGPACK {
unsigned r_ax, r_bx, r_cx, r_dx;
unsigned r_bp, r_si, r_di, r_ds, r_es, r_flags;
};
Rückgabewert
Keiner. Die REGPACK-Struktur *preg enthält die Registerwerte nach dem Aufruf des Interrupt.
Siehe auch geninterrupt
int86
int86x
intdos
intdosx
ioctl
Syntax #include <io.h>
int ioctl(int handle, int func [, void *argdx, int argcx]);
Beschreibung
Steuerung von Peripheriegeräten.
ioctl ist im Prinzip auf UNIX-Systemen verfügbar - sowohl die erwarteten Parameter als auch die ausgeführten Aktionen sind allerdings anders definiert. Selbst innerhalb von UNIX arbeitet diese Funktion nicht einheitlich - System III und die Version 7 implementieren sie auf verschiedene Weise. Die DOS-Funktion ioctl ist deshalb nicht nach UNIX portierbar (und nur eingeschränkt portierbar zwischen verschiedenen DOS-Versionen).
Unter der DOS-Version 3.0 sind zusätzlich die Werte 8 und 11 für func definiert.
ioctl verwendet die DOS-Funktion 0x44, wobei die tatsächlich ausgeführten Aktionen sehr stark von func abhängen.
Die folgenden Werte sind für func definiert:
0 Lesen von Informationen über das Gerät.
1 Setzen von Geräteinformationen durch den Parameter argdx.
2 Lesen von argcx Bytes vom Gerät in den Bereich, auf den argdx zeigt.
3 Schreiben von argcx Bytes zu dem Gerät, argdx zeigt auf die Startadresse im Speicher.
4 Wie Unterfunktion 2, allerdings wird der Wert von handle hier als Laufwerksnummer interpretiert (0 = Standard, 1 = A, 2 = B, etc.).
5 Wie Unterfunktion 3, allerdings mit handle als Laufwerksnummer (0 = Standard, 1 = A, 2 = B usw.).
6 Ermittlung des Eingabestatus.
DDCHelp Hilfe zur Programmiersprache C Seite 262 von 606
7 Ermittlung des Ausgabestatus.
8 Prüfung, ob der Datenträger auswechselbar ist (nur DOS-Version 3.0).
11 Setzen der Anzahl der Wiederholversuche bei Kollisionen beim gemeinsamen Zugriff (nur DOS-Version 3.0).
ioctl wird normalerweise für Geräteeinheiten verwendet, kann aber auch zusammen mit normalen Diskettendateien eingesetzt werden. Im letzteren Fall sind allerdings nur die Unterfunktionen 0, 6 und 7 definiert - alle anderen Aufrufe liefern einen Fehler zurück und setzen errno auf den Wert EINVAL.
Genaue Informationen zur DOS-Funktion 0x44 (IOCTL), deren Parameter und Rückgabewerte finden Sie in Ihrem DOS-Referenzhandbuch.
Die Argumente argdx und argcx sind optional.
ioctl stellt eine direkte Schnittstelle zu speziellen Funktionen von DOS-Gerätetreibern dar. Das exakte Verhalten dieser Funktion hängt daher stark von der verwendeten Hardware und den angesprochenen Geräten ab. Nicht alle Hardware-Hersteller halten sich an die Schnittstelle, wie sie hier beschrieben wurde. Für die korrekte Benutzung von ioctl benötigen Sie die BIOS-Dokumentation des Herstellers.
Rückgabewert
Für die Werte 0 und 1 von func liefert ioctl den Inhalt des Prozessorregisters DX zurück - die gelesene/gesetzte Geräteinformation. Für Werte von func im Bereich von 2 bis 5 wird die Anzahl der tatsächlich gelesenen/geschriebenen Bytes zurückgeliefert. Für die Werte 6 und 7 wird die Statusinformation zurückgeliefert.
Im Falle eines Fehlers liefert ioctl den Wert -1 und setzt errno auf einen der folgenden Werte:
EBADF Ungültiges Handle
EINVAL Ungültiges Argument
EINVDAT Ungültige Daten
isalnum
Syntax #include <ctype.h>
int isalnum(int c);
Beschreibung
Testet, ob ein Zeichen ein alphanumerisches Zeichen ist.
Das Makro isalnum prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. isalnum ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Buchstabe (A bis z oder a bis z) oder eine Ziffer (0 bis 9).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isalnum liefert einen Wert ungleich Null zurück, wenn c ein Buchstabe oder eine Ziffer ist.
isalpha
Syntax #include <ctype.h>
int isalpha(int c);
Beschreibung
Testet, ob ein Zeichen ein Buchstabe ist.
DDCHelp Hilfe zur Programmiersprache C Seite 263 von 606
isalpha prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Buchstabe (A bis Z oder a bis z).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isalpha liefert einen Wert ungleich Null zurück, wenn c ein Buchstabe ist.
isascii
Syntax #include <ctype.h>
int isascii(int c);
Beschreibung
Makro zur Klassifizierung von Zeichen.
isascii prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro liefert einen Wert ungleich Null für wahr und den Wert 0 für falsch zurück.
isascii ist für alle Integerwerte definiert.
Rückgabewert
isascii liefert einen Wert ungleich Null zurück, wenn das niederwertige Byte von c im Bereich von0 bis 127 (0x00-0x7F) liegt.
isatty
Syntax #include <io.h>
int isatty(int handle);
Beschreibung
Prüft den Gerätetyp.
isatty prüft, ob das über handle angegebene Peripheriegerät zu einem der folgende Gerätetypen gehört:
Terminal
Tastatur
Drucker
serielle Schnittstelle
Rückgabewert
Wenn das Gerät eines der oben aufgeführten Geräte ist, so liefert isatty einen Wert ungleich Null. Andernfalls wird 0 zurückgeliefert.
iscntrl
Syntax #include <ctype.h>
int iscntrl(int c);
Beschreibung
Testet, ob ein Zeichen ein Steuerzeichen ist.
DDCHelp Hilfe zur Programmiersprache C Seite 264 von 606
iscntrl prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Löschzeichen oder ein Steuerzeichen (0x7F oder 0x00 bis 0x1f).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
iscntrl liefert einen Wert ungleich Null zurück, wenn c ein Steuerzeichen oder ein Löschzeichen ist.
isdigit
Syntax #include <ctype.h>
int isdigit(int c);
Beschreibung
Testet, ob ein Zeichen eine Dezimalziffer ist.
isdigit prüft das übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c eine Ziffer (0 bis 9).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isdigit liefert einen Wert ungleich Null zurück, wenn c eine Ziffer ist.
isgraph
Syntax #include <ctype.h>
int isgraph(int c);
Beschreibung
Testet, ob ein Zeichen ein druckbares Zeichen ist.
isgraph prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein druckbares Zeichen mit Ausnahme des Leerzeichens (' ').
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isgraph liefert einen Wert ungleich Null zurück, wenn c ein druckbares Zeichen ist.
islower
Syntax #include <ctype.h>
int islower(int c);
Beschreibung
Testet, ob ein Zeichen ein Kleinbuchstabe ist.
islower prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Kleinbuchstabe (a bis z).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
DDCHelp Hilfe zur Programmiersprache C Seite 265 von 606
Rückgabewert
islower liefert einen Wert ungleich Null zurück, wenn c ein Kleinbuchstabe ist.
isprint
Syntax #include <ctype.h>
int isprint(int c);
Beschreibung
Testet, ob ein Zeichen ein druckbares Zeichen ist.
isprint prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein druckbares Zeichen einschließlich des Leerzeichens (' ').
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isprint liefert einen Wert ungleich Null zurück, wenn c ein druckbares Zeichen ist.
ispunct
Syntax #include <ctype.h>
int ispunct(int c);
Beschreibung
Testet, ob ein Zeichen ein Interpunktionszeichen ist.
ispunct prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c jedes druckbare Zeichen, das weder ein alphanumerisches Zeichen noch ein Leerzeichen (' ') ist.
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
ispunct liefert einen Wert ungleich Null zurück, wenn c ein Interpunktionszeichen ist.
isspace
Syntax #include <ctype.h>
int isspace(int c);
Beschreibung
Testet, ob ein Zeichen ein Leerzeichen ist.
isspace prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig.
Sie können das Makro durch eine entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isspace liefert einen Wert ungleich Null zurück, wenn c ein Leerzeichen, Tabulator, Wagenrücklauf,
DDCHelp Hilfe zur Programmiersprache C Seite 266 von 606
Zeilenvorschub, vertikaler Tabulator oder ein Seitenvorschub (ASCII-Codes 0x09 bis 0x0D, 0x20) oder jedes andere in der Locale-Kategorie definierte Leerzeichen ist.
isupper
Syntax #include <ctype.h>
int isupper(int c);
Beschreibung
Testet, ob ein Zeichen ein Großbuchstabe ist.
isupper prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig. In der Standardeinstellung C ist c ein Großbuchstabe (A bis Z).
Sie können das Makro durch ein entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isupper liefert einen Wert ungleich Null zurück, wenn c ein Großbuchstabe ist.
isxdigit
Syntax #include <ctype.h>
int isxdigit(int c);
Beschreibung
Testet, ob ein Zeichen eine hexadezimale Ziffer ist.
isxdigit prüft das als Integer übergebene ASCII-Zeichen anhand einer Tabelle. Das Makro ist von der aktuellen Locale-Kategorie LC_CTYPE abhängig.
Sie können das Makro durch eine entsprechendes #undef als Funktion verfügbar machen.
Rückgabewert
isxdigit liefert einen Wert ungleich Null zurück, wenn c eine hexadezimale Ziffer (0 bis 9, A bis F, a bis f) oder jede andere durch die Locale-Kategorie definierte hexadezimale Ziffer ist.
itoa
Syntax #include <stdlib.h>
char *itoa(int value, char *string, int radix);
Beschreibung
Konvertiert einen Integerwert in einen String.
itoa konvertiert den übergebenen Integerwert value in einen Nullterminierten String und speichert das Ergebnis in der durch string bezeichneten Variablen.
Der Parameter radix legt die Basis fest, die bei der Konvertierung benutzt werden soll. Mögliche Werte liegen im Bereich von 2 bis 36. Wenn radix den Wert 10 hat und value kleiner als Null ist, stellt itoa dem Ergebnis ein Minuszeichen voran.
DDCHelp Hilfe zur Programmiersprache C Seite 267 von 606
Hinweis: Der durch den Parameter string angegebene String muss lang genug sein, um das Ergebnis der Konvertierung inklusive eines abschließenden Nullzeichens (\0) aufnehmen zu können. itoa erzeugt maximal 17 Bytes.
Rückgabewert
itoa liefert der Zeiger string zurück.
Siehe auch ltoa
ultoa
kbhit
Syntax #include <conio.h>
int kbhit(void);
Beschreibung
Prüft auf verfügbare Tastenanschläge.
kbhit prüft, ob ein Zeichen über die Tastatur eingegeben wurde. Verfügbare Zeichen können mit getch oder getche gelesen werden
Hinweis: Diese Funktion sollte in Win32s oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Wenn eine noch nicht gelesene Tastatureingabe vorliegt, liefert kbhit einen Wert ungleich Null. Liegt kein Zeichen an, dann liefert kbhit den Wert 0.
Siehe auch getch
getche
labs
Syntax #include <math.h>
long labs(long int x);
Beschreibung
Liefert den absoluten Wert eines long-Wertes.
labs berechnet den absoluten Wert des long-Arguments x.
Rückgabewert
labs liefert den absoluten Wert des long-Arguments x zurück.
Siehe auch abs
DDCHelp Hilfe zur Programmiersprache C Seite 268 von 606
cabs
fabs
ldexp, ldexpl
Siehe auch Syntax #include <math.h>
double ldexp(double x, int exp);
long double ldexpl(long double x, int exp);
Beschreibung
Berechnet .
ldexp liefert das Ergebnis der Berechnung x * 2exp als double-Wert zurück.
ldexpl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
Bei fehlerfreier Ausführung liefern ldexp und ldexpl das Ergebnis der Berechnung von zurück.
Die Fehlerbehandlung kann für diese Funktionen über die Routine _matherr bzw. _matherrl modifiziert werden.
Siehe auch exp
frexp
modf
ldiv
Syntax #include <stdlib.h>
ldiv_t ldiv(long int numer, long int denom);
Beschreibung
Dividiert zwei long-Werte und liefert den Quotienten und den Divisionsrest zurück.
ldiv dividiert die als numer (Dividend) und denom (Divisor) übergebenen long-Werte und liefert eine Struktur des Typs ldiv_t zurück. Dieser Datentyp ist in stdlib.h folgendermaßen definiert:
typedef struct {
long int quot; /* Quotient */
long int rem; /* Divisionsrest */
} ldiv_t;
Rückgabewert
Es wird eine Struktur des zuvor beschriebenen Typs zurückgeliefert.
Siehe auch div
DDCHelp Hilfe zur Programmiersprache C Seite 269 von 606
lfind
Syntax #include <stdlib.h>
void *lfind(const void *key, const void *base, size_t *num, size_t
width, int (_USERENTRY *fcmp)(const void *, const void *));
Beschreibung
Führt eine lineare Suche nach einem Array-Element durch.
lfind durchsucht ein sequentiell angeordnetes Array nach dem Wert des Schlüsselfeldes key. Die Suche erfolgt linear. lfind verwendet eine vom Programmierer erstellte Vergleichsroutine fcmp, die mit der _USERENTRY-Aufrufkonvention verwendet werden muss.
Der Parameter base muss auf das erste Element des Array zeigen, num auf einen Integer, der die Anzahl der Array-Elemente enthält. width gibt die Größe eines einzelnen Elements in Bytes an.
Rückgabewert
lfind liefert einen Zeiger auf das erste Element des Array zurück, das mit dem Suchschlüssel key identisch ist. Falls der gesuchte Eintrag nicht existiert, liefert lfind den Wert NULL. Die Vergleichsroutine muss für *elem1 == *elem2 (das sind ihre beiden Parameter) den Wert 0 liefern, andernfalls einen Wert ungleich Null.
Siehe auch bsearch
lsearch
qsort
localeconv
Syntax #include <locale.h>
struct lconv *localeconv(void);
Beschreibung
Ermittelt die Locale-Einstellung für numerische Formate.
localeconv liefert Informationen über länderspezifische numerische Formate (z.B. für die Währung). Diese Informationen sind in der Struktur des Typs lconv gespeichert und können nur über die Funktion setlocale geändert werden. Nachfolgende Aufrufe von localeconv aktualisieren die Struktur lconv.
Der Strukturtyp lconv ist in locale.h folgendermaßen definiert:
Feld Anwendung
char *decimal_point; Normaler Dezimalpunkt (ohne Währungsformate). Darf niemals ein leerer String sein.
char *thousands_sep; Zeichen, um Ziffern links des Dezimalpunkts zu gruppieren. Wird nicht bei Währungsangaben verwendet.
char *grouping; Größe jeder Zifferngruppe. Wird nicht bei Währungsangaben verwendet. Vgl. die folgende Wertetabelle.
char *int_curr_symbol; Internationales Währungssymbol der aktuellen Locale-Einstellung. Das Symbolformat ist in der Norm ISO 4217 "Codes for
DDCHelp Hilfe zur Programmiersprache C Seite 270 von 606
Representation of Currency and Funds" festgelegt.
char *currency_symbol; Lokales Währungssymbol der aktuellen Locale-Einstellung;
char *mon_decimal_point; Dezimalpunkt für Währungsangaben.
char *mon_thousands_sep; Zeichen, um bei Währungsangaben Ziffern links des Dezimalpunkts zu gruppieren.
char *mon_grouping; Größe jeder Zifferngruppe bei Währungsangaben. Vgl. die folgende Wertetabelle.
char *positive_sign; String, der nicht-negative Währungsangaben kennzeichnet.
char *negative_sign; String, der positive Währungsangaben kennzeichnet.
char int_frac_digits; Anzahl von Ziffern hinter dem Dezimalpunkt, die bei einer international formatierten Währungsangabe dargestellt werden.
char frac_digits; Anzahl von Ziffern hinter dem Dezimalpunkt, die bei einer formatierten Währungsangabe dargestellt werden.
char p_cs_precedes; Ist auf 1 gesetzt, wenn currency_symbol einer nicht-negativen, formatierten Währungsangabe vorangestellt wird. Wird currency_symbol nachgestellt, ist das Feld auf 0 gesetzt.
char p_sep_by_space; Ist auf 1 gesetzt, wenn currency_symbol von einer nicht-negativen, formatierten Währungsangabe durch ein Leerzeichen getrennt wird. Andernfalls wird das Feld auf 0 gesetzt.
char n_cs_precedes; Ist auf 1 gesetzt, wenn currency_symbol einer negativen, formatierten Währungsangabe vorangestellt wird. Wird currency_symbol nachgestellt, so ist das Feld auf 0 gesetzt.
char p_sep_by_space; Ist auf 1 gesetzt, wenn currency_symbol von einer negativen, formatierten Währungsangabe durch ein Leerzeichen getrennt wird. Andernfalls wird das Feld auf 0 gesetzt.
char p_sign_posn; Legt fest, wo das Zeichen positive_sign für eine nichtnegative, formatierte Währungsangabe dargestellt werden soll.
char p_sign_posn; Legt fest, wo das Zeichen negative_sign für eine negative, formatierte Währungsangabe dargestellt werden soll.
Alle obigen Strings mit Ausnahme von decimal_point werden in der aktuellen Locale-Einstellung nicht unterstützt. Die char-Felder enthalten nicht-negative Werte. Ist ein char-Feld auf CHAR_MAX gesetzt, so wird es in der aktuellen Locale-Einstellung nicht unterstützt.
Die Felder grouping und mon_grouping werden folgendermaßen gesetzt und interpretiert:
Wert Bedeutung
CHAR_MAX Es wird keine weitere Gruppierung durchgeführt.
0 Das vorherige Element soll für den Rest der Ziffern wiederholt verwendet werden.
jeder andere Integerwert Legt die Größe der aktuellen Zifferngruppe fest. Um die Größe der folgenden Zifferngruppe zu bestimmen, wird das nächste Element eingelesen.
Die Felder p_sign_posn und n_sign_posn werden folgendermaßen gesetzt und interpretiert:
Wert Bedeutung
0 Die Währungsangabe wird einschließlich des Währungssymbols currency_symbol eingeklammert.
1 Der Vorzeichenstring wird vor die Währungsangabe und currency_symbol gesetzt.
2 Der Vorzeichenstring wird hinter die Währungsangabe und currency_symbol gesetzt.
3 Der Vorzeichenstring wird direkt vor die Währungsangabe und currency_symbol gesetzt.
DDCHelp Hilfe zur Programmiersprache C Seite 271 von 606
4 Der Vorzeichenstring wird direkt hinter die Währungsangabe und currency_symbol gesetzt.
Rückgabewert
localeconv liefert einen Zeiger auf die gefüllte Struktur des Typs lconv zurück. Die Strukturwerte werden bei jedem Aufruf von setlocale, der die Locale-Kategorien LC_MONETARY oder LC_NUMERIC ändert, aktualisiert.
Siehe auch setlocale
localtime
Syntax #include <time.h>
struct tm *localtime(const time_t *timer);
Beschreibung
Konvertiert Datum und Uhrzeit in eine Struktur des Typs tm.
localtime übernimmt die Adresse eines Wertes, der durch time geliefert wird, und gibt einen Zeiger auf die Struktur des Typs tm zurück, die die umgerechneten Zeitangaben enthält. localtime berücksichtigt hierbei Zeitzonen und die Sommerzeit.
Die globale long-Variable _timezone muss auf den Unterschied zwischen der lokalen Zeit und der Greenwich Mean Time (GMT) in Sekunden gesetzt werden (für MEZ ist _timezone -1*60*60). Die globale Variable _daylight darf nur dann auf einen Wert ungleich Null gesetzt werden, wenn die Standardwerte der USA für Sommer- und Winterzeit angewendet werden können. Diese Werte werden von der Funktion tzset und nicht von einem Benutzerprogramm direkt gesetzt.
Der Strukturtyp tm ist in time.h folgendermaßen definiert:
struct tm {
int tm_sec; /* Sekunden */
int tm_min; /* Minuten */
int tm_hour; /* Stunden (0..23) */
int tm_mday; /*Tag im Monat (1..31) */
int tm_mon; /* Monat (0..11) */
int tm_year; /* Jahr (-1900) */
int tm_wday; /* Wochentag (0..6) */
int tm_yday; /* Tag im Jahr (0..365) */
int tm_isdst; /* Sommerzeit */
};
Die Tageszeit wird in 24 Stunden gemessen, der Tag im Monat von 1 bis 31, der Monat von 0 bis 11, und der Tag im Jahr von 0 bis 365. Der Wochentag beginnt mit Sonntag = 0 und zur Jahresangabe muss 1900 addiert werden. Das Flag tm_isdst gibt an, ob die Sommerzeitkonvertierung durchgeführt wurde.
Rückgabewert
localtime liefert einen Zeiger auf eine statische Struktur, die die einzelnen Zeitangaben enthält. Die Struktur wird durch jeden Aufruf dieser Funktionen erneut gesetzt.
Siehe auch asctime
ctime
ftime
DDCHelp Hilfe zur Programmiersprache C Seite 272 von 606
gmtime
stime
time
tzset
lock
Syntax #include <io.h>
int lock(int handle, long offset, long length);
Beschreibung
Sperrt Teile einer Datei im gemeinsamen Zugriff.
lock bietet eine Schnittstelle zu den vom Betriebssystem bereitgestellten Verfahren für den gemeinsamen Dateizugriff (file-sharing).
lock kann beliebige Bereiche einer Datei sperren, die sich jedoch nicht überschneiden dürfen. Jedes Programm, das auf einen gesperrten Bereich zugreifen will, wiederholt diese Operation dreimal und bricht dann mit einem Fehler ab.
Rückgabewert
Die Funktion liefert bei fehlerfreier Ausführung den Wert 0. Andernfalls wird der Wert -1 zurückgeliefert und die globale Variable errno auf folgenden Wert gesetzt:
EACCES Zugriff nicht gestattet
Siehe auch locking
open
sopen
unlock
locking
Syntax #include <io.h>
#include <sys\locking.h>
int locking(int handle, int cmd, long length);
Beschreibung
Sperrt oder entsperrt Teile einer Datei im gemeinsamen Zugriff. DOS-Benutzer müssen SHARE.EXE laden, bevor sie die Funktion locking verwenden.
locking bietet eine Schnittstelle zu den vom Betriebssystem bereitgestellten Verfahren für den gemeinsamen Dateizugriff (file-sharing). Die Funktion sperrt length Bytes der durch handle bezeichneten offenen Datei ab der durch offset vorgegebenen Position gegen Zugriffe anderer Programme.
Mit locking lassen sich beliebig viele Bereiche einer Datei sperren, die sich jedoch nicht überlappen dürfen. Jedes Programm, das auf einen gesperrten Bereich zugreifen will, wiederholt diese Operation dreimal und bricht dann mit einem Fehler ab.
cmd gibt die durchzuführende Operation an. Folgende Konstanten sind dafür in sys\locking.h definiert:
DDCHelp Hilfe zur Programmiersprache C Seite 273 von 606
LK_LOCK Sperren des Bereichs. Ist das Sperren nicht möglich, wird der Sperrversuch 10 Sekunden lang im 1-Sekunden-Takt wiederholt. Anschließend erfolgt ein Abbruch.
LK_RLCK Wie LK_LOCK.
LK_NBLCK Sperren des Bereichs. Es erfolgt ein sofortiger Abbruch, wenn die Sperrung nicht möglich ist.
LK_NBRLCK Wie LK_NBLCK.
LK_UNLCK Entsperren des Bereichs (dieser Bereich muss vorher gesperrt worden sein).
Rückgabewert
Die Funktion liefert bei fehlerfreier Ausführung den Wert 0. Andernfalls wird der Wert -1 zurückgeliefert und die globale Variable errno auf einen der folgenden Werte gesetzt:
EACCES Datei bereits gesperrt bzw. entsperrt
EBADF Ungültiges Datei-Handle
EDEADLOCK Datei konnte nach 10 Versuchen nicht gesperrt werden (cmd ist LK_LOCK oder LK_RLCK)
EINVAL Ungültiges cmd oder SHARE.EXE nicht geladen
Siehe auch _fsopen
lock
open
sopen
unlock
log, logl
Siehe auch Syntax #include <math.h>
double log(double x);
long double logl(long double x);
Beschreibung
Berechnet den natürlichen Logarithmus des Arguments.
log10 berechnet den Logarithmus n des Arguments x zur Basis 10, erfüllt also die Gleichung x = 10n.
log10l ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
log10 und log10l liefern das Ergebnis der Berechnung von log10(x) zurück.
Ist x ein reelles Argument und x < 0, so setzen log10 und log10l die globale Variable errno auf den Wert
EDOM Bereichsfehler
Ist x == 0, dann liefern die Funktionen den Wert -HUGE_VAL (log10) bzw. -_LHUGE_VAL (log10l) zurück. Die Fehlerbehandlung für log10 und log10l kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
DDCHelp Hilfe zur Programmiersprache C Seite 274 von 606
Siehe auch bcd
complex
exp
log10
sqrt
log10, log10l
Siehe auch Syntax #include <math.h>
double log10(double x);
long double log10l(long double x);
Beschreibung
Berechnet den Logarithmus des Arguments zur Basis 10.
log10 berechnet den Logarithmus n des Arguments x zur Basis 10, erfüllt also die Gleichung x = 10n.
log10l ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
log10 und log10l liefern das Ergebnis der Berechnung von zurück.
Ist x ein reelles Argument und x < 0, so setzen log10 und log10l die globale Variable errno auf den Wert
EDOM Bereichsfehler
Ist x == 0, dann liefern die Funktionen den Wert -HUGE_VAL (log10) bzw. -_LHUGE_VAL (log10l) zurück. Die Fehlerbehandlung für log10 und log10l kann über die Funktionen _matherr bzw. _matherrl modifiziert werden.
Siehe auch bcd
complex
exp
log
longjmp
Syntax #include <setjmp.h>
void longjmp(jmp_buf jmpb, int retval);
Beschreibung
Führt ein nicht-lokales goto aus.
setjmp speichert den aktuellen Task-Zustand in dem durch jmpb angegebenen Puffer. Ein Aufruf von longjmp zu einem späteren Zeitpunkt stellt diesen Zustand wieder her. Das Programm wird an
DDCHelp Hilfe zur Programmiersprache C Seite 275 von 606
dieser Stelle so fortgesetzt, als hätte setjmp den Wert retval zurückgeliefert.
Ein Task-Zustand beinhaltet:
Win 16 Win 32
Alle Segmentregister (CS, DS, ES, SS)
Segmentregister werden nicht gesichert
Registervariablen Registervariablen
(DI,SI) (EBX, EDI, ESI)
Stack Zeiger SP Stack Zeiger ESP
Frame Zeiger BP Frame Zeiger EBP
Flags Flags werden nicht gesichert
Ein Task-Zustand ist so vollständig, dass mit Hilfe von setjmp und longjmp Ko-Routinen implementiert werden können.
setjmp muss vor longjmp aufgerufen werden. Die Routine, die setjmp aufgerufen und jmpb einrichtet hat, muss beim Aufruf von longjmp noch aktiv sein und darf daher nicht zwischenzeitlich beendet worden sein. Andernfalls sind die Ergebnisse nicht vorhersehbar.
longjmp kann den Wert 0 nicht übergeben. Wird retval auf 0 gesetzt, so ersetzt longjmp dies durch 1.
In einem Prozess mit mehreren Threads (Multi-Thread) können Sie nicht mit longjmp den Thread wechseln. Springen Sie daher nicht zu einem jmp_buf, der von einem anderen Thread per setjmp gespeichert wurde.
Für DOS-Anwender:
Falls Ihr Programm mit Overlays arbeitet, können Sie die Funktionen setjmp und longjmp nicht zur Implementierung von Koroutinen heranziehen. Denn normalerweise sichern und erneuern setjmp und longjmp alle Registerinhalte, die für das Funktionieren der Koroutinen gebraucht werden. Aber der Overlay-Manager verwaltet nur den Inhalt eines Stacks, im Gegensatz zu Koroutinen. Diese benötigen gewöhnlich zwei Stacks bzw. getrennte Teile eines Stacks. Der Overlay-Manager ist nicht in der Lage, auf diese Informationen zurückzugreifen.
Sie können Hintergrund-Tasks mit jeweils eigenem Stack oder Stack-Abschnitt einsetzen, aber Sie müssen dafür sorgen, dass diese Tasks keinen überlagerten Code aufrufen. Und Sie dürfen auf keinen Fall aus einem Overlay heraus zum oder vom Hintergrund wechseln.
Rückgabewert
Keiner.
Siehe auch ctrlbrk
setjmp
signal
lowvideo
Syntax #include <conio.h>
void lowvideo(void);
Beschreibung
Setzt das Textattribut für nachfolgende Zeichenausgaben auf "niedrige Intensität".
lowvideo löscht das Bit für "hohe Intensität" der aktuellen Vordergrundfarbe. Bereits ausgegebene
DDCHelp Hilfe zur Programmiersprache C Seite 276 von 606
Zeichen bleiben unverändert - es sind nur solche Zeichen betroffen, die von Funktionen mit direkter Textausgabe nach dem Aufruf von lowvideo ausgegeben werden.
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Keiner.
Siehe auch highvideo
normvideo
textattr
textcolor
_lrotl, _lrotr
Siehe auch Syntax #include <stdlib.h>
unsigned long _lrotl(unsigned long val, int count);
unsigned long _lrotr(unsigned long val, int count);
Beschreibung
Rotiert einen unsigned long-Wert bitweise nach links oder rechts.
_lrotl rotiert den als val übergebenen Wert um count Bitpositionen nach links. _lrotr rotiert den als val übergebenen Wert um count Bitpositionen nach rechts.
Rückgabewert
_lrotl liefert den rotierten Integerwert zurück:
_lrotl liefert den um count Bitpositionen nach links rotierten Wert von val zurück.
_lrotr liefert den um count Bitpositionen nach rechts rotierten Wert von val zurück.
Siehe auch _crotr
_crotl
_rotl
_rotr
lsearch
Syntax #include <stdlib.h>
void *lsearch(const void *key, void *base, size_t *num, size_t width, int
(_USERENTRY *fcmp)(const void *, const void *));
Beschreibung
Führt eine lineare Suche durch.
lsearch dient zum Durchsuchen von Tabellen. Da es sich um eine lineare Suche handelt, können
DDCHelp Hilfe zur Programmiersprache C Seite 277 von 606
die Elemente im Gegensatz zu bsearch auch in unsortierter Form vorliegen.
Wird das durch den Parameter key bezeichnete Element in der Tabelle nicht gefunden, dann wird es neu in die Tabelle aufgenommen.
Der Parameter base muss auf das erste Element der Tabelle zeigen.
num zeigt auf einen Integer, der die Anzahl der Tabellenelemente enthält.
width gibt die Größe eines einzelnen Elements in Bytes an.
{bmc bullet.mrb key zeigt auf das zu suchende Element (den Suchschlüssel)..
Die Funktion fcmp muss mit der _USERENTRY-Aufrufkonvention verwendet werden.
Der Parameter fcmp zeigt auf eine vom Programmierer erstellte Routine, die jeweils zwei Elemente vergleicht und einen auf diesem Vergleich basierenden Wert zurückliefert.
Während der Suche ruft lsearch diese Routine, deren Adresse in fcmp übergeben wird, mehrfach auf.
Bei jedem Aufruf der Vergleichsroutine übergibt lsearch dieser zwei Argumente: key, einen Zeiger auf den Suchschlüssel, und elem, einen Zeiger auf das zu vergleichende Tabellenelement.
Auf welche Art und Weise die Vergleichsroutine arbeitet, ist allein Sache des Programmierers.
Rückgabewert
Die Funktion liefert die Adresse des ersten Elements der Tabelle zurück, das mit dem Suchschlüssel identisch ist. Wenn *key ungleich *elem ist, muss fcmp einen Wert ungleich Null zurückliefern, ansonsten den Wert 0.
Siehe auch bsearch
lfind
qsort
lseek
Syntax #include <io.h>
long lseek(int handle, long offset, int fromwhere);
Beschreibung
Setzt die aktuelle Position des Dateizeigers innerhalb einer Datei.
lseek setzt den Dateizeiger der durch handle bezeichneten Datei auf eine neue Position, die offset Bytes von der durch fromwhere angegebenen Dateiposition entfernt ist. fromwhere muss dabei einer der folgenden in io.h definierten symbolischen Konstanten sein:
fromwhere Dateiposition
SEEK_CUR Aktuelle Position des Dateizeigers
SEEK_END Dateiende
SEEK_SET Dateianfang
Rückgabewert
lseek liefert bei fehlerfreier Ausführung die neue Zeigerposition, gemessen in Bytes vom Dateianfang, zurück. Im Fehlerfall wird der Wert -1L zurückgeliefert, und die globale Variable errno erhält einen der folgenden Werte:
EBADF Ungültiges Handle
EINVAL Ungültiges Argument
DDCHelp Hilfe zur Programmiersprache C Seite 278 von 606
ESPIPE Suche auf Gerät nicht erlaubt
Bei der Anwendung auf Gerätedateien (wie Terminals, Druckern, Schnittstellen usw.) ist der Rückgabewert undefiniert.
Siehe auch filelength
fseek
ftell
getc
open
sopen
ungetc
_rtl_write
write
ltoa
Syntax #include <stdlib.h>
char *ltoa(long value, char *string, int radix);
Beschreibung
Konvertiert einen long-Wert in einen String.
ltoa konvertiert den übergebenen Wert value in einen nullterminierten String und speichert den Rückgabewert an der durch string angegebenen Adresse. ltoa erwartet für value einen long-Wert.
Der Parameter radix legt die Basis fest, auf der die Konvertierung stattfinden soll - mögliche Werte liegen im Bereich von 2 bis 36. Wenn radix den Wert 10 hat und value kleiner als Null ist, stellt ltoa dem Ergebnis ein Minuszeichen voran.
Hinweis: Der für string reservierte Speicher muss groß genug sein, um das Ergebnis der Konvertierung inklusive des abschließenden Nullzeichens (\0) aufnehmen zu können. ltoa liefert bis zu 33 Bytes zurück.
Rückgabewert
Die Funktion liefert den Zeiger string zurück.
Siehe auch itoa
ultoa
_makepath
Syntax #include <stdlib.h>
void _makepath(char *path, const char *drive, const char *dir,
const char *name, const char *ext);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 279 von 606
Erzeugt einen Pfadnamen aus einzelnen Komponenten.
_makepath erzeugt einen Pfadnamen aus Einzelkomponenten. Der neue Pfadname heißt
X:\DIR\SUBDIR\NAME.EXT
wobei gilt:
drive = X:
dir = \DIR\SUBDIR\
name = NAME
ext = . EXT
Ist drive leer oder NULL, wird keine Laufwerksbezeichnung in den Pfadnamen eingefügt. Fehlt nach drive der abschließende Doppelpunkt (:), wird er automatisch in den Pfadnamen eingefügt.
Ist dir leer oder NULL, wird kein Verzeichnis in den Pfadnamen eingefügt. Fehlt nach dir der abschließende Schrägstrich (\ oder /), wird automatisch ein umgekehrter Schrägstrich (Backslash) in den Pfadnamen eingefügt.
Ist name leer oder NULL, wird kein Dateiname in den Pfadnamen eingefügt.
Ist ext leer oder NULL, wird keine Namenserweiterung in den Pfadnamen eingefügt. Fehlt der Punkt (.) zu Beginn der Namenserweiterung, wird er automatisch in den Pfadnamen eingefügt.
_makepath setzt voraus, dass der mit path übergebene String eine ausreichende Größe für den konstruierten Pfadnamen hat. Die Maximalgröße ist _MAX_PATH, wobei _MAX_PATH in stdlib.h definiert ist.
_makepath und _splitpath verhalten sich invers zueinander. Die Anwendung von _makepath auf die durch _splitpath ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.
Rückgabewert
Keiner.
Siehe auch _fullpath
_splitpath
malloc
Syntax #include <stdlib.h> oder #include<alloc.h>
void *malloc(size_t size);
Beschreibung
Reserviert Hauptspeicher.
malloc reserviert einen Speicherbereich von size Bytes auf dem Heap. Damit kann ein Programm Speicherplatz genau nach Bedarf und exakt in der benötigten Größe reservieren.
Der Heap wird für die dynamische Reservierung von Speicherbereichen variabler Größe benutzt. Viele Datenstrukturen wie beispielsweise Bäume und Listen reservieren Speicher auf dem Heap.
In den kleinen Datenmodellen wird mit near-Zeigern gearbeitet, der Heap liegt zwischen dem oberen Ende des Datensegments und dem unteren Ende des Stack. Der Heap reserviert den gesamten hier zur Verfügung stehenden Speicherbereich bis auf einige Bytes direkt unterhalb der Stack-Spitze, die für Stack-Vergrößerungen und für das Betriebssystem reserviert sind.
In den großen Datenmodellen wird mit far-Zeigern gearbeitet, der Heap beginnt oberhalb des Stack und endet mit der höchsten vom System zur Verfügung gestellten Speicheradresse.
DDCHelp Hilfe zur Programmiersprache C Seite 280 von 606
Rückgabewert
malloc liefert bei fehlerfreier Ausführung einen Zeiger, der auf den neu reservierten Speicherbereich zeigt. Wenn kein Speicherbereich ausreichender Größe zur Verfügung steht, dann ist der Rückgabewert NULL. Es findet keine Initialisierung des Speicherblocks statt. Wenn der Parameter size den Wert 0 hat, liefert malloc NULL zurück.
Siehe auch calloc
farcalloc
farmalloc
free
realloc
_matherr, _matherrl
Syntax #include <math.h>
int _matherr(struct _exception *e);
int _matherrl(struct _exceptionl *e);
Beschreibung
Vom Programmierer modifizierbare Routinen zur Behandlung von Berechnungsfehlern.
_matherr wird aufgerufen, wenn die Mathematikbibliothek einen Fehler erzeugt.
_matherrl ist die long double Version. Sie wird aufgerufen, wenn eine mathematische Funktion vom Typ long double einen Fehler erzeugt.
Sie können _matherr und _matherrl modifizieren und eigene Routinen zur Fehlerbehandlung schreiben (im Beispiel finden Sie eine entsprechende Implementierung von _matherr).
_matherr und _matherrl sind besonders zum Aufspüren von Definitions- und Wertebereichsfehlern geeignet. Besondere Fehler der Gleitkommaberechnung (wie Division durch Null) werden nicht gefunden. Solche Fehler müssen mit signal abgefangen werden.
_matherr und _matherrl können vom Programmierer für die Behandlung spezieller Fehler beliebig erweitert und modifiziert werden. Anstelle der Version in der C-Bibliothek wird dann die modifizierte Funktion verwendet. Wenn die Routine den Fehler korrigieren kann, sollte sie einen Wert ungleich Null zurückliefern. Falls der Fehler nicht korrigiert werden kann, muss ihr Rückgabewert der Wert 0 sein. Liefern _matherr oder _matherrl einen Wert ungleich Null zurück, dann wird die globale Variable errno nicht geändert und es wird keine Fehlermeldung ausgegeben.
Die Strukturtypen _exception und _exceptionl sind in math.h folgendermaßen definiert:
struct _exception {
int type; /* Fehlerart */
char *name; /* Funktionsname */
double arg1, /* erstes Argument */
arg2, /* zweites Argument (wenn vorhanden) */
retval; /* Ergebnis */
};
struct _exceptionl {
int type; /* Fehlerart */
char *name; /* Funktionsname */
long double arg1, /* erstes Argument */
arg2, /* zweites Argument (wenn vorhanden) */
retval; /* Ergebnis */
};
Die Elemente _exception und _exceptionl werden in der folgenden Tabelle beschrieben:
DDCHelp Hilfe zur Programmiersprache C Seite 281 von 606
Element Inhalt
type beschreibt die Art des aufgetretenen Fehlers und ist in math.h als Aufzählungstyp _mexcep definiert (siehe Liste weiter unten).
name zeigt auf einen nullterminierten String mit dem Namen der mathematischen Funktion, durch die der Fehler ausgelöst wurde.
arg1, arg2 enthalten die Werte der Argumente, die der mathematischen Funktion übergeben wurden. Wenn die Funktion nur einen Wert erwartet, dann ist dieser Wert in arg1 gespeichert.
retval enthält den Standardwert, den _matherr oder _matherrl zurückliefern. Dieser Wert kann vom Programmierer geändert werden.
Der ebenfalls in math.h definierte Aufzählungstyp _mexcep beschreibt die die folgenden Fehlerarten:
Symbolische Konstante Mathematische Fehler
DOMAIN Das Argument liegt außerhalb des gültigen Definitionsbereichs für die Funktion. Beispiel: log(-1).
SING Der Rückgabewert wäre eine mathematische Singularität. Beispiel: pow(0, -2).
OVERFLOW Das Argument würde einen Rückgabewert erzeugen, dessen Wert größer als DBL_MAX (bzw. LDBL_MAX) ist. Beispiel: exp(1000).
UNDERFLOW Das Argument würde einen Rückgabewert erzeugen, dessen Wert kleiner als DBL_MIN (bzw. LDBL_MIN) ist. Beispiel: exp(-1000).
TLOSS Das Argument würde einen Rückgabewert erzeugen, bei dem sämtliche Dezimalstellen ungenau sind. Beispiel: sin(10e70).
Die Makros DBL_MAX, DBL_MIN, LDBL_MAX und LDBL_MIN sind in float.h definiert.
Rückgabewert
Die vordefinierten Versionen von _matherr und _matherrl liefern für UNDERFLOW und TLOSS den Wert 1 zurück - in allen anderen Fällen wird der Wert 0 zurückgeliefert. _matherr und _matherrl könnenden Wert von e->retval beliebig verändern. e->retval wird dann von der Routine zurückgeliefert, die den Fehler verursacht hat.
Wenn _matherr oder _matherrl den Wert 0 zurückliefern (und damit anzeigen, dass der Fehler nicht behoben werden konnte), erhält die globale Variable errno den Wert 0 und eine Fehlermeldung wird ausgegeben.
Liefern _matherr oder _matherrl einen Wert ungleich Null zurück, wird errno nicht gesetzt und keine Fehlermeldung ausgegeben.
max
Syntax #include <stdlib.h> /* Makroversion */
(type) max(a, b);
oder
template <class T> T max( T t1, T t2 ); /* template version, nur in C++
*/
Beschreibung
Liefert den größeren von zwei Werten zurück.
Das C-Makro und die C++ Template-Funktion vergleichen zwei Werte a und b und liefern den größeren der beiden Werte zurück. Sowohl die beiden Argumente als auch die Deklaration der Routine müssen vom gleichen Typ sein.
DDCHelp Hilfe zur Programmiersprache C Seite 282 von 606
Rückgabewert
max liefert den größeren der beiden Werte zurück.
Siehe auch min
mblen
Syntax #include <stdlib.h>
int mblen(const char *s, size_t n);
Beschreibung
Ermittelt die Länge eines Multibyte-Zeichens.
Ist s ungleich NULL, bestimmt mblen die Anzahl der Bytes des Zeichens, auf das s zeigt. Der Parameter n legt fest, wie viele Bytes maximal geprüft werden.
Das Verhalten von mblen ist von der Locale-Kategorie LC_CTYPE abhängig.
Rückgabewert
mblen liefert einen Wert ungleich Null zurück, wenn s den Wert NULL hat und Multibyte-Zeichen Statuscodierungen enthalten. Andernfalls liefert mblen den Wert 0 zurück.
Ist s ungleich NULL, dann liefert mblen den Wert 0, wenn s auf ein Nullzeichen (\0) zeigt. Enthalten die nächsten n Bytes kein gültiges Multibyte-Zeichen, so wird -1 zurückgeliefert. Ansonsten wird die Anzahl der Bytes zurückgeliefert, die ein gültiges Multibyte-Zeichen enthalten.
Siehe auch mbstowcs
mbtowc
setlocale
mbstowcs
Syntax #include <stdlib.h>
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);
Beschreibung
Konvertiert einen Multibyte-String in ein wchar_t-Array.
mbstowcs konvertiert den Multibyte-String s in das durch pwcs bezeichnete Array. In diesem Array werden maximal n Werte gespeichert. Trifft mbstowcs auf eine ungültige Multibyte- Sequenz, wird (size_t)-1 zurückgeliefert.
Wenn mbstowcs den Wert n zurückliefert, wird das Array pwcs nicht durch ein Nullzeichen abgeschlossen.
Das Verhalten von mbstowcs ist von der Locale-Kategorie LC_CTYPE abhängig.
Rückgabewert
Die Funktion mbstowcs liefert (size_t)-1 zurück, wenn sie auf eine ungültige Multibyte-Sequenz
DDCHelp Hilfe zur Programmiersprache C Seite 283 von 606
trifft. Andernfalls wird die Anzahl der geänderten Array-Elemente zurückgeliefert (das abschließende Zeichen ist - falls vorhanden - darin nicht enthalten).
Siehe auch mblen
mbtowc
setlocale
mbtowc
Syntax #include <stdlib.h>
int mbtowc(wchar_t *pwc, const char *s, size_t n);
Beschreibung
Konvertiert ein Multibyte-Zeichen in einen Wert des Typs wchar_t.
Ist s ungleich NULL, stellt mbtowc die Anzahl der Bytes fest, aus der das durch s angegebene Multibyte-Zeichen besteht. Anschließend prüft mbtowc den Wert des Typs wchar_t, der dem Multibyte-Zeichen entspricht. Besteht eine Übereinstimmung zwischen wchar_t und dem Multibyte-Zeichen und ist pwc ungleich NULL, wird der Wert von wchar_t in dem Array gespeichert, auf das pwc zeigt. Der Parameter n legt fest, wie viele Bytes maximal untersucht werden.
Rückgabewert
Zeigt s auf ein ungültiges Multibyte-Zeichen, wird -1 zurückgeliefert. Zeigt s auf ein Nullzeichen, hat mbtowc den Rückgabewert 0. In allen anderen Fällen liefert mbtowc die Anzahl der Bytes zurück, aus denen sich das konvertierte Multibyte-Zeichen zusammensetzt.
Der Rückgabewert ist nie größer als MB_CUR_MAX oder der Wert von n.
Das Verhalten von mbstowcs ist von der Locale-Kategorie LC_CTYPE abhängig.
Siehe auch mblen
mbstowcs
setlocale
memccpy, _fmemccpy
Siehe auch Syntax #include <mem.h>
void *memccpy(void *dest, const void *src, int c, size_t n);
void far * far _fmemccpy(void far *dest, const void far *src, int c,
size_t n);
Beschreibung
Kopiert einen Block mit n Bytes.
memccpy ist unter UNIX System V verfügbar.
Die Funktion kopiert einen Block mit n Bytes von src nach dest. Der Kopiervorgang wird abgebrochen wenn Folgendes eintritt:
DDCHelp Hilfe zur Programmiersprache C Seite 284 von 606
Das Zeichen c wird zum erstenmal nach dest kopiert.
n Bytes wurden nach dest kopiert.
Rückgabewert
memccpy liefert NULL zurück, wenn n Bytes kopiert wurden (und kein Byte des Wertes c dabei gefunden wurde). Wurde memccpy dagegen durch die Kopie eines Byte mit dem Wert c beendet, dann wird ein Zeiger zurückgeliefert, der auf das nächste Byte nach dem kopierten Wert c in dest zeigt.
Siehe auch memcpy
memmove
memset
memchr, _fmemchr
Syntax #include <mem.h>
void *memchr(const void *s, int c, size_t n); /* C
*/
void far * far _fmemchr(const void far *s, int c, size_t n); /* C */
const void *memchr(const void *s, int c, size_t n); //
C++ only
void *memchr(void *s, int c, size_t n); //
C++ only
const void far * far _fmemchr(const void far *s, int c, size_t n); //
C++ only
void far * far _fmemchr(void far *s, int c, size_t n); // C++ only
void *memchr(const void *s, int c, size_t n);
void far * far _fmemchr(const void far *s, int c, size_t n);
Beschreibung
Sucht n Bytes nach dem Wert c ab.
memchr ist unter UNIX System V verfügbar.
Die Funktion sucht die ersten n Bytes des Blocks s nach dem Wert c ab.
Rückgabewert
memchr liefert die Adresse des ersten Vorkommens von c im Array s zurück - oder NULL, wenn c innerhalb der ersten n Bytes von s nicht vorkommt.
Hinweis: Wenn Sie die Intrinsic-Version der Funktionen benutzen, wird für n=0 der Wert NULL zurückgeliefert.
memcmp, _fmemcmp
Siehe auch Syntax #include <mem.h>
int memcmp(const void *s1, const void *s2, size_t n);
int far _fmemcmp(const void far *s1, const void far *s2, size_t n)
Beschreibung
memcmp ist unter UNIX System V verfügbar; die Funktion vergleicht die ersten n Bytes der Blöcke s1 und s2 miteinander und behandelt diese als unsigned char.
DDCHelp Hilfe zur Programmiersprache C Seite 285 von 606
Rückgabewert
Da die Bytes als unsigned char verglichen werden, liefert memcmp einen der folgenden Werte zurück:
< 0 falls s1 kleiner als s2 ist
== 0 falls die ersten n Zeichen von s1 und s2 übereinstimmen
> 0 falls s1 größer als s2 ist
Beispielsweise liefert memcmp("\xFF", "x7F", 1) einen Wert größer Null.
Hinweis: Wenn Sie die Intrinsic-Version der Funktionen benutzen, wird für n=0 der Wert 0 zurückgeliefert.
Siehe auch memicmp
memcpy, _fmemcpy
Siehe auch Syntax #include <mem.h>
void *memcpy(void *dest, const void *src, size_t n);
void far *far _fmemcpy(void far *dest, const void far *src, size_t n);
Beschreibung
Kopiert n Bytes von src nach dest.
memcpy ist unter UNIX System V verfügbar.
Die Funktion kopiert n Bytes von src nach dest. Überlappen sich scr und dest, ist das Verhalten von memcpy undefiniert.
Rückgabewert
memcpy liefert den übergebenen Parameter dest zurück.
Siehe auch memccpy
memmove
memset
movedata
movmem
memicmp, _fmemicmp
Siehe auch Syntax #include <mem.h>
int memicmp(const void *s1, const void *s2, size_t n);
int far _fmemicmp(const void far *s1, const void far *s2, size_t n)
Beschreibung
Vergleicht die ersten n Bytes zweier Arrays, wobei zwischen Groß- und Kleinschreibung nicht unterschieden wird. memicmp ist unter UNIX System V verfügbar.
Die Funktion vergleicht die ersten n Bytes der Blöcke s1 und s2 miteinander, wobei zwischen Groß- und Kleinschreibung nicht unterschieden wird.
DDCHelp Hilfe zur Programmiersprache C Seite 286 von 606
Rückgabewert
memicmp bricht den Vergleich beim ersten nicht übereinstimmenden Zeichen ab. Das Vergleichsergebnis wird als int zurückgeliefert:
< 0, falls s1 kleiner als s2 ist
== 0, falls die ersten n Zeichen von s1 und s2 übereinstimmen
> 0, falls s1 größer als s2 ist
Siehe auch memcmp
memmove, _fmemmove
Siehe auch Syntax #include <mem.h>
void *memmove(void *dest, const void *src, size_t n);
void far * far _fmemmove (void far *dest, const void far *src, size_t n)
Beschreibung
Kopiert einen Block von n Bytes.
Die Funktion kopiert n Bytes von src nach dest und ist daher im Prinzip identisch mit memcpy - hier werden jedoch Überlappungen von Quell- und Zielgebiet automatisch berücksichtigt.
Rückgabewert
memmove liefert den übergebenen Parameter dest zurück, also einen Zeiger auf den Zielblock.
Siehe auch memccpy
memcpy
movmem
memset, _fmemset
Siehe auch Syntax #include <mem.h>
void *memset(void *s, int c, size_t n);
void far * far _fmemset (void far *s, int c, size_t n)
Beschreibung
Setzt die ersten n Bytes des Speicherblocks s auf den Wert von c.
memset setzt die ersten n Bytes des Array s auf den Wert von c.
Rückgabewert
memset liefert den übergebenen Parameter s zurück.
Siehe auch memccpy
memcpy
DDCHelp Hilfe zur Programmiersprache C Seite 287 von 606
setmem
min
Syntax #include <stdlib.h> /* Makroversion */
(type) min(a, b);
oder
template <class T> T min( T t1, T t2 ); /* template version, C++ only */
Beschreibung
Liefert den kleineren von zwei Werten zurück.
Das C-Makro und die C++ Template-Funktion vergleichen zwei Werte a und b und liefern den kleineren der beiden Werte zurück. Sowohl die beiden Argumente als auch die Deklaration der Routine müssen vom gleichen Typ sein.
Rückgabewert
min liefert den kleineren der beiden Werte zurück.
Siehe auch max
mkdir
Syntax #include <dir.h>
int mkdir(const char *path);
Beschreibung
Erzeugt ein Verzeichnis.
mkdir ist unter UNIX verfügbar, benötigt dort aber einen zusätzlichen filemode-Parameter.
mkdir erzeugt ein Verzeichnis mit dem in path angegebenen Namen.
Rückgabewert
mkdir liefert den Wert 0 zurück, wenn das neue Verzeichnis erzeugt werden konnte.
Wenn ein Fehler auftritt, so ist der Rückgabewert -1 und die globale Variable errno wird auf einen der beiden folgenden Werte gesetzt:
EACCES Zugriff nicht gestattet
ENOENT Datei oder Verzeichnis nicht gefunden
Siehe auch chdir
getcurdir
getcwd
rmdir
DDCHelp Hilfe zur Programmiersprache C Seite 288 von 606
MK_FP
Syntax #include <dos.h>
void far * MK_FP(unsigned seg, unsigned ofs);
Beschreibung
Erzeugt einen far-Zeiger.
MK_FP ist ein Makro, über das ein far-Zeiger aus seinen Komponenten seg (Segment) und ofs (Offset) erzeugt werden kann.
Rückgabewert
MK_FP liefert einen far-Zeiger zurück.
Siehe auch FP_OFF
FP_SEG
movedata
segread
mktemp
Syntax #include <dir.h>
char *mktemp(char *template);
Beschreibung
Erzeugt einen eindeutigen Dateinamen.
mktemp ersetzt den durch template bezeichneten String durch einen eindeutigen Dateinamen und liefert diesen zurück.
template sollte ein nullterminierter String mit sechs abschließenden X-Zeichen sein. Diese X-Zeichen werden, beginnend mit AA.AAA, durch zwei Buchstaben, einen Punkt und drei Buchstaben für die Dateinamenserweiterung ersetzt.
mktemp verwandelt XXXXXX als erstes in AA.AAA (macht also aus tdatXXXXXX den Namen tdatAA.AAA) und prüft dann innerhalb des angegebenen bzw. aktuellen Verzeichnisses, ob eine Datei dieses Namens bereits existiert. Wenn ja, wird der Versuch mit AA.AAB, AA.AAC usw. solange wiederholt, bis sich der Name einer noch nicht existierenden Datei ergibt.
Rückgabewert
Falls template richtig aufgebaut ist, liefert mktemp die Adresse des Strings template zurück. Andernfalls wird NULL zurückgeliefert.
mktime
Syntax #include <time.h>
time_t mktime(struct tm *t);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 289 von 606
Konvertiert Uhrzeit in das Kalenderformat.
mktime konvertiert die Uhrzeit in der Struktur, auf die t zeigt, in eine Kalenderzeit mit dem Format der Funktion time. Die ursprünglichen Werte der Felder tm_sec, tm_min, tm_hour, tm_mday und tm_mon sind nicht auf den durch die tm-Struktur festgelegten Bereich beschränkt. Befinden sich die Felder nicht im korrekten Bereich, werden sie angepasst. Die Werte der Felder tm_wday und tm_yday werden nach der Anpassung der anderen Felder berechnet. Kann die Kalenderzeit nicht dargestellt werden, liefert mktime -1 zurück.
Die zulässige Bereich für die Kalenderzeit liegt zwischen dem 1. Januar 1970 00:00:00 und dem 19. Januar 2038 03:14:07.
Rückgabewert
Siehe Beschreibung.
Siehe auch localtime
strftime
time
modf, modfl
Siehe auch Syntax #include <math.h>
double modf(double x, double *ipart);
long double modfl(long double x, long double *ipart);
Beschreibung
Teilt einen double- oder long double-Wert in Vor- und Nachkommaanteil auf.
modf spaltet den double-Wert x in zwei Teile: in den Vorkomma- und den Nachkomma-Anteil. modf speichert den ganzzahligen Vorkomma-Anteil in ipart und liefert den Nachkomma-Anteil zurück.
modfl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
modf und modfl liefern den Nachkomma-Anteil des Arguments x zurück.
Siehe auch fmod
ldexp
movedata
Syntax #include <mem.h>
void movedata(unsigned srcseg, unsigned srcoff, unsigned dstseg, unsigned
dstoff, size_t n);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 290 von 606
Kopiert n Bytes.
movedata kopiert n Bytes von der Quelladresse (srcseg: srcoff) zur Zieladresse (dstseg:dstoff). movedata funktioniert unabhängig vom verwendeten Speichermodell.
Rückgabewert
Keiner.
Siehe auch FP_OFF
memcpy
MK_FP
movmem
segread
movmem, _fmovmem
Siehe auch Syntax #include <mem.h>
void movmem(const void *src, void *dest, unsigned length);
void _fmovmem(const void far *src, void far *dest, unsigned length);
Beschreibung
Verschiebt einen Block der Länge length Bytes.
movmem verschiebt length Bytes von src nach dest. Quell- und Zielbereich können sich überlappen - movmem verschiebt die Daten in jedem Fall korrekt. _fmovmem bietet für das Speichermodell Large dieselbe Funktionalität wie movmem für die kleinen Speichermodelle.
Rückgabewert
Keiner.
Siehe auch memcpy
memmove
movedata
movetext
Syntax #include <conio.h>
int movetext(int links, int oben, int rechts, int unten, int destlinks,
int destoben);
Beschreibung
Kopiert einen rechteckigen Ausschnitt des Textbildschirms in einen anderen Ausschnitt.
movetext kopiert einen rechteckigen Ausschnitt des Textbildschirms, dessen obere linke Ecke durch (links, oben) und dessen untere rechte Ecke durch (rechts, unten) festgelegt ist, in einen rechteckigen Ausschnitt gleicher Größe, dessen obere linke Ecke mit (destlinks, destoben) angegeben wird.
movetext arbeitet mit absoluten Bildschirm-Koordinaten, d.h. unabhängig von einem eventuell gesetzten Textfenster. Überlappende Ausschnitte werden korrekt kopiert.
DDCHelp Hilfe zur Programmiersprache C Seite 291 von 606
movetext funktioniert nur im Textmodus und schreibt direkt in den Bildschirmspeicher.
Hinweis: Diese Funktion sollte in Win32s oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert movetext einen Wert ungleich Null zurück. Wenn movetext nicht ausgeführt werden konnte, weil entweder der Quellausschnitt oder der Zielausschnitt außerhalb des Bereichs des aktuellen Bildschirmmodus liegen, ist der Rückgabewert 0.
Siehe auch gettext
puttext
_msize
Syntax #include <malloc.h>
size_t _msize(void *block);
Beschreibung
Liefert die Größe eines Heap-Blocks zurück.
_msize liefert die Größe des reservierten Heap-Blocks mit der Adresse block zurück. Der Bock muss zuvor mit malloc, calloc oder realloc reserviert worden sein. Der zurückgelieferte Wert kann größer sein als der, der bei der Speicherreservierung angefordert wurde.
Rückgabewert
_msize liefert die Blockgröße in Bytes zurück.
Siehe auch malloc
free
realloc
normvideo
Syntax #include <conio.h>
void normvideo(void);
Beschreibung
Setzt normale Intensität für nachfolgende Textausgaben.
normvideo setzt das Textattribut (Vorder- und Hintergrund), das beim Start des Programms gültig war.
Bereits ausgegebene Zeichen bleiben unverändert - es wird lediglich das Zeichenattribut für Funktionen wie z.B. cprintf festgelegt, die direkte Bildschirmausgaben durchführen, nachdem die Funktion normvideo aufgerufen wurde.
Hinweis: Diese Funktion sollte in Win32s oder Win32 GUI-Anwendungen nicht verwendet
DDCHelp Hilfe zur Programmiersprache C Seite 292 von 606
werden.
Rückgabewert
Keiner.
Siehe auch highvideo
lowvideo
textattr
textcolor
offsetof
Syntax #include <stddef.h>
size_t offsetof(struct_type, struct_member);
Beschreibung
Ermittelt den Offset eines Strukturelements in Bytes.
offsetof ist nur als Makro verfügbar. Der Parameter struct_tpye ist ein struct-Typ. struct_member ist ein beliebiges Element dieser Struktur, das über den Elementauswahloperator oder über Zeiger angesprochen werden kann.
Wird für struct_member ein Bitfeld angegeben, so ist das Ergebnis undefiniert.
Kapitel 2 im Programmierhandbuch enthält Informationen über den Operator sizeof sowie über Speicherreservierung und Ausrichtung von Strukturen.
Rückgabewert
offsetof liefert die Anzahl der Bytes zurück, die zwischen der Startadresse der Struktur und der Adresse des Strukturelements liegen.
open
Syntax #include <fcntl.h>
#include<io.h>
int open(const char *path, int access [, unsigned mode]);
Beschreibung
Öffnet eine Datei für Lese- oder Schreibaktionen.
open öffnet die durch path angegebene Datei und bereitet sie je nach Inhalt des Parameters access für Lese- und/oder Schreibzugriffe vor.
Um beim Erzeugen einer Datei einen bestimmten Zugriffsmodus festzulegen, kann die globale Variable _fmode verwendet oder ein Aufruf von open mit den Optionen O_CREAT und O_TRUNC und dem gewünschten Übersetzungsmodus (O_BINARY bzw. O_TEXT) durchgeführt werden. Beispielsweise erzeugt der Aufruf
open("XMP", O_CREAT|O_TRUNC|O_BINARY,S_IREAD)
die Datei XMP im binären Modus für einen Nur-Lesen-Zugriff und kürzt Sie - falls sie bereits existiert - auf 0 Bytes.
Für den Parameter access sind zwei Arten von Flag-Konstanten in fcntl.h definiert, die über eine
DDCHelp Hilfe zur Programmiersprache C Seite 293 von 606
ODER-Operation miteinander verbunden werden müssen. Aus der ersten der beiden folgenden Listen muss genau ein Flag verwendet werden. Die restlichen Flags können in jeder logischen Kombination verwendet werden.
Liste 1:. Flags für Lesen und/oder Schreiben
O_RDONLY Nur Lesen
O_WRONLY Nur Schreiben
O_RDWR Lesen und Schreiben
Liste 2: Weitere Zugriff-Flags
O_NDELAY Nur aus Gründen der UNIX-Kompatibilität definiert; wird unter DOS nicht verwendet.
O_APPEND Neu geschriebene Daten werden grundsätzlich angehängt; das Überschreiben bereits existierender Daten ist nicht möglich.
O_CREAT Wenn die Datei noch nicht existiert, wird sie mit den über mode angegebenen Attributen erzeugt; falls die Datei bereits existiert, hat dieses Flag keine Wirkung.
O_TRUNC Wenn die Datei bereits existiert, wird ihr vorheriger Inhalt gelöscht; die Datei-attribute bleiben unverändert.
O_EXCL Nur zusammen mit O_CREAT verwendet; falls die Datei bereits existiert, wird ein Fehler zurückgeliefert.
O_BINARY Die Datei wird unabhängig von _fmode im binären Modus geöffnet - gelesene bzw. geschriebene Daten werden nicht interpretiert.
O_TEXT Die Datei wird (unabhängig von _fmode) im Textmodus geöffnet.
Wenn Sie weder O_BINARY noch O_TEXT angeben, wird die Datei in dem in _fmode gesetzten Modus geöffnet.
Bei der Anwendung von O_CREAT (d.h., bei der Erzeugung einer neuen Datei) muss der Parameter mode über die folgenden symbolischen Konstanten festgelegt werden, die in sys/stat.h definiert sind:
Wert von mode Zugriffserlaubnis
S_IWRITE Schreiben erlaubt
S_IREA Lesen erlaubt
S_IREAD S_IWRITE Lesen und Schreiben erlaubt
Rückgabewert
Wenn die Datei fehlerfrei geöffnet werden konnte, liefert open das Handle dieser Datei zurück (einen Integerwert größer als 0, über den weitere Operationen mit dieser Datei ausgeführt werden). Der Dateizeiger - dieser markiert die aktuelle Position in der Datei - wird auf den Dateianfang gesetzt.
Im Fehlerfall liefert die Funktion den Wert -1 zurück und setzt die globale Variable errno auf einen der folgenden Werte:
EACCES Zugriff nicht gestattet
EINVACC Ungültiger Zugriffscode
EMFILE Zu viele Dateien offen
ENOENT Pfad/Datei nicht gefunden
Siehe auch chmod
chsize
close
DDCHelp Hilfe zur Programmiersprache C Seite 294 von 606
creat
creatnew
creattemp
dup2
dup
fdopen
filelength
fopen
freopen
getftime
lock
lseek
_open_osfhandle
read
_rtl_creat
_rtl_open
_rtl_write
sopen
write
opendir
Syntax #include <dirent.h>
DIR *opendir(char *dirname);
Beschreibung
Öffnet einen Verzeichnis-Stream für Leseoperationen.
opendir ist unter UNIX auf POSIX-Systemen verfügbar.
Die Funktion öffnet den Verzeichnis-Stream dirname für Leseoperationen. Der Stream wird so gesetzt, dass der erste Eintrag des Verzeichnisses gelesen werden kann.
Ein Verzeichnis-Stream wird durch die in dirent.h definierte DIR-Struktur repräsentiert. Der Programmierer hat keinen Zugriff auf die Felder dieser Struktur. Es können gleichzeitig mehrere Verzeichnis-Streams geöffnet und gelesen werden. Während des Lesens können Verzeichniseinträge erstellt oder gelöscht werden.
Mit der Funktion readdir können aufeinanderfolgende Einträge aus einem Verzeichnis-Stream gelesen werden. Das Entfernen eines nicht mehr benötigten Verzeichnis-Stream erfolgt mit closedir.
Rückgabewert
Bei fehlerfreier Ausführung liefert opendir einen Zeiger auf den Verzeichnis-Stream zurück, der in Aufrufen von readdir, rewinddir und closedir verwendet werden kann. Kann das Verzeichnis nicht geöffnet werden, liefert opendir den Wert NULL und setzt die globale Variable errno auf einen der folgenden Werte:
ENOENT Das Verzeichnis existiert nicht.
ENOMEM Nicht genug Speicher für die Reservierung eines DIR-Objekts.
Siehe auch closedir
DDCHelp Hilfe zur Programmiersprache C Seite 295 von 606
readdir
rewinddir
_open_osfhandle
Syntax #include <io.h>
int _open_osfhandle(long osfhandle, int flags);
Beschreibung
Verbindet Datei-Handles.
Die Routine _open_osfhandle erzeugt zur Laufzeit ein Datei-Handle und verbindet es mit dem durch osfhandle angegebenen Datei-Handle des Betriebssystems. flags ist eine (bitweise) ODER-Kombination der folgenden in fcntl.h definierten Konstanten:
O_APPEND Setzt den Dateizeiger vor jeder Schreiboperation an das Dateiende.
O_RDONLEY Datei wird nur für Leseoperationen geöffnet.
O_TEXT_ Datei wird im Übersetzungsmodus "Text" geöffnet.
Rückgabewert
Bei fehlerfreier Ausführung liefert _open_osfhandle ein Laufzeit-Datei-Handle zurück. Andernfalls wird der Wert -1 zurückgeliefert.
Siehe auch _get_osfhandle
open
outp
Syntax #include <conio.h>
int outp(unsigned portid, int value);
Beschreibung
Schreibt ein einzelnes Byte an eine I/O-Adresse
Das Makro outp schreibt das niederwertige Byte von value an die von portid angegebenen Adresse.
outp ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn conio.h nicht aufgenommen wird (oder ein entsprechendes #undef outp eingefügt wird).
Rückgabewert
outp liefert value zurück.
Siehe auch inp
inpw
outpw
DDCHelp Hilfe zur Programmiersprache C Seite 296 von 606
outport, outportb
Siehe auch Syntax #include <dos.h>
void outport(int portid, int value);
void outportb(int portid, unsigned char value);
Beschreibung
Schreibt ein Wort bzw. ein Byte an eine I/O-Adresse.
outport arbeitet wie die 80x86-Anweisung OUT: Das niederwertige Byte des durch value gegebenen Worts wird nach portid und das höherwertige Byte nach portid + 1 ausgegeben.
Das Makro outportb schreibt das durch value gegebene Byte an die durch portid angegebenen Adresse.
outportb ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe,
wenn dos.h nicht aufgenommen oder ein entsprechendes #undef outportb eingefügt wird.
Rückgabewert
Keiner.
Siehe auch inport
inportb
Beispiele outport
outportb
outpw
Syntax #include <conio.h>
unsigned outpw(unsigned portid, unsigned value);
Beschreibung
Schreibt ein Wort an eine I/O-Adresse.
Das Makro outpw schreibt das durch value gegebene 16-Bit Wort an die von portid bezeichneten Adresse. Über eine einzelne 16-Bit OUT-Anweisung wird das niederwertige Byte von value zu portid und das höherwertige Byte zu portid + 1 ausgegeben.
outpw ist als Inline-Makro definiert - der Compiler verwendet nur dann echte Funktionsaufrufe, wenn conio.h nicht aufgenommen oder ein entsprechendes #undef outpw eingefügt wird.
Rückgabewert
outpw liefert value zurück.
Siehe auch inp
inpw
DDCHelp Hilfe zur Programmiersprache C Seite 297 von 606
outp
parsfnm
Syntax #include <dos.h>
char *parsfnm(const char *cmdline, struct fcb *fcb, int opt);
Beschreibung
Analysiert einen Dateinamen.
parsfnm durchsucht den durch cmdline angegebenen String nach einem Dateinamen. Der String enthält normalerweise eine Kommandozeile. Der Dateiname wird in einem durch fcb angegebenen File Control Block (FCB) als Laufwerksbezeichnung, Dateiname und Erweiterung gespeichert.
Der Parameter opt entspricht dem Register AL in der zugehörigen DOS-Funktion 0x29. In den DOS-Referenzhandbüchern finden Sie weitere Informationen über die Analyse des Dateinamens.
Rückgabewert
Wenn die Analyse fehlerfrei ausgeführt werden konnte, dann liefert parsfnm einen Zeiger auf das erste Zeichen von cmdline zurück, das nicht mehr zum Dateinamen gehört. Im Falle eines Fehlers ist der Rückgabewert NULL.
_pclose
Syntax #include <stdio.h>
int _pclose(FILE * stream);
Beschreibung
Wartet auf die Beendigung eines über eine Pipe gestarteten Befehls.
Diese Funktion ist in Win32s-Programmen nicht verfügbar.
_pclose schließt den Pipe-Stream, der durch einen vorherigen Aufruf von _popen erzeugt wurde, und wartet auf das Ende des zugehörigen Befehls.
Rückgabewert
Bei erfolgreicher Ausführung liefert _pclose den Status des Kindprozesses zurück. Dies entspricht dem von cwait zurückgelieferten Wert mit der Ausnahme, dass das niederwertige und das höherwertige Byte des niederwertigen Worts ausgetauscht werden. Im Fehlerfall liefert _pclose den Wert -1 zurück.
Siehe auch _pipe
_popen
peek
Syntax #include <dos.h>
int peek(unsigned segment, unsigned offset);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 298 von 606
Liest ein Wort an der Position segment:offset.
peek liest das Wort an der Speicheradresse segment:offset.
Die Funktion ist in dos.h als Inline-Makro definiert - nur wenn Datei nicht aufgenommen wurde (bzw. nach einem entsprechenden #undef peek), erzeugt der Compiler echte Funktionsaufrufe.
Rückgabewert
peek liefert das Wort an der durch segment:offset angegebenen Adresse zurück.
Siehe auch peekb
poke
peekb
Syntax #include <dos.h>
char peekb(unsigned segment, unsigned offset);
Beschreibung
Liest ein Byte an der Position segment:offset.
peekb liest das Byte an der Speicheradresse segment:offset.
Die Funktion ist in dos.h als Inline-Makro definiert - nur wenn diese Datei nicht aufgenommen wurde (bzw. nach einem entsprechenden #undef peekb), erzeugt der Compiler echte
Funktionsaufrufe.
Rückgabewert
peekb liefert den Inhalt des durch segment:offset adressierten Byte als char zurück.
Siehe auch peek
pokeb
perror
Syntax #include <stdio.h>
void perror(const char *s);
Beschreibung
Schreibt eine Systemfehlermeldung in stderr.
perror schreibt die Systemfehlermeldung der letzten Bibliotheksroutine, die die globale Variable errno gesetzt hat, in stderr (normalerweise der Bildschirm).
Zuerst wird das Argument s ausgegeben, dann folgt ein Doppelpunkt und die zum aktuellen Inhalt von errno gehörende Meldung. Zuletzt wird ein Zeilenvorschub ausgegeben. Per Konvention wird der Programm-Dateiname als Parameter s übergeben.
Das Array _sys_errlist enthält sämtliche Fehlermeldungen des Systems in der Reihenfolge aufsteigender Fehlernummern. perror verwendet den aktuellen Wert der globalen Variablen errno zur Adressierung. Keiner der Strings enthält ein Zeilenvorschubzeichen (\n).
DDCHelp Hilfe zur Programmiersprache C Seite 299 von 606
Die globale Variable _sys_nerr enthält die Anzahl der Einträge im Array _sys_errlist. Weitere Details zu errno, _sys_errlist und _sys_nerr finden Sie in Kapitel 4 im Referenzhandbuch.
Folgende Meldungen werden von perror erzeugt:
Meldungen unter Win 16 und Win 32
Arg list too big
Attempted to remove current directory
Bad address
Bad file number
Block device required
Broken pipe
Cross-device link
Error 0
Exec format error
Executable file in use
File already exists
File too large
Illegal seek
Inappropriate I/O control operation
Input/output error
Interrupted function call
Invalid access code
Invalid argument Resource busy
Invalid data Resource temporarily unavailable
Invalid environment
Invalid format
Invalid function number
Invalid memory block address
Is a directory
Math argument
Memory arena trashed
Name too long
No child processes
No more files
No space left on device
No such device
No such device or address
No such file or directory
No such process
Not a directory
Not enough memory
Not same device
Operation not permitted
Path not found
Permission denied
Possible deadlock
Read-only file system
Resource busy
Resource temporarily unavailable
DDCHelp Hilfe zur Programmiersprache C Seite 300 von 606
Result too large
Too many links
Too many open files
Meldungen nur unter Win 32
Hinweis: In Win32 oder Win32s-GUI-Anwendungen muss stderr umgelenkt werden.
Bad address
Block device required
Broken pipe
Executable file in use
File too large
Illegal seek
Inappropriate I/O control
Input/output error
Interrupted function call
Is a directory
Name too long
No child processes
No space left on device
No such device or address
No such process
Not a directory
Operation not permitted
Possible deadlock
Read-only file system
Resource busy
Resource temporarily unavailable
Too many links
Siehe auch clearerr
eof
freopen
_strerror
strerror
_pipe
Syntax #include <fcntl.h>
#include<io.h>
int _pipe(int *handles, unsigned int size, int mode);
Beschreibung
Erzeugt eine Pipe für Lese-/Schreiboperationen.
Die Funktion _pipe erzeugt eine unbenannte Pipe für den Informationsaustausch zwischen Prozessen. Die Pipe wird sowohl zum Schreiben als auch zum Lesen geöffnet. Wie bei einer Datei auf Diskette/Festplatte kann eine Pipe gelesen und beschrieben werden. Sie hat jedoch keinen
DDCHelp Hilfe zur Programmiersprache C Seite 301 von 606
Namen und ihr ist auch kein permanenter Speicher zugeordnet. Die über ein Pipe ausgetauschten Daten existieren nur in einem Speicherpuffer, der vom Betriebssystem verwaltet wird.
Das Lese-Handle wird in handles[0], und das Schreib-Handle in handles[1] zurückgegeben. Das Programm kann diese Handle bei folgenden Aufrufen von read, write, dup,, dup2, oder close. verwenden. Die Pipe wird gelöscht, wenn alle zu ihr gehörenden Handles geschlossen sind.
Der Parameter size bestimmt die Größe des internen Puffers. Der empfohlene Minimalwert beträgt 512 Bytes.
Der Übersetzungsmodus wird durch den Parameter mode wie folgt angegeben:
O_BINARY Die Pipe wird im Binärmodus geöffnet.
O_TEXT Die Pipe wird im Textmodus geöffnet.
Ist mode gleich Null, dann wird der Übersetzungsmodus durch die globale Variable _fmode bestimmt.
Rückgabewert
Bei erfolgreicher Ausführung liefert _pipe den Wert 0 zurück und übergibt die Pipe-Handles in handles[0] und handles[1]. Andernfalls wird -1 zurückgeliefert und die globale Variable errno erhält einen der folgenden Werte:
EMFILE Zu viele offene Dateien.
ENOMEM Nicht genug Platz im Hauptspeicher.
Siehe auch _pclose
_popen
poke
Syntax #include <dos.h>
void poke(unsigned segment, unsigned offset, int value);
Beschreibung
Schreibt einen int-Wert an die durch segment:offset angegebene Speicherposition.
poke speichert den durch value angegebenen Integer an der Adresse segment:offset.
Die Funktion ist in dos.h als Inline-Makro definiert. Nur wenn diese Datei nicht mit aufgenommen wurde (bzw. nach einem entsprechenden #undef poke), verwendet der Compiler echte
Funktionsaufrufe.
Rückgabewert
Keiner.
Siehe auch peek
pokeb
DDCHelp Hilfe zur Programmiersprache C Seite 302 von 606
pokeb
Syntax #include <dos.h>
void pokeb(unsigned segment, unsigned offset, char value);
Beschreibung
Speichert einen Byte-Wert an der Position segment:offset.
pokeb schreibt den Byte-Wert value an die Speicherposition mit der Adresse segment:offset.
Die Funktion ist in dos.h als Inline-Makro definiert. Nur wenn diese Datei nicht mit aufgenommen wurde (bzw. nach einem entsprechenden #undef pokeb), verwendet der Compiler "echte"
Funktionsaufrufe.
Rückgabewert
Keiner.
Siehe auch peekb
poke
poly, polyl
Syntax #include <math.h>
double poly(double x, int degree, double coeffs[]);
long double polyl(long double x, int degree, long double coeffs[]);
Beschreibung
Erzeugt ein Polynom aus den angegebenen Argumenten.
poly bildet ein Polynom mit dem Grad degree über den Wert von x zusammen mit den Koeffizienten coeffs[degree], coeffs [degree-1], ..., coeffs[0].
Ein Aufruf mit dem Wert 4 für degree berechnet beispielsweise den folgenden Ausdruck:
polyl ist die long double Version. Sie erwartet Argumente vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Rückgabewert
Zurückgeliefert wird das Ergebnis der Polynom-Berechnung für den gegebenen Wert x.
_popen
Syntax #include <stdio.h>
FILE *_popen (const char *command, const char *mode);
Beschreibung
Erzeugt eine Pipe zum Kommandozeileninterpreter.
Diese Funktion ist in Win32s Programmen nicht verfügbar.
_popen erzeugt eine Pipe zum Kommandozeileninterpreter. Der Kommandozeileninterpreter wird asynchron ausgeführt. Übergeben wird die durch command angegebene Kommandozeile. Der String mode legt fest, ob die Pipe mit der Standardeingabe oder der Standardausgabe des
DDCHelp Hilfe zur Programmiersprache C Seite 303 von 606
Kommandozeileninterpreters verbunden werden soll und ob sie im Binär- oder im Textmodus geöffnet werden soll.
Der String mode kann einen der folgenden Werte enthalten:
Wert Beschreibung
rt Lesen aus Standardausgabe des Befehls (Textmodus)
fb Lesen aus Standardausgabe des Befehls (Binärmodus)
wt Schreiben in Standardeingabe des Befehls (Textmodus)
wb Schreiben in Standardeingabe des Befehls (Binärmodus)
Das abschließende t bzw. b ist optional. Wird es weggelassen, so bestimmt die globale Variable _fmode den Übersetzungsmodus.
Mit Hilfe der Funktion _pclose können Sie die Pipe schließen und erhalten den vom ausgeführten Befehl zurückgelieferten Wert.
Rückgabewert
Bei fehlerfreier Ausführung liefert _popen einen FILE-Zeiger, mit dem entsprechend dem Inhalt von mode aus der Standardeingabe des Befehls gelesen bzw. in die Standardausgabe geschrieben werden kann. Im Fehlerfall liefert _popen NULL zurück.
Siehe auch _pclose
_pipe
pow, powl
Siehe auch Syntax #include <math.h>
double pow(double x, double y);
long double powl(long double x, long double y);
Beschreibung
Berechnet xy.
pow liefert das Ergebnis der Berechnung x hoch y zurück.
powl ist die long double Version. Sie erwartet Argumente vom Typ long double und liefert ein Ergebnis vom Typ long double zurück.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
Bei fehlerfreier Ausführung liefern pow und powl das Ergebnis der Berechnung x hoch y zurück.
Falls sich die Argumente nicht innerhalb der zulässigen Grenzen halten, so wird ein Überlauf erzeugt oder das Ergebnis ist nicht berechenbar. Bei einem Überlauf liefert pow HUGE_VAL und powl _LHUGE_VAL. Die globale Variable errno wird in diesen Fällen auf folgenden Wert gesetzt:
ERANGE Ergebnis außerhalb des Rechenbereichs
Ist der Parameter x reellwertig und kleiner als 0, und ist y keine ganze Zahl (oder beim Aufruf von pow( 0,0 ), so erhält die globale Variable errno den Wert:
EDOM Bereichsfehler
Die Fehlerbehandlung kann für diese Funktionen über die Routinen _matherr und _matherrl modifiziert werden.
DDCHelp Hilfe zur Programmiersprache C Seite 304 von 606
Siehe auch bcd
complex
exp
pow10
sqrt
pow10, pow10l
Siehe auch Syntax #include <math.h>
double pow10(int p);
long double pow10l(int p);
Beschreibung
Berechnet 10p.
pow10 berechnet den Ausdruck 10p.
Rückgabewert
pow10 liefert das Ergebnis der Berechnung von 10p zurück.
Das Resultat wird mit der Genauigkeit eines long double berechnet. Alle Argumente sind zulässig, können jedoch in manchen Fällen zu einem Überlauf oder Unterlauf führen.
pow10l ist die long double Version und liefert ein Ergebnis vom Typ long double zurück.
Siehe auch exp
pow
printf
Syntax #include <stdio.h>
int printf(const char *format[, argument, ...]);
Beschreibung
Erzeugt formatierte Ausgaben.
Die printf-Funktionen:
Übernimmt eine Reihe von Argumenten
Wendet auf jedes Argument eine Formatieranweisung an, die im durch den Parameter format angegebenen Format-String enthalten sind.
Gibt die formatierten Daten aus (auf den Bildschirm, in einen Stream, nach stdout oder in einen String).
Es müssen für das Format genügend Argumente vorhanden sein, da die Ergebnisse andernfalls unbestimmt und möglicherweise katastrophal sind. Parameter, die durch den Format-String nicht erfasst (d.h. überzählig) sind, werden ignoriert.
Hinweis: In Win32 oder Win32s-GUI-Anwendungen muss stdout umgelenkt werden.
DDCHelp Hilfe zur Programmiersprache C Seite 305 von 606
Rückgabewert
printf liefert bei fehlerfreier Ausführung die Anzahl der ausgegebenen Bytes, im Falle eines Fehlers EOF zurück.
Weitere Informationen über printf: Format-String
Formatieranweisungen
Konventionen für Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Präzisionsangaben
Typzeichen
Breitenangaben
Siehe auch cprintf
ecvt
fprintf
fread
freopen
fscanf
putc
puts
putw
scanf
sprintf
vprintf
vsprintf
printf Format-String
Der Format-String ist in jedem printf-Funktionsaufruf vorhanden und kontrolliert, wie die Funktion ihre Argumente konvertiert, formatiert und druckt.
Hinweis: Für das Format müssen ausreichend viele Argumente vorliegen. Andernfalls kann man unvorhersagbare und eventuell auch chaotische Ergebnisse erhalten. Überflüssige Argumente (mehr als die für das Format erforderliche Zahl) werden ignoriert.
Der Format-String ist ein nullterminierter String, der zwei Arten von Informationen enthält:
normale Zeichen, die direkt ausgegeben werden
Konvertierungsanweisungen, die die Auswertung korrespondierender Argumente und ihre Formatierung bestimmen.
Siehe auch Formatieranweisungen
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
DDCHelp Hilfe zur Programmiersprache C Seite 306 von 606
Präzisionsangaben
Typzeichen
Breitenangaben
...printf-Funktionen
printf Formatieranweisungen
Die Formatieranweisungen für printf haben die folgende Syntax:
% [flags] [width] [.prec] [F|N|h|l|L] type_char
Jede Anweisung beginnt mit einem Prozentzeichen (%). Auf dieses Zeichen folgen (in der angegebenen Reihenfolge):
Optionale Bestandteile des Format-Strings
In der folgenden Tabelle sind die optionalen Bestandteile einer Formatieranweisung und ihre Bedeutung aufgelistet:
Komponente Optional/Obligator. Wirkung
[flags] (Optional) Flag-Zeichen Ausrichtung der Ausgabe, Vorzeichen,
Dezimalpunkt, folgende Nullen, oktale und hexadezimale Präfixe
[width] (Optional) Width specifier Minimalzahl der ausgegebenen Zeichen,
notfalls mit Leerzeichen oder Nullen aufgefüllt
[prec] (Optional) Präzisionsangabe Maximalzahl der ausgegebenen
Zeichen. Bei Integerwerten die Minimalzahl der ausgegebenen Ziffern
[F|N|h|l|L] (Optional) Größenmodifizierer Verändern der Standardgröße des
Arguments:
N = near-Zeiger
F = far-Zeiger
h = short int
l = long
L = long double
type_char (Obligatorisch) Konvertierungstyp-Zeichen
Siehe auch Format-String
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Präzisionsangaben
Typzeichen
Breitenangaben
...printf-Funktionen
printf Flag-Zeichen
Sie können in jeder beliebigen Reihenfolge und Kombination auftreten.
Flag Bedeutung
DDCHelp Hilfe zur Programmiersprache C Seite 307 von 606
- Stellt das Ergebnis linksbündig dar und füllt von rechts mit Nullen auf. Wenn dieses Flag nicht gesetzt ist, wird das Ergebnis linksbündig dargestellt und von rechts mit Nullen oder Leerzeichen aufgefüllt.
+ Die Ergebnisse von vorzeichenbehafteten Konvertierungen beginnen immer mit einem Plus- oder Minuszeichen (+ oder -).
Leerzeichen Bei nicht-negativen Werten beginnt die Ausgabe immer mit einem Leerzeichen und nicht mit einem Pluszeichen. Negative Werte beginnen weiterhin mit einem Minuszeichen.
# Legt fest, dass arg konvertiert wirt, wobei das Format alternative Form verwendet wird.
Hinweis: Die Option (+) hat vor der Option Leerzeichen() Vorrang, wenn beide zusammen gesetzt sind.
Siehe auch Format-String
Formatieranweisung
Konventionen für Formatieranweisungen
Präzisionsangaben
Typzeichen
Breitenangaben
...printf-Funktionen
Alternative Formen für printf-Konvertierungen
Die Verwendung des Flags # zusammen mit einem Typzeichen hat auf das zu konvertierende Argument (arg) folgende Wirkungen:
Typzeichen Wirkung von # auf arg
c s d i u # hat keine Wirkung.
0 Eine 0 wird vorangestellt, wenn arg ungleich 0 ist.
x X 0x bzw. 0X wird vorangestellt.
e E f Es wird immer ein Dezimalpunkt ausgegeben (normalerweise ist
das bei diesen Formaten nur dann der Fall, wenn der Wert Stellen nach dem Komma enthält).
g G Wie bei e und E , jedoch werden abschließende Nullen nicht
unterdrückt.
Siehe auch Format-String
Formatieranweisung
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Präzisionsangaben
Typzeichen
Breitenangaben
...printf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 308 von 606
printf Breitenangaben
Die Breitenangabe legt die minimale Zahl auszugebender Zeichen fest.
Die Breite kann auf zwei Arten festgelegt werden:
direkt, innerhalb des Format-Strings
indirekt, über ein Sternchen (*).
Bei der Verwendung von * erwartet printf ein zusätzliches Argument, das in der Liste direkt vor dem auszugebenden Wert stehen und den Typ int haben muss.
Wenn eine Ausgabe weniger Zeichen erzeugt als durch die Breitenangabe festgelegt ist, dann fügt printf (abhängig von den Flags) führende bzw. abschließende Leerzeichen ein; erzeugt die Ausgabe dagegen mehr Zeichen, als durch die Breitenangabe festgelegt ist, dann wird diese einfach ignoriert. Ausgaben werden durch die Breitenangabe in keinem Fall begrenzt oder abgeschnitten.
Breitenangabe Wirkung
n printf gibt mindestens n Zeichen aus und stellt nötigenfalls Leerzeichen
voran (Standard) bzw. fügt abschließende Leerzeichen an (Flag -).
0n printf gibt mindestens n Zeichen aus und stellt nötigenfalls eine
entsprechende Anzahl führender Nullen voran.
* Die Breitenangabe steht in der Parameterliste direkt vor dem
auszugebenden Wert.
Siehe auch Format-String
Formatieranweisung
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Präzisionsangaben
Typzeichen
...printf-Funktionen
printf Präzisionsangaben
Die printf -Präzisionsangaben setzen die maximale Anzahl der zu druckenden Zeichen (oder die minimale Anzahl von Integer-Ziffern).
Eine printf-Präzisionsangabe wird immer mit einem Dezimalpunkt (.) eingeleitet und so von einer eventuell vorangestellten Breitenangabe getrennt.
Dann wird wie bei [width]die Präzision auf eine von zwei Arten angegeben:
direkt, innerhalb des Format-Strings
indirekt, über ein Sternchen (*).
Wenn Sie ein * für die Präzisionsangabe verwenden, gibt das nächste Argument im Aufruf (als int
behandelt) die Präzision an.
Wenn Sie Sternchen für die Breite, für die Präzision oder für beides verwenden, muss das Breitenargument unmittelbar hinter den Angaben folgen, danach das Präzisionsargument und schließlich das Argument für die zu konvertierenden Daten.
[.prec] Wirkung auf die Ausgabe
DDCHelp Hilfe zur Programmiersprache C Seite 309 von 606
(none) Die Standardwerte werden verwendet:
= 1 für d,i,o,u,x und X
= 6 für e,E und f
= alle signifikanten Stellen für g und G
= Ausgabe bis zum ersten Nullzeichen für s
= keine Auswirkungen auf c
.0 Standardwerte für d,i,o,u und x, keine Ausgabe des Dezimalpunkts für
e,E und f.
.n Ausgabe von n Zeichen bzw. n signifikanten Dezimalstellen. Falls der Ausgabewert
mehr als n Zeichen umfasst, wird die Ausgabe unter Umständen abgeschnitten oder gerundet.
.* Die Präzisionsangabe ist in der Parameterliste enthalten und muss dort als int vor
dem auszugebenden Wert stehen.
Für ein Feld wird kein numerisches Zeichen ausgegeben (d.h., das Feld ist leer), wenn die folgenden Bedingungen zutreffen:
wenn eine Präzision explizit mit 0 angegeben wird
wenn es sich um ein Integerformat handelt (d, i, o, u, oder x)
wenn der auszugebende Wert 0 ist
Wirkung von [.prec] auf die Konvertierung
Typzeichen Wirkung von [.prec] (.n) auf die Konvertierung
d Mindestens n Ziffern werden ausgegeben.
i Nötigenfalls stellt printf führende Nullen voran.
o Falls der auszugebende Wert mehr Stellen umfasst.
u als durch n angegeben, wird der angegebene
x Wert nicht abgeschnitten.
X
e n legt die Mindestanzahl der Stellen nach dem Komma
E fest. Die letzte Stelle wird gerundet.
f
g n legt die Mindestanzahl signifikanter Dezimalstellen fest
G (inklusive der Stellen vor dem Komma).
c Die Ausgabe von n hat keine Wirkung.
s Es werden höchstens n Zeichen ausgegeben.
Siehe auch Format-String
Formatieranweisung
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Typzeichen
Breitenangaben
...printf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 310 von 606
printf Typ-Konvertierungszeichen
Die Information in dieser Tabelle basiert auf der Annahme, dass in der Formatieranweisung keine Flag-Zeichen, Breitenangaben, Präzisionsangaben, oder Größenmodifizierer enthalten waren
Hinweis: Bestimmte Konventionen begleiten einige dieser Formatieranweisungen.
Typzeichen Erwartete Eingabe Ausgabeformat
Numerische Werte
d Integer signed int (dezimal)
i Integer signed int (dezimal)
o Integer unsigned int (oktal)
u Integer unsigned int (dezimal)
x Integer unsigned int (hexadezimal), Buchstaben a bis f
X Integer unsigned int (hexadezimal), Buchstaben A bis F
f Gleitkomma vorzeichenbehafteter Wert der Form [-]dddd.dddd.
e Gleitkomma vorzeichenbehafteter Wert der Form [-]d.dddde[+/-]ddd
g Gleitkomma vorzeichenbehafteter Wert im e- oder f-Format.
Präzision gibt die Anzahl signifikanter Ziffern an. Abschließende Nullen und Dezimalpunkt werden nur ausgegeben, wenn es nötig ist.
E Gleitkomma dasselbe Format wie e, aber mit dem Zeichen E vor
dem Exponenten
G Gleitkomma dasselbe Format wie e, aber mit dem Zeichen E vor
dem Exponenten, wenn das Format e verwendet wird.
Zeichen
c Zeichen einzelnes Zeichen
s String-Zeiger Ausgabe bis zu einem Nullzeichen oder dem Erreichen
der durch Präzision vorgegebenen Zeichenzahl
% (nichts) Ausgabe des Zeichens %
Zeiger
n *int Speichert an der Position, auf die das Eingabeargument
zeigt, die Anzahl der bis jetzt ausgegebenen Zeichen.
p Zeiger Gibt das Eingabeargument als Zeiger in hexadezimaler
Form aus (near-Zeiger als YYYY, far-Zeiger als XXXX:YYYY).
Unendlich große positive oder negative Gleitkommazahlen werden als +INF bzw. als -INF
ausgegeben, eine "IEEE-Nichtzahl" als +NAN oder -NAN.
Siehe auch Format-String
Formatieranweisung
Konventionen bei Formatieranweisungen
Flag-Zeichen
Größenmodifizierer
Präzisionsangaben
Breitenangaben
...printf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 311 von 606
printf Größenmodifizierer
Die folgenden Modifizierer legen fest, wie printf-Funktionen das nächste Argument arg[f]
interpretieren.
Modifizierer Typ von arg Wirkung auf die Interpretation von arg
F Zeiger (p, s, Ein far-Zeiger
N und n) Ein near-Zeiger (Hinweis: N kann mit keiner Konvertierung
im Speichermodell Huge verwendet werden.)
h d i o u x X Ein short int
l d i o u x X Ein long int
e E f g G Ein double
L e E f g G Ein long double
Diese Modifizierer legen fest, wie alle printf-Funktionen den Datentyp des korrespondierenden Eingabearguments arg interpretieren.
Sowohl F als auch N reinterpretieren die Eingabevariable arg. Normalerweise ist arg für eine %p-,
%s- oder %n-Konvertierung ein Zeiger der für das Speichermodell voreingestellten Größe.
h, l und L überschreiben die Standardgröße der numerischen Dateneingabeargumente. Weder h
noch l beeinflussen Zeichen- (c,s) oder Zeigertypen (p,n).
Siehe auch Format-String
Formatieranweisung
Konventionen bei Formatieranweisungen
Flag-Zeichen
Präzisionsangaben
Typzeichen
Breitenangaben
...printf-Funktionen
printf Konventionen bei Formatieranweisungen
Bestimmte Konventionen begleiten einige der printf-Formatieranweisungen für die folgenden Konvertierungen:
- %e oder %E
- %f
- %g oder %G
- %x oder %X
Hinweis: Unbegrenzte Gleitkommazahlen werden als +INF und -INF ausgegeben, eine "IEEE-Nichtzahl" als +NAN oder -NAN.
Siehe auch Format-String
Formatieranweisung
Flag-Zeichen
Größenmodifizierer
DDCHelp Hilfe zur Programmiersprache C Seite 312 von 606
Präzisionsangaben
Typzeichen
Breitenangaben
%e oder %E Konvertierungen
Das Argument wird zu dem folgenden Schema konvertiert
[-] d.ddd...e[+/-]ddd
Dabei gilt:
Dem Dezimalpunkt geht eine Ziffer voran.
Die Zahl der Ziffern hinter dem Dezimalpunkt entspricht der Präzision.
Der Exponent enthält immer mindestens zwei Ziffern.
Siehe auch ...printf-Funktionen
%f Konvertierungen
Das Argument wird in dezimale Notation nach folgendem Schema konvertiert
[-] ddd.ddd...
Dabei entspricht die Zahl der Ziffern nach dem Dezimalpunkt der Präzision (sofern eine Präzision ungleich Null gegeben war).
Siehe auch ...printf-Funktionen
%g oder %G Konvertierungen
Siehe auch
Das Argument wird im Stil e, E oder f gedruckt. Dabei gibt die Präzision die Zahl der signifikanten Ziffern an.
Nachfolgende Nullen werden vom Ergebnis entfernt und ein Dezimalpunkt erscheint nur, wenn dies notwendig ist.
Das Argument wird im Stil e oder f gedruckt (mit einigen Einschränkungen), wenn g das Konvertierungszeichen ist. Der Stil e wird nur verwendet, wenn der aus der Konvertierung resultierende Exponent entweder größer als die Präzision oder kleiner als -4 ist.
Das Argument wird im Stil E gedruckt, wenn G das Konvertierungszeichen ist.
Siehe auch ...printf-Funktionen
%x oder %X Konvertierungen
Bei x-Konvertierungen erscheinen die Buchstaben a, b, c, d, e und f in der Ausgabe.
Bei X-Konvertierungen erscheinen die Buchstaben A, B, C, D, E und F in der Ausgabe.
DDCHelp Hilfe zur Programmiersprache C Seite 313 von 606
Siehe auch ...printf-Funktionen
...printf-Funktionen
Die ...printf-Funktionen umfassen
fprintf sendet die formatierte Ausgabe an einen Stream
printf sendet die formatierte Ausgabe an stdin
sprintf sendet die formatierte Ausgabe an einen String
vfprintf sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an einen Stream.
vprintf sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an stdin.
vsprintf sendet die formatierte Ausgabe unter Verwendung einer Argumentliste an einen String.
putc
Syntax #include <stdio.h>
int putc(int c, FILE *stream);
Beschreibung
Schreibt ein Zeichen in einen Stream.
Das Makro putc schreibt das Zeichen c in den durch stream angegebenen Stream.
Rückgabewert
putc liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.
Siehe auch fprintf
fputc
fputchar
fputs
fwrite
getc
getchar
printf
putch
putchar
putw
vprintf
putch
Syntax #include <conio.h>
int putch(int c);
DDCHelp Hilfe zur Programmiersprache C Seite 314 von 606
Beschreibung
Gibt ein Zeichen auf den Bildschirm aus.
putch gibt das Zeichen c auf den Bildschirm in das aktuelle Textfenster aus. Eine Übersetzung von Zeilenvorschubzeichen (\n) in CR/LF-Zeichenpaare findet nicht statt. putch funktioniert nur im Textmodus.
Abhängig vom Wert der globalen Variablen _directvideo wird der String entweder direkt in den Bildschirmspeicher geschrieben oder über den Umweg eines BIOS-Aufrufs ausgegeben.
Hinweis: Diese Funktion sollte in Win32s oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
putch liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.
Siehe auch cprintf
cputs
getch
getche
putc
putchar
putchar
Syntax #include <stdio.h>
int putchar(int c);
Beschreibung
putchar schreibt ein Zeichen in stdout.
putchar ist ein Makro und als putc(c, stdout) definiert.
Hinweis: In Win32 oder Win32s-GUI-Anwendungen muss stdout umgelenkt werden.
Rückgabewert
putchar liefert bei fehlerfreier Ausführung das übergebene Zeichen c, im Fehlerfall den Wert EOF zurück.
Siehe auch fputchar
getc
getchar
printf
putc
putch
puts
putw
freopen
vprintf
DDCHelp Hilfe zur Programmiersprache C Seite 315 von 606
putenv
Syntax #include <stdlib.h>
int putenv(const char *name);
Beschreibung
Erweitert die aktuelle Umgebung um eine neue Umgebungsvariable.
putenv erwartet im String name die Definition einer Umgebungsvariablen (zum Beispiel
putenv("PATH=C:\\BC");) und fügt diese der Umgebung des aktuellen Prozesses hinzu.
Mit putenv kann auch eine vorhandene Variable geändert oder gelöscht werden. Unter DOS und OS/2 muss name in Großbuchstaben angegeben werden. Unter anderen System können Groß- und Kleinbuchstaben verwendet werden. Das Gleichheitszeichen (=) darf nicht in name enthalten sein. Eine Angabe der Form name= (das heißt ohne Zeichenfolge) löscht die Umgebungsvariable. Die von putenv erzeugte Umgebungsvariable können sowohl Groß- als auch Kleinbuchstaben enthalten.
putenv kann nur die Umgebung des laufenden Programms verändern. Nach dem Programmende ist wieder die ursprüngliche Umgebung gültig. Die Umgebung des aktuellen Prozesses wird einschließlich aller mit putenv durchgeführten Änderungen an Kindprozesse übergeben.
Es dürfen nur statische oder globale Strings an putenv übergeben werden. Wird ein lokaler oder dynamischer String an putenv übergeben und benutzt, nachdem der Speicher des Strings freigegeben wurde, so kann dies zu unvorhersehbaren Ergebnissen führen.
Hinweis: Diese Funktion sollte in Win32s oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
putenv liefert bei fehlerfreier Ausführung den Wert 0, andernfalls -1 zurück.
Siehe auch getenv
puts
Syntax #include <stdio.h>
int puts(const char *s);
Beschreibung
Schreibt einen String in stdout.
puts schreibt den nullterminierten String s zeichenweise in stdout und beendet die Ausgabe mit einem Zeilenvorschubzeichen.
Hinweis: In Win32 oder Win32s-GUI-Anwendungen muss stdout umgelenkt werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert die Funktion einen nicht-negativen Integerwert zurück. Im Fehlerfall ist der Rückgabewert EOF.
DDCHelp Hilfe zur Programmiersprache C Seite 316 von 606
Siehe auch cputs
fputs
gets
printf
putchar
freopen
puttext
Syntax #include <conio.h>
int puttext(int links, int oben, int rechts, int unten, void *source);
Beschreibung
Kopiert den Inhalt eines Speicherbereichs in einen rechteckigen Ausschnitt des Textbildschirms.
puttext schreibt den Inhalt des durch source bezeichneten Speicherbereichs in einen rechteckigen Ausschnitt des Textbildschirms. Der Ausschnitt wird durch die Parameter links, oben, rechts und unten festgelegt.
Die Funktion arbeitet mit absoluten Bildschirmkoordinaten. Die obere linke Ecke des Textbildschirms hat die Koordinaten (1,1).
puttext schreibt den Inhalt des angegebenen Speicherbereichs in sequentieller Reihenfolge in das definierte Rechteck von links nach rechts und von oben nach unten.
Jede Bildschirmposition benötigt zwei Speicher-Bytes. Das erste repräsentiert das dargestellte Zeichen und das zweite enthält das Video-Attribut dieser Bildschirmposition. Der für ein Rechteck mit w Spalten und h Zeilen benötigte Speicherplatz berechnet sich daher zu:
Bytes = (h Zeilen) x (w Spalten) x 2
puttext funktioniert nur im Textmodus und schreibt direkt in den Bildschirmspeicher.
Hinweis: Diese Funktion sollte in Win32s oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Bei fehlerfreier Ausführung wird ein Wert ungleich Null zurückgeliefert. Ein Rückgabewert von 0 zeigt einen Fehler an (wie zum Beispiel Koordinaten außerhalb des Bildschirms).
Siehe auch gettext
movetext
window
putw
Syntax #include <stdio.h>
int putw(int w, FILE *stream);
Beschreibung
Schreibt einen Integer in einem Stream.
DDCHelp Hilfe zur Programmiersprache C Seite 317 von 606
putw schreibt den Integer w in den Stream stream. Eine spezielle Anordnung in der Datei wird von der Funktion weder verursacht noch erwartet.
Rückgabewert
putw liefert bei fehlerfreier Ausführung den übergebenen Integer w, im Fehlerfall den Wert EOF (-1) zurück. Da EOF einen gültigen Integerwert darstellt, sollte nach putw ein expliziter Test mit ferror durchgeführt werden.
Siehe auch getw
printf
qsort
Syntax #include <stdlib.h>
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY
*fcmp)(const void *, const void *));
Beschreibung
Sortiert die Elemente eines Array mit Hilfe des Quicksort-Algorithmus.
qsort ist die Implementierung der 3-Median-Variante des Quicksort-Algorithmus zum Sortieren der Elemente eines Array. qsort ruft dazu die vom Benutzer definierte Vergleichsfunktion fcmp wiederholt auf.
base zeigt auf das erste Element (0) des zu sortierenden Array;
nelem enthält die Anzahl der zu sortierenden Elemente;
width gibt die Größe eines einzelnen Elements (in Bytes) an.
Die Vergleichsfunktion fcmp muss mit der _USERENTRY-Aufrufskonvention verwendet werden.
fcmp übernimmt die beiden Argumente elem1 und elem2. Beide sind Zeiger auf Elemente des Array. Die Vergleichsfunktion vergleicht die beiden Elemente (*elem1 und *elem2) und liefert einen Integerwert als Ergebnis zurück:
*elem1 < *elem2 Rückgabewert < 0
*elem1 == *elem2 Rückgabewert = 0
*elem1 > *elem2 Rückgabewert > 0
Für den Vergleich bedeutet das Kleiner-als-Symbol (<), dass in der Sortierung das links stehende Element vor dem rechts stehenden erscheinen soll. Analog bedeutet das Größer-als-Symbol (>), dass in der Sortierung das links stehende Element nach dem rechts stehenden erscheinen soll.
Rückgabewert
Keiner.
Siehe auch bsearch
lsearch
DDCHelp Hilfe zur Programmiersprache C Seite 318 von 606
raise
Syntax #include <signal.h>
int raise(int sig);
Beschreibung
Sendet ein Software-Signal zum ausführenden Programm.
Mit der Funktion raise lassen sich Software-Signale vom Typ sig an das Programm senden. Wenn das Programm einen Signal-Handler für den durch sig angegebenen Signaltyp installiert hat, wird diese Routine ausgeführt. Wenn kein Handler installiert ist, wird die Standardaktion für den jeweiligen Signaltyp ausgeführt.
Die gegenwärtig in signal.h definierten Signaltypen und Standardaktionen sind:
Signal Bedeutung
SIGARBRT Nicht normales Programmende
SIGFPE Gleitkommafehler
SIGILL Illegaler Befehl
SIGINT [Strg][C]-Interrupt
SIGSEGV Ungültiger Speicherzugriff
SIGTERM Anfrage auf Programmbeendigung
SIGUSR1 Benutzerdefiniertes Signal
SIGUSR2 Benutzerdefiniertes Signal
SIGUSR3 Benutzerdefiniertes Signal
SIGBREAK [Strg][Untbr]-Interrupt
Hinweis: Der Signaltyp SIGABRT wird vom Compiler normalerweise nicht erzeugt, kann jedoch durch abort, raise oder auch durch Exceptions ausgelöst werden, die nicht behandelt werden können.
Rückgabewert
raise liefert bei fehlerfreier Ausführung den Wert 0, andernfalls einen Wert ungleich Null zurück.
Siehe auch abort
signal
rand
Syntax #include <stdlib.h>
int rand(void);
Beschreibung
Erzeugt eine Zufallszahl.
rand verwendet ein multiplikatives Kongruenzverfahren (Multiplikation mit anschließender Modulo-Operation), um Pseudo-Zufallszahlen im Bereich von 0 bis RAND_MAX zu erzeugen. Die Periode des Zufallszahlengenerators beträgt 232. Die symbolische Konstante RAND_MAX ist in stdlib.h definiert.
DDCHelp Hilfe zur Programmiersprache C Seite 319 von 606
Rückgabewert
rand liefert die erzeugte Pseudo-Zufallszahl zurück.
Siehe auch random
randomize
srand
random
Syntax #include <stdlib.h>
int random(int num);
Beschreibung
Erzeugt eine Zufallszahl innerhalb eines bestimmten Bereichs.
random liefert eine Zufallszahl im Bereich von 0 bis (num-1) zurück und ist als Makro in stdlib.h definiert. Sowohl num als auch die zurückgelieferte Zufallszahl sind Integerwerte.
Rückgabewert
random liefert einen Zahl zwischen 0 und (num-1) zurück.
Siehe auch rand
randomize
srand
randomize
Syntax #include <stdlib.h>
#include <time.h>
void randomize(void);
Beschreibung
Initialisiert den Zufallszahlengenerator.
randomize initialisiert den Zufallszahlengenerator mit einem Zufallswert.
Rückgabewert
Keiner.
Siehe auch rand
random
srand
DDCHelp Hilfe zur Programmiersprache C Seite 320 von 606
read
Syntax #include <io.h>
int read(int handle, void *buf, unsigned len);
Beschreibung
Liest Daten aus einer Datei.
read liest len Bytes aus der durch handle bezeichneten Datei in den durch buf angegebenen Speicherbereich.
Wird die Datei im Textmodus geöffnet, dann entfernt read Wagenrücklaufzeichen und interpretiert das Zeichen [Strg][Z] als Dateiende.
handle ist das über einen Aufruf von creat, open, dup oder dup2 erhaltene Datei-Handle.
Bei Diskettendateien beginnt der Lesevorgang ab der aktuellen Position des Dateizeigers. Nach Beendigung des Lesevorgangs wird der Dateizeiger um die Anzahl der gelesenen Bytes erhöht. Bei Gerätedateien ist eine Position nicht definiert - hier liest read direkt vom entsprechenden Gerät.
read kann maximal UINT_MAX-1 Bytes lesen, da UINT_MAX selbst dem Wert -1 und damit dem Fehlerindikator entspricht. UINT_MAX ist in limits.h definiert.
Rückgabewert
Bei fehlerfreier Ausführung liefert read die Anzahl der gelesenen Bytes als positiven Integerwert zurück. Wenn die Datei im Textmodus geöffnet wurde, dann werden Wagenrückläufe und [Strg][Z] nicht mitgezählt.
Wenn das Dateiende erreicht bzw. überschritten wurde, so ist der Rückgabewert 0.
Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht gestattet
EBADF Ungültiges Handle
Siehe auch open
_rtl_read
write
readdir
Syntax #include <dirent.h>
struct dirent *readdir(DIR *dirp);
Beschreibung
Liest den aktuellen Eintrag aus einem Verzeichnis-Stream.
readdir ist unter UNIX auf POSIX-Systemen verfügbar.
Die Funktion liest den aktuellen Verzeichniseintrag aus dem durch dirp bezeichneten Verzeichnis-Stream. Der Verzeichnis-Stream wird auf den nächsten Eintrag gesetzt.
readdir liefert einen Zeiger auf eine Struktur des Typs dirent zurück. Bei jedem neuen Aufruf von readdir für den gleichen Verzeichnis-Stream wird diese Struktur überschrieben.
DDCHelp Hilfe zur Programmiersprache C Seite 321 von 606
Die in dirent.h definiert Struktur des Typs dirent entspricht einem einzelnen Verzeichniseintrag. Sie enthält mehrere Elemente, von denen der Programmierer aber nur auf eines zugreifen kann:
char d_name[];
Das char-Array d_name enthält den nullterminierten Dateinamen für den aktuellen Verzeichniseintrag. Die Größe dieses Array ist unbestimmt. Sie können die Länge des Dateinamens mit der Funktion strlen ermitteln.
Zurückgeliefert werden alle Verzeichniseinträge einschließlich Unterverzeichnissen, "."- und ".."-Einträgen, Systemdateien, verborgenen Dateien und Datenträgernamen. Unbenutzte oder gelöschte Verzeichniseinträge werden nicht zurückgeliefert.
Verzeichniseinträge können zwar während des Lesens eines Verzeichnis-Stream erstellt oder gelöscht werden, es ist jedoch nicht sicher, ob readdir die betreffenden Einträge zurückliefert. Um sicherzustellen, dass readdir den aktuellen Status des Verzeichnisses zurückliefert, muss der Verzeichnis-Stream mit rewinddir auf den ersten Eintrag zurückgesetzt oder das Verzeichnis mit opendir neu geöffnet werden.
Rückgabewert
Bei fehlerfreier Ausführung liefert readdir einen Zeiger auf den aktuellen Verzeichniseintrag zurück. readdir liefert NULL zurück, wenn das Verzeichnisende erreicht wird oder dirp auf keinen offenen Verzeichnis-Stream zeigt.
Siehe auch closedir
opendir
rewinddir
realloc
Syntax #include <stdlib.h>
void *realloc(void *block, size_t size);
Beschreibung
Ändert die Größe eines reservierten Blocks im Hauptspeicher.
realloc verändert die Größe eines zuvor reservierten Speicherblocks auf size Bytes. Enthält size den Wert NULL, so wird der Speicherblock freigegeben und NULL zurückgeliefert. block muss auf die Startadresse eines Speicherblocks zeigen, der zuvor mit einem Aufruf von malloc, calloc oder realloc ermittelt wurde. Wenn block ein NULL-Zeiger ist, verhält sich realloc wie malloc.
realloc ändert die Größe des reservierten Speicherblocks und kopiert dazu den Blockinhalt an eine neue Adresse, falls nötig.
Rückgabewert
realloc gibt die neue Adresse des Speicherblocks zurück, die von der bisherigen Adresse abweichen kann. Ist die Größenänderung nicht möglich, gibt realloc NULL zurück.
Siehe auch calloc
farrealloc
free
malloc
DDCHelp Hilfe zur Programmiersprache C Seite 322 von 606
remove
Syntax #include <stdio.h>
int remove(const char *filename);
Beschreibung
Löscht eine Datei.
remove löscht die durch filename angegebene Datei. Das Makro remove wird dabei in einen Aufruf von unlink umgesetzt. Wenn die Datei offen ist, müssen Sie sie erst schließen, bevor Sie sie mit remove löschen können.
Der Dateiname kann einen vollständigen Pfad enthalten.
Rückgabewert
Bei fehlerfreier Ausführung liefert remove den Wert 0 zurück. Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
ENOENT Pfad/Datei nicht gefunden
Siehe auch unlink
rename
Syntax #include <stdio.h>
int rename(const char *oldname, const char *newname);
Beschreibung
Ändert den Namen einer Datei.
rename ändert den Namen der Datei oldname in newname. Beide Namen können vollständige Pfade und/oder Laufwerksbezeichner enthalten. Die Angabe unterschiedlicher Laufwerke in oldname und newname ist nicht zulässig.
Es ist mit rename möglich, Dateien von einem Verzeichnis in ein anderes zu verlagern. Die Angabe von Jokerzeichen ist nicht zulässig.
Ist eine der Dateien in irgendeinem Prozess geöffnet, so kehrt rename mit einem Fehler (EACESS) zurück.
Rückgabewert
Bei fehlerfreier Ausführung liefert rename den Wert 0 zurück; ansonsten ist das Funktionsergebnis -1 und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
ENOENT Pfad/Datei nicht gefunden
ENOTSAM Ziel- und Quell-Laufwerk sind nicht identisch
DDCHelp Hilfe zur Programmiersprache C Seite 323 von 606
rewind
Syntax #include <stdio.h>
void rewind(FILE *stream);
Beschreibung
Setzt einen Dateizeiger auf den Stream-Anfang.
rewind ist äquivalent zu fseek(stream, 0L, SEEK_SET). Anders als fseek löscht rewind nicht nur das Dateiende-Flag, sondern auch eventuell gesetzte Fehler-Flags.
In Dateien, die für Lese- und Schreiboperationen geöffnet worden sind, kann nach rewind zwischen "Lesen" und "Schreiben" gewechselt werden.
Rückgabewert
Keiner.
Siehe auch fopen
fseek
ftell
rewinddir
Syntax #include <dirent.h>
void rewinddir(DIR *dirp);
Beschreibung
Setzt einen Verzeichnis-Stream auf den ersten Eintrag zurück.
rewinddir ist unter UNIX auf POSIX-Systemen verfügbar.
Die Funktion setzt den Verzeichnis-Stream dirp auf den ersten Eintrag im Verzeichnis zurück. rewinddir stellt sicher, dass der Verzeichnis-Stream den aktuellen Status der Einträge widerspiegelt: Es werden alle Einträge berücksichtigt, die seit dem letzten Aufruf von opendir oder rewinddir für diesen Verzeichnis-Stream erzeugt oder gelöscht wurden.
Rückgabewert
Keiner.
Siehe auch closedir
opendir
readdir
rmdir
Syntax #include <dir.h>
DDCHelp Hilfe zur Programmiersprache C Seite 324 von 606
int rmdir(const char *path);
Beschreibung
Löscht ein Verzeichnis.
rmdir löscht das durch path angegebene Verzeichnis und kann nur angewendet werden, wenn dieses Verzeichnis
keine Einträge enthält,
nicht das aktuelle Arbeitsverzeichnis ist und
nicht das Stammverzeichnis der Diskette/Festplatte darstellt.
Rückgabewert
rmdir liefert 0 zurück, wenn das Verzeichnis erfolgreich gelöscht wurde. Im Fehlerfall ist der Rückgabewert -1 und errno bekommt einen der folgenden Werte:
EACCES Zugriff nicht gestattet
ENOENT Pfad nicht gefunden
Siehe auch chdir
getcurdir
getcwd
mkdir
rmtmp
Syntax #include <stdio.h>
int rmtmp(void);
Beschreibung
Löscht temporäre Dateien.
rmtmp schließt und löscht alle offenen, temporären Datei-Streams, die vorher mit tmpfile erzeugt wurden. Das aktuelle Verzeichnis muss dasselbe sein, in dem die Dateien erzeugt wurden, da die Dateien andernfalls nicht gelöscht werden.
Rückgabewert
rmtmp liefert die Anzahl der geschlossenen und gelöschten Dateien zurück.
Siehe auch tmpfile
_rotl, _rotr
Siehe auch Syntax #include <stdlib.h>
unsigned short _rotl(unsigned short value, int count);
unsigned short _rotr(unsigned short value, int count);
DDCHelp Hilfe zur Programmiersprache C Seite 325 von 606
Beschreibung
Rotiert einen unsigned short-Wert bitweise nach links oder rechts.
_rotl rotiert den als value übergebenen Integerwert um count Bitpositionen nach links.
_rotr rotiert den als value übergebenen Integerwert um count Bitpositionen nach rechts.
Rückgabewert
Die Funktion liefert den rotierten Integerwert zurück:
_rotl liefert den um count Bits nach links rotierten Wert von value zurück.
_rotr liefert den um count Bits nach rechts rotierten Wert von value zurück.
Siehe auch _crotl
_crotr
_lrotl
_lrotr
_rtl_chmod
Syntax #include <dos.h>
#include <io.h>
int _rtl_chmod(const char *path, int func [, int attrib]);
Beschreibung
Liest bzw. ändert die DOS-Dateiattribute.
Über _rtl_chmod kann die Zugriffsberechtigung der durch path angegebenen Datei entweder gelesen (func == 0) oder auf den Wert von attrib gesetzt werden (func == 1). Für den Parameter attrib sind die folgenden Konstanten in dos.h definiert:
FA_RDONLY Nur Lesen
FA_HIDDEN Verborgen
FA_SYSTEM Systemdatei
FA_LABEL Volume-Label (Datenträgername)
FA_DIREC Verzeichnis
FA_ARCH Archiv
Hinweis: Diese Funktion ersetzt _chmod, die nicht mehr verwendet wird.
Rückgabewert
Bei fehlerfreier Ausführung liefert _rtl_chmod das gelesene bzw. neu gesetzte Attribut.
Im Fehlerfall ist der Rückgabewert -1 und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
Siehe auch chmod
_rtl_creat
DDCHelp Hilfe zur Programmiersprache C Seite 326 von 606
_rtl_close
Syntax #include <io.h>
int _rtl_close(int handle);
Beschreibung
Schließt eine Datei.
_rtl_close schließt die durch handle bezeichnete Datei. Ein Handle wird durch einen Aufruf von _rtl_creat, creat, creatnew, creattemp, dup, dup2, open oder _rtl_open einer Datei zugeordnet.
Diese Funktion schreibt kein ^Z ([Ctrl][Z]) als Dateiende-Zeichen. Falls Sie eine Datei mit ^Z abschließen wollen, müssen Sie dieses Zeichen explizit ausgeben.
Hinweis: Diese Funktion ersetzt _close, die nicht mehr verwendet wird.
Rückgabewert
_rtl_close liefert den Wert 0 zurück, wenn die Operation fehlerfrei ausgeführt werden konnte, ansonsten -1.
handle muss ein gültiges Handle sein, dem eine gültige, offene Datei zugeordnet ist. Ist dies nicht der Fall, erhält die globale Variable errno den Wert
EBADF Ungültiges Handle.
Siehe auch chsize
close
creat
creatnew
dup
fclose
_rtl_creat
_rtl_open
sopen
_rtl_creat
Syntax #include <dos.h>
#include <io.h>
int _rtl_creat(const char *pathc int attrib);
Beschreibung
Erzeugt eine neue Datei oder überschreibt eine bereits vorhandene Datei.
Die Funktion _rtl_creat öffnet die durch path bezeichnete Datei grundsätzlich im binären Modus. Nach einer fehlerfreien Öffnung bzw. Erzeugung zeigt der Dateizeiger auf das erste Byte der Datei. Die Datei wird für Lese- und Schreibzugriffe geöffnet.
Wenn die Datei bereits existiert, wird sie auf null Bytes Länge gekürzt (d.h., der vorherige Inhalt wird gelöscht).
Der Parameter attrib enthält eine ODER-Kombination aus einer oder mehreren der folgenden in dos.h definierten Konstanten:
DDCHelp Hilfe zur Programmiersprache C Seite 327 von 606
FA_RDONLY Nur-Lesen-Attribut
FA_HIDDEN Verborgen
FA_SYSTEM Systemdatei
Hinweis: Diese Funktion ersetzt _creat, die nicht mehr verwendet wird.
Rückgabewert
Bei fehlerfreier Ausführung liefert _rtl_creat das neue Datei-Handle (einen positiven Integerwert) zurück. Ansonsten ist der Rückgabewert -1.
Im Fehlerfall wird die globale Variable errno auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht erlaubt
ENOENT Pfad/Datei nicht gefunden
EMFILE Zu viele offene Dateien
Siehe auch chsize
close
creat
creatnew
creattemp
_rtl_chmod
_rtl_close
_rtl_heapwalk
Syntax #include <malloc.h>
int _rtl_heapwalk(_HEAPINFO *hi);
Beschreibung
Durchläuft den Heap Knoten für Knoten.
_rtl_heapwalk durchläuft den Heap Knoten für Knoten. Die Funktion geht davon aus, dass der Heap gültig ist (überprüfen Sie dies vorher mit _heapchk ). Mit dem letzten Block wird _HEAPOK zurückgeliefert. Bei einem erneuten Aufruf von _rtl_heapwalk ist das Ergebnis _HEAPEND.
Die Funktion _rtl_heapwalk übernimmt einen Zeiger auf eine Struktur vom Typ _HEAPINFO (deklariert in malloc.h). Setzen Sie das Feld hi._pentry beim ersten Aufruf der Funktion auf NULL. Nach der Rückkehr enthält hi._pentry die Adresse des ersten Blocks, während hi._size die Größe des Blocks in Bytes angibt.
Wird der Block zur Zeit benutzt, ist das Flag hi._useflag auf den Wert _USEDENTRY gesetzt. Bei einem freien Block enthält hi._useflag den Wert _FREEENTRY.
Hinweis: Diese Funktion ersetzt _heapwalk, die nicht mehr verwendet wird.
Rückgabewert
Einer der folgenden Werte wird zurückgeliefert:
_HEAPBADNODE Ein fehlerhafter Block wurde entdeckt
_HEAPBADPTR Das Feld _pentry zeigt nicht auf einen gültigen Heap-Block
_HEAPEMPTY Es gibt keinen Heap
_HEAPEND Das Ende des Heap wurde erreicht
_HEAPOK Der _HEAPINFO-Block enthält gültige Daten über den nächsten Block
DDCHelp Hilfe zur Programmiersprache C Seite 328 von 606
Siehe auch _heapchk
_heapset
_rtl_open
Syntax #include <fcntl.h>
int _rtl_open(const char *filename, int oflags);
Beschreibung
_rtl_open öffnet die durch filename angegebene Datei entsprechend dem Parameter oflags für Lese- und/oder Schreibzugriffe. Die Datei wird stets im Binärmodus geöffnet.
oflags verwendet die Flags der folgenden beiden Listen. Aus der ersten Liste darf (und muss) genau ein Flag verwendet werden. Die übrigen Flags können in jeder logischen Kombination benutzt werden.
Liste 1: Lese-/Schreib-Flags
O_RDONLY Nur Lesen
O_WRONLY Nur Schreiben
O_RDWR Lesen und Schreiben
Die folgenden zusätzlichen Werte können durch eine ODER-Operation mit in oflags aufgenommen werden:
Diese symbolischen Konstanten sind in fcntl.h und in share.h definiert.
Liste 2: Weitere Zugriffs-Flags
O_NOINHERIT Datei wird nicht an Kindprozesse vererbt
SH_COMPAT Ermöglicht weitere Zugriffe auf diese Datei mit SH_COMPAT. Wurde die Datei bereits in einem gemeinsamen Zugriffsmodus geöffnet, ergibt der Aufruf einen Fehler.
SH_DENYRW Ermöglicht den Zugriff auf die Datei nur über das aktuelle Handle.
SH_DENYWR Über andere Handles kann diese Datei nur gelesen, aber nicht beschrieben werden.
SH_DENYRD Über andere Handles kann diese Datei nur beschrieben werden.
SH_DENYNONE Sämtliche Zugriffe auf diese Datei sind erlaubt, jedoch nicht solche mit SH_COMPAT.
In einem Aufruf von _rtl_open kann jeweils nur eine der SH_DENYxxx-Konstanten angegeben werden. Diese Konstanten gelten zusätzlich zu bereits bestehenden Sperrungen der Datei.
Hinweis: Die maximal mögliche Anzahl offener Dateien wird durch HANDLE_MAX definiert. Diese Funktion ersetzt _open, die nicht mehr verwendet wird.
Rückgabewert
Wenn die Datei fehlerfrei geöffnet werden konnte, liefert _rtl_open das Handle der Datei zurück (einen int-Wert größer 0). Der Dateizeiger - dieser markiert die aktuelle Position in der Datei - wird auf den Dateianfang gesetzt.
Im Fehlerfall liefert _rtl_open den Wert -1 zurück und setzt die globale Variable errno auf einen der folgenden Werte:
DDCHelp Hilfe zur Programmiersprache C Seite 329 von 606
EACCES Zugriff nicht gestattet
EINVACC Ungültiger Zugriffscode
ENOENT Pfad oder Datei nicht gefunden
EMFILE Zu viele Dateien offen
Siehe auch open
_rtl_read
sopen
_rtl_read
Syntax #include <dos.h>
int _rtl_read(int handle, void *buf, unsigned *len);
Beschreibung
Liest aus einer Datei.
_rtl_read liest len Bytes aus der durch handle bezeichneten Datei in den durch buf angegebenen Speicherbereich.
Wurde die Datei im Textmodus geöffnet, dann entfernt _rtl_read keine CR-Zeichen.
handle ist das über einen Aufruf von creat, open, dup oder dup2 erhaltene Datei-Handle.
Bei Diskettendateien beginnt der Lesevorgang an der aktuellen Position des Dateizeigers. Nach Beendigung des Lesevorgangs wird der Dateizeiger um die Anzahl der gelesenen Bytes erhöht. Bei Gerätedateien ist eine Position nicht definiert - hier liest _rtl_read direkt vom entsprechenden Gerät.
_rtl_read kann maximal UINT_MAX-1 Bytes lesen, da UINT_MAX selbst dem Wert -1 und damit dem Fehlerindikator entspricht. Die Konstante UINT_MAX ist in limits.h definiert.
Hinweis: Diese Funktion ersetzt _read, die nicht mehr verwendet wird.
Rückgabewert
_rtl_read liefert bei fehlerfreier Ausführung die Anzahl der gelesenen Bytes als (positiven) Integerwert zurück. Wenn das Dateiende erreicht bzw. überschritten wurde, liefert _rtl_read den Wert 0 zurück. Im Falle eines Fehlers liefert _rtl_read den Wert -1 zurück und die globale Variable errno wird auf einen der folgenden Werte gesetzt:
EACCES Zugriff nicht gestattet
EBADF Ungültiges Handle
Siehe auch read
_rtl_open
_rtl_write
DDCHelp Hilfe zur Programmiersprache C Seite 330 von 606
_rtl_write
Syntax #include <io.h>
int _rtl_write(int handle void *buf unsigned len);
Beschreibung
Schreibt in eine Datei
_rtl_write liest len Bytes ab der durch buf angegebenen Adresse aus dem Speicher und schreibt sie in die durch handle bezeichnete Datei. Mit _rtl_write können maximal UINT_MAX-1 Bytes geschrieben werden, da UNIT_MAX dem Wert -1 entspricht, dem Fehlerindikator von write. UINT_MAX ist in limits.h definiert. Wenn die Datei im Textmodus geöffnet wurde und write auf das Zeilenvorschubzeichen LF ('\n') trifft, so wird diese Zeichenfolge nicht in CR/LF umgesetzt
Ist die Anzahl der tatsächlich geschriebenen Bytes kleiner als len, so ist dies ein Fehler und bedeutet wahrscheinlich, dass die Diskette/Festplatte voll ist.
Bei Diskettendateien schreibt _rtl_write ab der aktuellen Position des Dateizeigers, bei Gerätedateien wird direkt auf das jeweilige Gerät geschrieben.
Wenn die Datei mit O_APPEND ("anhängen") geöffnet wurde, setzt _rtl_write den Dateizeiger automatisch auf das Dateiende.
Hinweis: Diese Funktion ersetzt _write, die nicht mehr verwendet wird.
Rückgabewert
Die Funktion liefert die Anzahl der tatsächlich geschriebenen Bytes zurück. Im Fehlerfall wird der Wert -1 zurückgeliefert und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
EBADF Ungültiges Handle
Siehe auch lseek
_rtl_read
write
scanf
Syntax #include <stdio.h>
int scanf(const char *format[, address, ...]);
Beschreibung
Liest und formatiert Eingabe aus dem Stream stdin.
Für eine Verwendung dieser I/O-Funktion in einer Windows-Anwendung siehe EasyWin.
Hinweis: Bei Win32s- oder Win32-GUI-Anwendungen muss stdin umgelenkt werden.
Die Funktion scanf führt folgende Aktionen durch:
Sie liest zeichenweise eine Folge von Eingabefeldern.
Sie formatiert jedes Feld entsprechend einer korrespondierenden Formatieranweisung, die im
DDCHelp Hilfe zur Programmiersprache C Seite 331 von 606
Format-String *format übergeben wurde.
vsscanf liest und formatiert mit Hilfe einer Argumentliste die Eingabe von einem String.
Für jedes Eingabefeld muss eine Formatieranweisung und Adresse existieren.
Eine scanf-Funktion kann mit dem Lesen eines Eingabefeldes oder mit dem gesamten Lesen vorzeitig abbrechen, ehe ein Feldendezeichen (Whitespace) erreicht wird.
Die Gründe dafür sind in Wenn ...scanf-Funktionen abbrechen beschrieben.
ACHTUNG: scanf führt oft zu unerwarteten Ergebnissen, wenn sie von einem gegebenen Schema abweichen. Sie müssen berücksichtigen, wie scanf ein Zeilenende verarbeitet.
Die Kombination aus gets oder fgets gefolgt von sscanf ist sicher und einfach und daher der Verwendung von scanf vorzuziehen.
Rückgabewert:
Bei fehlerfreier Ausführung: liefert die scanf-Funktion die Anzahl der Felder zurück, die erfolgreich gelesen, konvertiert und gespeichert wurden. Dieser Wert beinhaltet keine Felder, die zwar gelesen, jedoch nicht gespeichert wurden.
Im Falle eines Fehlers liefert scanf
0 zurück, wenn keine Felder gespeichert wurden und
EOF, wenn scanf versucht, am Dateiende oder am Ende eines String zu lesen.
Weitere Informationen zu scanf Argumenttypmodifikationen
Zuweisungsunterdrückung
Formatieranweisung
Konventionen für die Formatieranweisung
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Breitenangabe
Wenn ...scanf-Funktionen abbrechen
Siehe auch atof
cscanf
fscanf
freopen
getc
printf
sscanf
vfscanf
vscanf
vsscanf
Der scanf-Format-String
Der Format-String steuert die Art, wie jede ...scanf-Funktion die Eingabefelder liest, konvertiert und speichert.
DDCHelp Hilfe zur Programmiersprache C Seite 332 von 606
Der Format-String ist ein Zeichenstring, der drei Arten von Objekten enthält:
Whitespace-Zeichen ([Leerzeichen], [Tab] etc.)
normale Zeichen
Formatbezeichner
Whitespace-Zeichen
Whitespace-Zeichen sind [Leerzeichen], [tab] (\t) oder [Neue-Zeile] (\n).
Wenn eine ...scanf-Funktion auf ein Whitespace-Zeichen im Format-String trifft, werden alle aufeinanderfolgenden Whitespace-Zeichen bis zum nächsten normalen Zeichen gelesen, aber nicht gespeichert.
Angehängte Whitespace-Zeichen (einschließlich [Neue-Zeile]) werden erst gar nicht gelesen, wenn sie nicht extra im Format-String angegeben sind.
Normale Zeichen
Normale Zeichen sind alle anderen ASCII-Zeichen außer dem Prozent-Zeichen (%).
Wenn eine ...scanf-Funktion auf ein normales Zeichen im Format-String trifft, wird das entsprechende normale Zeichen gelesen, aber nicht gespeichert.
Formatieranweisungen
Die Formatieranweisungen weisen die ...scanf-Funktionen an, Zeichen vom Eingabefeld zu lesen, in bestimmte Werte zu konvertieren und in der angegebenen Speicheradresse zu speichern.
Achtung: Jede Formatieranweisung muss ein Adressenargument haben. Wenn mehr Formatieranweisungen als Adressen angegeben werden, kommt es zu unvorhersehbaren Ergebnissen.
Überzählige Adressenargumente werden ignoriert.
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
Formatieranweisungen
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
scanf-Formatieranweisungen
In ...scanf-Format-Strings, haben Formatieranweisungen die folgende Form:
% [*] [width] [F|N] [h|l|L] type_char
Jede Formatieranweisung beginnt mit dem Prozentzeichen (%).
Nach dem Prozentzeichen % folgen in der unten stehenden Reihenfolge:
Komponente Optional/Obligatorisch Funktion/Auswirkung
[*] (Optional) Zeichen für Zuweisungsunterdrückung. Unterdrückt
die Zuweisung des nächsten Eingabefeldes.
[width] (Optional) Breitenangabe. Maximale Anzahl der zu lesenden
Zeichen. Es können weniger Zeichen gelesen
DDCHelp Hilfe zur Programmiersprache C Seite 333 von 606
werden, wenn die ...scanf-Funktion auf ein Whitespace-Zeichen oderein nicht-auswertbares Zeichen trifft .
[F|N] (Optional) Zeigergrößenmodifikation. Überschreibt die
Standardgröße der Adresse: N = near-Zeiger F = far-Zeiger
[h|l|L] (Optional) Argumenttypmodifikation
h = short int
l = long int, wenn type_char eine Integer-
Konvertierung festlegt.
l = double, wenn type_char eine
Gleitkommakonvertierung festlegt.
L = long double, (nur mit Gleitkommakonvertierung zulässig)
type_char (Obligatorisch) Typzeichen
Siehe auch Konventionen für die Formatieranweisung
Format-String
Eingabefelder
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
Typzeichen
Die Information in der folgenden Tabelle basiert auf der Annahme, dass keine optionalen Zeichen, Anweisungen oder Modifikationen (*, Breite oder Größe) in der Formatieranweisung enthalten sind.
Hinweis: Einige Formatieranweisungen erwarten bestimmte Konventionen.
Typ Erwartete Eingabe Argumenttyp
Zahlen
d Dezimal Integer Zeiger auf int (int *arg)
D Dezimal Integer Zeiger auf long (long *arg)
e,E Gleitkomma Zeiger auf float (float *arg)
f Gleitkomma Zeiger auf float (float *arg)
g,G Gleitkomma Zeiger auf float (float *arg)
o Oktal Integer Zeiger auf int (int *arg)
O Oktal Integer Zeiger auf long (long *arg)
i Dezimal, oktal oder Zeiger auf int (int *arg)
hexadezimal Integer
I Dezimal, oktal, od. Zeiger auf long (long *arg)
hexadezimal Integer
u Dezimal Integer vorzeichenlos Zeiger auf unsigned int (unsigned int *arg)
U Dezimal Integer vorzeichenlos Zeiger auf unsigned long (unsigned long *arg)
x Hexadezimal Integer Zeiger auf int (int *arg)
X Hexadezimal Integer Zeiger auf int (int *arg)
DDCHelp Hilfe zur Programmiersprache C Seite 334 von 606
Zeichen
s Zeichen-String Zeiger auf Array mit chars (char arg[])
c Zeichen Zeiger auf char (char *arg), wenn eine
Feldbreite zusammen mit dem Zeichen c (z.B. %5c) gegeben ist.
Zeiger auf Array mit W-Zeichen (char arg[W])
% %-Zeichen Keine Konvertierung; % wird gespeichert
Zeiger
n Zeiger auf int (int *arg): Die Anzahl der
erfolgreich gelesenen Zeichen (bis zu %n) wird in int gespeichert.
p Hexadezimale Form Zeiger auf ein Objekt (far* oder near*)
YYYY:ZZZZ oder ZZZZ %p Standardkonvertierung, Zeigergröße abhängig vom Speichermodell
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
Formatieranweisungen
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
Eingabefelder für scanf-Funktionen
In einer ...scanf-Funktion sind die folgenden Zeichen als Eingabefelder definiert:
alle Zeichen bis zum nächsten Whitespace-Zeichen
alle Zeichen bis zum ersten Zeichen, das nicht unter der aktuellen Formatieranweisung konvertiert werden kann (z.B. 8 oder 9 im Oktal Format)
bis zu n Zeichen, wobei n die angegebene Feldbreite ist.
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
Formatieranweisungen
Format-String
Zeigergrößenmodifikationen
Typzeichen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 335 von 606
Zeichen für Zuweisungsunterdrückung
Das Zeichen für die Zuweisungsunterdrückung ist ein Sternchen (*), nicht zu verwechseln mit dem
Zeiger-Operator * von C.
Wenn in einer Formatieranweisung dem Stern ein Prozentzeichen (%) folgt, wird das nächste Eingabefeld gelesen, jedoch nicht dem nächsten Adressenargument zugewiesen.
Es wird davon ausgegangen, dass die unterdrückten Eingabedaten von dem Typ sind, die das Typzeichen nach dem Stern angibt.
Siehe auch Argumenttypmodifikationen
Konventionen für die Formatieranweisung
Formatieranweisungen
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
Breitenangaben
Die Breitenangabe (n), ein dezimaler Integer-Wert, gibt die maximale Anzahl von Zeichen an, die vom aktuellen Eingabefeld gelesen werden sollen.
Es werden bis zu n Zeichen gelesen, konvertiert und im Argument der aktuellen Adresse gespeichert.
Wenn das Eingabefeld weniger als n Zeichen enthält, liest die ...scanf-Funktion alle Zeichen im Feld und fährt dann mit dem nächsten Feld und der nächsten Formatieranweisung fort.
Die Auswirkungen der Suche nach zeichenmäßiger Übereinstimmung und die Auswirkungen der unterdrückten Zuweisungen sind nicht exakt bestimmbar.
Wenn die ...scanf-Funktion auf ein Whitespace-Zeichen oder ein nicht-konvertierbares Zeichen trifft, ehe sie "width" Zeichen gelesen hat,
werden die bis dahin gelesenen Zeichen gelesen, konvertiert und gespeichert, woraufhin
die nächste Formatieranweisung gesucht wird.
Ein nicht-konvertierbares Zeichen ist eines, das nicht im angegebenen Format konvertiert werden kann (8 oder 9 im oktalen Format; J oder K im hexadezimalen oder dezimalen Format usw.).
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
Formatieranweisungen
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Wenn ...scanf-Funktionen abbrechen
DDCHelp Hilfe zur Programmiersprache C Seite 336 von 606
...scanf-Funktionen
Zeigergrößen- und Argumenttypmodifikationen
Diese Modifikation bestimmt, wie ...scanf-Funktionen ein entsprechendes Adressenargument
arg[f] interpretieren.
Zeigergrößenmodifikationen
Zeigergrößenmodifikationen überschreiben die vorgegebene oder deklarierte Größe von arg.
Modifikation arg interpretiert als
F far-Zeiger
N near-Zeiger (nicht im Speichermodell Huge)
Argumenttypmodifikationen
Argumenttypmodifikationen zeigen an, in welchem Typ die folgenden Eingabedaten gelesen werden (h = short, l = long, L = long double).
Die Eingabedaten werden wie angegeben konvertiert und das Argument für diese Eingabedaten sollte auf ein Objekt von entsprechender Größe zeigen.
Modifikation Typ wird konvertiert in
h d i o u x short int; in short-Objekt gespeichert
D I O U X (keine Auswirkung)
e f c s n p (keine Auswirkung)
l d i o u x long int; in long-Objekt gespeichert
e f g double; in double-Objekt gespeichert
D I O U X (keine Auswirkung)
c s n p (keine Auswirkung)
L e f g long double; in long double-Objekt gespeichert
(alle anderen) (keine Auswirkung)
Siehe auch Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
Formatieranweisungen
Format-String
Eingabefelder
Typzeichen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
Konventionen für die Formatieranweisung
Einige der ...scanf-Formatieranweisungen verlangen für die folgenden Konvertierungen bestimmte Konventionen:
Einzelnes Zeichen (%c)
Zeichen-Array (%[W]c)
String (%s)
DDCHelp Hilfe zur Programmiersprache C Seite 337 von 606
Gleitkomma (%e, %E, %f, %g, und %G)
unsigned (%d, %i, %o, %x, %D, %I, %O, %X, %c, %n)
Suchmengen (%[...], %[^...])
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Formatieranweisungen
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Breitenangaben
Wenn ...scanf-Funktionen abbrechen
...scanf-Funktionen
Konvertierung einzelner Zeichen (%c)
Diese Angabe liest das nächste Zeichen einschließlich eines Whitespace-Zeichens.
Um ein Whitespace-Zeichen zu überlesen und das nächste normale Zeichen zu lesen, verwenden
Sie: %1s.
Siehe auch ...scanf-Funktionen
Zeichen-Array-Konvertierung (%[W]c)
[W] = Breitenangabe
Das Argument der Adresse ist ein Zeiger auf ein Array aus Zeichen (char arg[W]).
Das Array besteht aus W-Elementen.
String-Konvertierung (%s)
Das Argument der Adresse ist ein Zeiger auf ein Array aus Zeichen (char arg[]).
Das Array muss mindestens (n+1) Bytes groß ein, wobei n = die Länge des Strings s (in Zeichen) angibt.
Ein Leerzeichen oder Zeilenvorschub beendet das Eingabefeld.
Eine abschließende 0 wird automatisch an den String angehängt und als letztes Element im Array gespeichert.
Siehe auch ...scanf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 338 von 606
Gleitkommakonvertierung (%e, %E, %f, %g, und %G)
Gleitkommazahlen im Eingabefeld müssen dem folgenden generischen Format entsprechen:
[+/-] ddddddddd [.] dddd [E|e] [+/-] ddd
Dabei zeigt [element] an , dass element optional ist, und ddd steht stellvertretend für Ziffern (dezimal, oktal, oder hexadezimal).
+INF, -INF, +NAN, und -NAN werden als Gleitkommazahlen anerkannt. Das Vorzeichen (+ oder -) und die Großschreibung sind zwingend erforderlich.
Siehe auch ...scanf-Funktionen
Vorzeichenlose Konvertierung (%d, %i, %o, %x, %D, %I, %O, %X, %c, und %n)
Ein Zeiger auf ein vorzeichenloses Zeichen, einen vorzeichenlosen Integer oder einen vorzeichenlosen long-Wert kann immer verwendet werden, wenn ein Zeiger auf ein Zeichen, Integer oder long-Wert erlaubt ist.
Siehe auch ...scanf-Funktionen
Suchmengenkonvertierung (%[search_set])
Eine Menge von Zeichen in eckigen Klammern kann Zeichen des s-Typs ersetzen.
Das Argument der Adresse ist ein Zeiger auf ein Array von Zeichen (char arg[]).
Diese Klammern schließen eine Menge von Zeichen ein, die eine Suchmenge von möglichen Zeichen für die Eingabe angeben.
Wenn das erste Zeichen in Klammern ein Caret (^) ist, wird die Suchmenge invertiert, so dass alle ASCII-Zeichen außer solchen in Klammern zulässig sind.
Ein Caret wird normalerweise in die invertierte Suchmenge einbezogen, außer, es wird ausdrücklich nach dem ersten Caret aufgelistet).
Das Eingabefeld ist ein String, der nicht durch ein Whitespace-Zeichen begrenzt ist. Die Funktion ...scanf liest das entsprechende Eingabefeld, bis sie das erste Zeichen erreicht, das nicht in der Suchmenge enthalten ist.
Regeln für Suchmengenbereiche: 1.Das Zeichen vor dem Bindestrich (-) muss lexikalisch kleiner als das darauf folgende sein.
2. Der Bindestrich darf weder das erste noch das letzte Zeichen sein. (Wenn der Bindestrich an erster oder letzter Stelle steht, wird der Bindestrich als Trennzeichen und nicht als Bereichsbezeichnung betrachtet).
3. Die Zeichen zu beiden Seiten des Bindestrichs müssen die Enden eines Bereichs und nicht Teil eines anderen Bereichs sein.
Siehe auch ...scanf-Funktionen
DDCHelp Hilfe zur Programmiersprache C Seite 339 von 606
Beispiele
%[abcd] Durchsucht das Eingabefeld nach den Zeichen a, b, c, und d.
%[^abcd] Durchsucht das Eingabefeld nach allen Zeichen außer a, b, c und d.
Sie können auch eine bereichseingrenzende Abkürzung [<erster>-<letzter>] zur Definition
eines Bereichs, von Buchstaben oder Zahlen in der Suchmenge verwenden.
Beispiele
Um alle dezimalen Ziffern zu erhalten, können Sie explizit %[0123456789] oder als Abkürzung: %[0-9] angeben.
Um alle alpha-numerischen Zeichen zu erhalten, können Sie:
%[A-Z] alle Großbuchstaben
%[0-9A-Za-z] alle Dezimalzahlen und Buchstaben
%[A-FT-Z] alle Großbuchstaben von A bis F und T bis Z
Wenn ...scanf-Funktionen abbrechen
Eine ...scanf-Funktion könnte den Lesevorgang für ein bestimmtes Eingabefeld vor dem Erreichen des normalen Feldendes (whitespace-Zeichen) unterbrechen oder auch ganz abbrechen.
Stop-und-Springen zum nächsten Eingabefeld
...scanf-Funktionen beenden den Lesevorgang und das Speichern des aktuellen Eingabefeldes und springen zum nächsten Eingabefeld, wenn eines der folgenden Ereignisse eintrifft:
Ein Zuweisungsunterdrückungszeichen (*) erscheint nach dem % im Formatbezeichner. Das aktuelle Eingabefeld wird zwar gelesen, aber nicht gespeichert.
width Zeichen sind gelesen worden.
Das nächste gelesen Zeichen kann nicht in dem aktuellen Format konvertiert werden. (z.B. ein A im dezimalen Format)
Das nächste Zeichen im Eingabefeld ist nicht in der Suchmenge enthalten (oder in einer invertierten Suchmenge enthalten).
Wenn scanf aus einem dieser Gründe den Lesevorgang im aktuellen Eingabefeld abbricht, wird das nächste Zeichen überlesen und ist entweder
das erste Zeichen in einem darauf folgendem Eingabefeld, oder
das erste Zeichen in einer folgenden Leseoperation in der Eingabe.
Abbruch
...scanf-Funktionen brechen unter einem der folgenden Umstände ab:
1. Das nächste Zeichen im Eingabefeld stimmt nicht mit dem entsprechenden normalen Zeichen im Format-String überein.
2. Das nächste Zeichen im Eingabefeld ist EOF.
3. Der Format-String ist beendet.
Wenn im Format-String eine Zeichenfolge auftaucht, die nicht Teil einer Formatieranweisung ist, muss sie mit der aktuellen Zeichenfolge im Eingabefeld übereinstimmen.
...scanf-Funktionen lesen diese übereinstimmenden Zeichen, aber speichern sie nicht.
Wenn ein unverträgliches Zeichen auftaucht, bleibt es im Eingabefeld, als ob es die ...scanf-Funktion nicht gelesen hätte.
Siehe auch Argumenttypmodifikationen
Zuweisungsunterdrückung
Konventionen für die Formatieranweisung
DDCHelp Hilfe zur Programmiersprache C Seite 340 von 606
Formatieranweisungen
Format-String
Eingabefelder
Zeigergrößenmodifikationen
Typzeichen
Breitenangaben
...scanf-Funktionen
...scanf-Funktionen
Die ..scanf-Funktionen umfassen:
fscanf liest und formatiert Eingabe von einem Stream
scanf liest und formatiert Eingabe von stdin
sscanf liest und formatiert Eingabe von einem String
vfscanf liest und formatiert Eingabe von einem Stream unter Verwendung einer Argumentliste
vscanf liest und formatiert Eingabe von stdin unter Verwendung einer Argumentliste
vsscanf liest und formatiert Eingabe von einem String unter Verwendung einer Argumentliste
_searchenv
Syntax #include <stdlib.h>
char *_searchenv(const char *file, const char *varname, char *buf);
Beschreibung
Sucht nach einer Datei im Verzeichnispfad einer Umgebungsvariablen.
_searchenv durchsucht zuerst das aktuelle Verzeichnis nach einer Datei mit dem durch den Parameter file angegebenen Namen. Bleibt die Suche erfolglos, dann liest die Funktion die Pfadangaben in der Umgebungsvariable varname des Betriebssystems und durchsucht sämtliche darin enthaltenen Verzeichnisse der Reihe nach (typische Umgebungsvariablen sind PATH, LIB oder INCLUDE).
Wenn die Datei gefunden wurde, wird der vollständige Dateiname (Laufwerk, Verzeichnis und Dateiname) im durch den Parameter buf angegebenen Puffer gespeichert. Dieser String kann beispielsweise bei einem folgenden Aufruf von fopen oder exec... verwendet werden. Der Puffer muss groß genug sein, um jeden möglichen Dateinamen aufzunehmen. Kann die Datei nicht gefunden werden, zeigt buf auf einen leeren String (der nur ein Nullzeichen enthält).
Rückgabewert
Keiner.
Siehe auch _dos_findfirst
_dos_findnext
exec...
spawn...
system
DDCHelp Hilfe zur Programmiersprache C Seite 341 von 606
searchpath
Syntax #include <dir.h>
char *searchpath(const char *file);
Beschreibung
Sucht im Verzeichnispfad des Betriebssystems nach einer Datei.
searchpath durchsucht zuerst das aktuelle Verzeichnis nach einer Datei mit dem durch den Parameter file angegebenen Namen. Bleibt die Suche erfolglos, dann liest die Funktion die Pfadangaben in der Umgebungsvariablen PATH und durchsucht sämtliche dort angegebenen Verzeichnisse der Reihe nach.
Wenn die Datei gefunden wurde, liefert searchpath einen Zeiger auf den vollständigen Dateinamen (Laufwerk, Verzeichnis und Dateiname) zurück. Dieser String kann beispielsweise für einen folgenden Aufruf von fopen oder exec... verwendet werden.
Der zurückgelieferte Zeiger zeigt auf einen statischen Puffer, der bei jedem Aufruf von searchpath überschrieben wird.
Rückgabewert
Bei erfolgreicher Ausführung wird ein Zeiger auf einen String mit dem gefundenen Dateinamen, im Fehlerfall Null, zurückgeliefert.
Siehe auch exec...
findfirst
findnext
spawn...
system
_searchstr
Syntax #include <stdlib.h>
void _searchstr(const char *file, const char *ipath, char *buf);
Beschreibung
Durchsucht eine Verzeichnisliste nach einer Datei.
_searchstr durchsucht zuerst das aktuelle Verzeichnis nach einer Datei mit dem durch den Parameter file angegebenen Namen. Bleibt die Suche erfolglos, dann liest die Funktion die Pfadangaben in dem durch den Parameter ipath angegebenen String und durchsucht sämtliche darin enthaltenen Verzeichnisse der Reihe nach. Die Verzeichnisse in ipath müssen durch Semikolons getrennt sein.
Wenn die Datei gefunden wurde, wird der vollständige Dateiname (Laufwerk, Verzeichnis und Dateiname) im durch den Parameter buf angegebenen Puffer gespeichert. Dieser String kann beispielsweise bei einem folgenden Aufruf von fopen, oder exec... verwendet werden. Der Puffer muss groß genug sein, um jeden möglichen Dateinamen aufzunehmen. Die in stdlib.h definierte Konstante _MAX_PATH bestimmt die Maximallänge eines Dateinamens. Kann die Datei nicht gefunden werden, zeigt buf auf einen leeren String (der nur ein Nullzeichen enthält).
Rückgabewert
Keiner.
DDCHelp Hilfe zur Programmiersprache C Seite 342 von 606
Siehe auch _searchenv
segread
Syntax #include <dos.h>
void segread(struct SREGS *segp);
Beschreibung
Liest die Segmentregister des Prozessors.
segread füllt eine Struktur des Typs SREGS mit den aktuellen Werten der Segmentregister und ist hauptsächlich für folgende Aufrufe von intdosx und int86x gedacht.
Rückgabewert
Keiner.
Siehe auch FP_OFF
int86
int86x
intdos
intdosx
MK_FP
movedata
setbuf
Syntax #include <stdio.h>
void setbuf(FILE *stream, char *buf);
Beschreibung
Explizite Zuordnung eines Puffers zu einem Stream.
setbuf ordnet der durch stream angegebenen Datei den Puffer buf anstelle des automatisch vergebenen Puffers zu. Die Minimalgröße von buf ist durch die in stdio.h definierte Konstante BUFSIZ festgelegt. Die Funktion kann nur angewendet werden, wenn die Datei bereits offen ist.
Die Angabe des Zeigerwertes NULL für buf bewirkt, dass folgende Ein-/Ausgaben über stream ungepuffert arbeiten, d.h. Ausgaben geschehen sofort, Eingaben werden direkt vom entsprechenden Gerät gelesen.
stdin und stdout arbeiten ungepuffert, wenn sie nicht umgeleitet sind. Umleitungen bewirken dagegen normalerweise eine Pufferung, die mit setbuf verändert werden kann.
Die Pufferung von Ein- und Ausgaben bedeutet: Ausgaben werden zeichenweise zwischengespeichert und blockweise geschrieben; Eingaben werden blockweise von der Datei bzw. dem Gerät gelesen und danach zeichenweise aus dem Puffer gelesen.
setbuf darf nur direkt nach dem Öffnen (oder direkt nach einem fseek-Aufruf) auf einen Stream angewendet werden, da die Ergebnisse ansonsten unvorhersehbar sind. Die Anwendung dieser
DDCHelp Hilfe zur Programmiersprache C Seite 343 von 606
Funktion auf ungepufferte Dateien ist dagegen problemlos und jederzeit möglich.
Für buf kann eine lokale Variable verwendet werden. Man sollte allerdings in diesem Fall streng darauf achten, die Datei vor dem Ende der entsprechenden Funktion wieder zu schließen.
Rückgabewert
Keiner.
Siehe auch fflush
fopen
fseek
setvbuf
setcbrk
Syntax #include <dos.h>
int setcbrk(int cbrkvalue);
Beschreibung
Legt fest, bei welchen Operationen auf [Strg][Untbr] geprüft wird.
setcbrk schaltet mit Hilfe der DOS-Funktion 0x33 die Überprüfung von [Strg][Untbr] ein bzw. aus.
Wert = 0 Überprüfung ist ausgeschaltet. Ausnahme: Bei Ein- und Ausgaben über Tastatur, Bildschirm, serielle Schnittstellen und Drucker.
Wert = 1 Überprüfung ist eingeschaltet, d.h., bei jedem Systemaufruf wird geprüft, ob [Strg][Untbr] betätigt wurde.
Rückgabewert
setcbrk liefert den als cbrkvalue übergebenen Wert zurück.
Siehe auch getcbrk
_setcursortype
Syntax #include <conio.h>
void _setcursortype(int cur_t);
Beschreibung
Legt die Form des Cursor fest.
Folgende Werte sind für cur_t möglich:
_NOCURSOR Der Cursor ist unsichtbar
_NORMALCURSOR Unterstrich-Cursor (standardmäßig)
_SOLIDCURSOR Kästchenförmiger Cursor
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
DDCHelp Hilfe zur Programmiersprache C Seite 344 von 606
Rückgabewert
Keiner.
setdta
Syntax #include <dos.h>
void setdta(char far *dta);
Beschreibung
Setzt die disk transfer address (DTA) von DOS.
setdta setzt die Startadresse der DTA auf die über dta angegebene Adresse.
Rückgabewert
Keiner.
Siehe auch getdta
setjmp
Syntax #include <setjmp.h>
int setjmp(jmp_buf jmpb);
Beschreibung
Bereitet ein nicht-lokales goto vor.
setjmp speichert den Zustand der aktuellen Task in dem durch jmpb angegebenen Puffer und gibt 0 zurück.
Ein Aufruf von longjmp zu einem späteren Zeitpunkt stellt diesen Zustand wieder her - die Task setzt die Arbeit an der Stelle fort, an der sich der Aufruf von setjmp befindet.
Ein Task-Zustand beinhaltet:
Win 16 Win 32
Alle Segmentregister (CS, DS, ES, SS) Segmentregister werden nicht gesichert
Registervariablen Registervariablen
Di und Si EBX, EDI, ESI
Stack-Zeiger (SP) Stack-Zeiger (ESP)
Frame-Zeiger (BP) Frame-Zeiger (EBP)
Flags Flags werden nicht gesichert
Ein Task-Status ist vollständig genug, um mit setjmp und longjmp-Koroutinen zu implementieren.
setjmp muss vor longjmp aufgerufen werden. Die Routine, die setjmp aufgerufen und jmpb gesetzt hat, muss immer noch aktiv sein, bevor longjmp aufgerufen wird. Andernfalls sind die Ergebnisse unvorhersehbar.
setjmp ist besonders zur Behandlung von Fehlern und Exceptions geeignet, die in maschinennahen Unterprogrammen auftreten.
DDCHelp Hilfe zur Programmiersprache C Seite 345 von 606
Für DOS-Anwender: Falls Ihr Programm mit Overlays arbeitet, können Sie die Funktionen setjmp und longjmp nicht zur Implementierung von Koroutinen heranziehen. Denn normalerweise sichern und erneuern setjmp und longjmp alle Registerinhalte, die für das Funktionieren der Koroutinen gebraucht werden. Aber der Overlay-Manager verwaltet nur den Inhalt eines Stacks, im Gegensatz zu Koroutinen. Diese benötigen gewöhnlich zwei Stacks bzw. getrennte Teile eines Stacks. Der Overlay-Manager ist nicht in der Lage, auf diese Informationen zurückzugreifen.
Sie können Hintergrund-Tasks mit jeweils eigenem Stack oder Stack-Abschnitt einsetzen, aber Sie müssen dafür sorgen, dass diese Tasks keinen überlagerten Code aufrufen. Und Sie dürfen auf keinen Fall aus einem Overlay heraus zum oder vom Hintergrund wechseln.
Rückgabewert
setjmp liefert beim ersten Aufruf zum Setzen eines Sprungziels immer den Wert 0 zurück. Der "Aufruf" von setjmp über longjmp setzt den Rückgabewert von setjmp auf einen Wert ungleich Null.
Siehe auch longjmp
signal
setlocale
Syntax #include <locale.h>
char *setlocale(int category, const char *locale);
Beschreibung
Auswahl oder Abfrage einer Locale-Einstellung.
Die meisten Compiler unterstützten die folgenden Locale-Einstellungen:
Modul unterstützte Locale-Einstellung
de_DE Deutsch
dr_FR Französisch
en_GB Englisch (Großbritannien)
en_US Englisch (USA)
In jeder Locale-Einstellung werden die folgenden Zeichensätze unterstützt:
DOS437 Englisch
DOS850 Mehrsprachig (Latin I)
WIN1252 Windows, mehrsprachig
Eine Beschreibung der DOS-Zeichensätze finden Sie im MS-DOS Benutzer- und Referenzhandbuch. Der Zeichensatz WIN1252 wird in MS Windows 3.1 Programmer's Reference, Volume 4 erläutert.
Folgende Werte sind für den Parameter category möglich:
Wert Auswirkung
LC_ALL Auswirkung auf alle folgenden Kategorien
LC_COLLATE Auswirkung auf strcoll und strxfrm
DDCHelp Hilfe zur Programmiersprache C Seite 346 von 606
LC_CTYPE Auswirkung auf Funktionen, die mit 1-Byte-Zeichen arbeiten. Keine Auswirkung auf die Funktionen mbstowcs und mbtowc.
LC_MONETARY Auswirkung auf die Formatierung von Währungsangaben mit der Funktion localeconv.
LC_NUMERIC Auswirkung auf den Dezimalpunkt bei numerischen Angaben (keine Währungsangaben). Dazu gehören die Funktionsfamilie printf und die von localeconv zurückgelieferten Informationen.
LC_TIME Auswirkung auf strftime
Der Parameter locale enthält einen Zeiger auf den Namen der Locale-Einstellung oder der Locale-Kategorie. Bei Übergabe eines NULL-Zeigers wird die aktuell gültige Locale-Einstellung zurückgeliefert. Wird ein Zeiger auf einen leeren String übergeben, so prüft setlocale anhand von Umgebungsvariablen, welche Locale-Einstellung ausgewählt werden soll.
Hinweis: Die Datei LOCALE.BLL wird im Verzeichnis \BIN installiert.
Wenn Sie eine andere Locale-Einstellung als die Standardeinstellung "C" angeben, versucht setlocale die Locale-Daten aus der Locale-Bibliotheksdatei LOCALE.BLL zu lesen. Dabei wird folgendermaßen versucht, auf die Datei zuzugreifen:
1. Das Verzeichnis, in dem sich die ausführbaren Dateien der aktuellen Anwendung befinden, wird durchsucht.
2. Das aktuelle Standardverzeichnis wird durchsucht.
3. Die Umgebungsvariable PATH wird ausgewertet und jedes dort angegebene Verzeichnis wird durchsucht.
setlocale endet, wenn die Locale-Bibliothek nicht gefunden wird.
Wenn die angeforderte Locale-Einstellung nicht hergestellt werden kann, so bleibt die bisherige Einstellung gültig und ein NULL-Zeiger wird zurückgeliefert.
Bei Übergabe eines NULL-Zeigers im Parameter locale wird der Locale-String der entsprechenden Kategorie zurückgegeben. Enthält category den Wert LC_ALL, dann wird ein vollständiger Locale-String zurückgeliefert. Die Struktur des vollständigen Locale-Strings besteht aus den durch Semikolons getrennten Namen aller Kategorien der aktuellen Locale-Einstellung. Dieser String kann wiederum für den Parameter locale verwendet werden, wenn setlocale mit LC_ALL aufgerufen wird. Dadurch werden alle im Locale-String angegebenen Kategorien wieder eingesetzt. Locale-Einstellungen können auf diese Weise gespeichert und wiederhergestellt werden. Wird der vollständige Locale-String zusammen mit nur einer Kategorie benutzt, beispielsweise mit LC_TIME, so wird nur diese Kategorie wiederhergestellt.
In ANSI C wird festgesetzt, dass eine implementierungsabhängige Locale-Einstellung verwendet wird, wenn durch den Parameter locale ein leerer String übergeben wird. setlocale versucht in diesem Fall, anhand von entsprechenden Umgebungsvariablen die Locale-Einstellung festzustellen, wie es auch POSIX vorschlägt.
Existiert die Umgebungsvariable LC_ALL, so wird die Kategorie anhand dieser Variable bestimmt. Andernfalls wird die Umgebungsvariable mit demselben Namen wie die angeforderte Locale-Kategorie gesucht und diese bei erfolgreicher Suche entsprechend gesetzt.
Führt dies nicht zum Erfolg, so wird die Umgebungsvariable LANG verwendet. Existiert auch diese nicht, dann wird setlocale abgebrochen; die Funktion liefert dann einen NULL-Zeiger zurück.
Sie müssen __USELOCALES__ in jedem Modul definieren, in dem Sie dynamisch ladbare Locale-Einstellungen verwenden wollen. Andernfalls verwenden alle Funktionen und Makros lediglich die standardmäßige Locale-Einstellung "C".
setlocale liefert die aktuell gültige Locale-Einstellung zurück, wenn im Parameter locale ein NULL-Zeiger übergeben wird. Bezeichnet der Parameter category eine einzelne Kategorie, wie etwa LC_COLLATE, so enthält der zurückgelieferte String den Namen dieser Kategorie. LC_ALL wird als Parameter category verwendet, um den vollständigen Locale-String zu erhalten, der alle aktuell gültigen Kategorienamen enthält.
.
.
.
localenameptr = setlocale( LC_COLLATE, NULL );
DDCHelp Hilfe zur Programmiersprache C Seite 347 von 606
if (localenameptr)
printf( "%s\n", localenameptr );
.
.
.
Die vom obigen Quelltext erzeugte Ausgabe beinhaltet einen der Modulnamen zusammen mit der angegebenen Code-Seite, zum Beispiel de_DE.DOS850@dbase
.
.
.
localenameptr = setlocale( LC_ALL, NULL );
if (localenameptr)
printf( "%s\n", localenameptr );
.
.
.
Eine Beispielausgabe des obigen Quelltextes könnte lauten:
de_DE.DOS850@dbase;de_DE.DOS850;de_DE.DOS850;de_DE.DOS850;
de_DE.DOS850;de_DE.DOS850;;
Jede Kategorie in dem obigen vollständigem Locale-String wird durch ein Semikolon begrenzt. Der String kann von einer Anwendung kopiert und gespeichert werden. Zu einem späteren Zeitpunkt kann dann mit diesem String dieselbe Locale-Einstellung wiederhergestellt werden. Jeder Kategorienname entspricht den in locale.h definierten Konstanten für die Locale-Kategorien. Der erste Name bezeichnet daher die Kategorie LC_COLLATE, der zweite die Kategorie LC_CTYPE und so weiter. Alle weiteren in locale.h definierten Kategorien sind für zukünftige Implementierungen reserviert.
Es folgen einige Beispiele, wie Locale-Einstellungen mit setlocale ausgewählt werden können:
Alle Standard-Kategorien für die deutsche Locale-Einstellung setzen:
setlocale( LC_ALL, "de_DE.DOS850" );
Hinweis: Die standardmäßige Einstellung der Kategorie LC_COLLATE lautet dbase. Daher ist es unerheblich, ob Sie dbase angeben, oder aber gar nichts - das Ergebnis ist in beiden Fällen gleich. In zukünftigen Versionen kann jedoch eine andere Standardeinstellung enthalten sein.
Die deutsche Locale-Einstellung der Kategorie LC_COLLATE auf dbase setzen:
setlocale( LC_COLLATE, "de_DE.DOS850" )
Wird kein Kategorienname angegeben, dann wird aus der Locale-Bibliothek die Standardkategorie geladen. So lädt beispielsweise der Aufruf:
setlocale( LC_COLLATE, "de_DE.DOS850@dbase" )
die LC_COLLATE-Standardkategorie. Diese kann einen speziellen Namen haben oder auch nicht.
setlocale ( LC_COLLATE, "de_DE.DOS850@dbase" )
lädt die LC_COLLATE-Kategorie dbase. Dies kann die Standardkategorie sein oder auch nicht.
setlocale aktualisiert die Locale-Struktur lconv, wenn eine Anforderung durchgeführt worden ist.
Bei Beendigung der Anwendung wird der für das Locale-Objekt reservierte Speicher wieder freigegeben.
Rückgabewert
Bei erfolgreicher Ausführung liefert setlocale einen String, der die Locale-Kategorie (oder eventuell alle Kategorien) der neuen Locale-Einstellung bezeichnet.
Im Fehlerfall wird ein NULL-Zeiger zurückgeliefert und die Locale-Einstellung bleibt unverändert. Alle weiteren möglichen Rückgabewerte wurden im Abschnitt Beschreibung bereits erläutert.
DDCHelp Hilfe zur Programmiersprache C Seite 348 von 606
Siehe auch localeconv
setmem
Syntax #include <mem.h>
void setmem(void *dest, unsigned length, char value);
Beschreibung
Füllt einen Speicherbereich mit einem Wert.
setmem setzt den durch dest angegebenen Speicherblock der Länge length Bytes auf den Wert value.
Rückgabewert
Keiner.
Siehe auch memset
strset
setmode
Syntax #include <fcntl.h>
int setmode(int handle, int amode);
Beschreibung
Setzt den Übersetzungsmodus einer offenen Datei.
setmode setzt den Modus der durch handle bezeichneten Datei entweder auf Text- oder auf Binärmodus. Für amode kann genau eine der beiden in fcntl.h definierten Konstanten verwendet werden: O_BINARY oder O_TEXT.
Rückgabewert
Bei fehlerfreier Ausführung liefert setmode den früheren Übersetzungsmodus zurück; ansonsten ist das Funktionsergebnis -1 und errno wird auf den folgenden Wert gesetzt:
EINVAL Ungültiges Argument
Siehe auch creat
open
_rtl_creat
_rtl_open
DDCHelp Hilfe zur Programmiersprache C Seite 349 von 606
setvbuf
Syntax #include <stdio.h>
int setvbuf(FILE *stream, char *buf, int type, size_t size);
Beschreibung
Explizite Zuordnung eines Puffers zu einem Stream.
setvbuf ordnet der durch stream angegebenen Datei den Puffer buf anstelle des automatisch vergebenen Puffers zu. Die Funktion kann nur angewendet werden, wenn die Datei bereits offen ist.
Mit der Angabe des Zeigerwertes NULL für buf wird über einen Aufruf von malloc ein Puffer der Größe size reserviert und der Datei zugeordnet. Der Puffer wird automatisch freigegeben, wenn die Datei wieder geschlossen wird. Der Parameter size bestimmt die Puffergröße und muss größer als 0 sein.
size darf nicht größer sein als die in limits.h definierte Konstante UINT_MAX.
stdin und stdout arbeiten ungepuffert, solange sie nicht umgeleitet sind. Umleitungen bewirken dagegen vollständige Pufferung. Ungepuffert bedeutet, dass Zeichen, die in einen Stream ausgegeben werden sollen, unmittelbar in die Datei bzw. das Gerät geschrieben werden. Gepuffert bedeutet hingegen, dass die auszugebenden Zeichen zunächst gesammelt und dann blockweise geschrieben werden.
Der Parameter type muss den Wert einer der drei folgenden Konstanten enthalten:
_IOFBF Die Datei wird vollständig gepuffert. Wenn der Puffer leer ist, versucht der nächste Eingabebefehl, den Puffer komplett mit Daten zu füllen (liest also size Bytes). Bei Ausgaben wird zunächst der Puffer gefüllt, erst danach wird der komplette Pufferinhalt geschrieben.
_IOLBF Ausgaben werden zeilenweise gepuffert: der Pufferinhalt wird nach jeder Ausgabe eines Zeilenvorschubs physikalisch geschrieben. Eingaben arbeiten dagegen genauso wie bei vollständiger Pufferung.
_IONBF Die Datei ist ungepuffert. Die Parameter buf und size werden ignoriert. Jeder Eingabebefehl liest direkt von der Datei, jeder Ausgabebefehl hat eine sofortige Schreibaktion zur Folge.
Für buf kann eine lokale Variable verwendet werden - allerdings sollte man in diesem Fall darauf achten, die Datei vor dem Ende der entsprechenden Funktion wieder zu schließen.
Rückgabewert
setvbuf liefert bei fehlerfreier Ausführung den Wert 0. Ungültige Werte für type oder size, fehlender Speicherplatz für malloc oder die Anwendung auf eine nicht geöffnete Datei erzeugen ein Funktionsergebnis ungleich Null.
Siehe auch fflush
fopen
setbuf
setverify
Syntax #include <dos.h>
void setverify(int value);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 350 von 606
Legt fest, ob Schreiboperationen vom Betriebssystem überprüft werden oder nicht.
setverify setzt den aktuellen Zustand der Verify-Flag auf den Inhalt des Parameters value, der 0 (Überprüfung aus) oder 1 (Überprüfung an) sein kann.
Das Verify-Flag beeinflusst Schreiboperationen auf Diskette oder Festplatte. Es bestimmt, ob Schreiboperationen auf erfolgreiche Durchführung getestet werden oder nicht.
Rückgabewert
Keiner.
Siehe auch getverify
signal
Syntax #include <signal.h>
void (_USERENTRY *signal(int sig, void (_USERENTRY *func)
(int sig[, int subcode])))(int);
Beschreibung
Legt fest, wie das Programm auf Signale reagiert.
Über die Funktion signal können Sie festlegen, wie Ihr Programm auf die Auslösung des Signals sig reagiert. Sie können eine eigene Routine zur Bearbeitung des Signals (einen Signal-Handler) definieren oder auch eine der beiden in signal.h vordefinierten Routinen SIG_DEFL und SIG_IGN einsetzen. Die Funktion func muss mit der Aufrufkonvention _USERENTRY benutzt werden.
Eine Funktion, die ein Signal auffängt (wie zum Beispiel eine Gleitkommazahl), löscht auch das Signal. Um mit dem Empfangen von Signalen fortzufahren, muss eine Signalbehandlung durch den erneuten Aufruf von signal reinstalliert werden.
Funktionszeiger Bedeutung
SIG_DFL das Programm wird beendet
SIG_ERR zeigt an, dass signal mit einem Fehler zurückgekehrt ist
SIG_IGN dieser Signaltyp wird ignoriert
In der folgenden Tabelle finden Sie Signaltypen zusammen mit den von ihnen ausgelösten Standardaktionen:
Signaltyp Bedeutung
SIGBREAK Tastatur muss sich im Modus "raw" (Zeichen nicht interpretieren) befinden
SIGARBRT Anormales Ende. Standardaktion entspricht dem Aufruf von _exit(3).
SIGFPE Arithmetischer Fehler, ausgelöst von Division durch Null, ungültiger Operation, usw. Standardaktion entspricht Aufruf von _exit(1).
SIGILL Ungültige Operation. ausgelöst durch ungültige Operation. Standardaktion entspricht Aufruf von _exit(1).
SIGINT [Strg][C] Interrupt. Standardaktion: Aufruf des Interrupts 0x23.
SIGSEGV Ungültiger Speicherzugriff. Standardaktion entspricht Aufruf von _exit(1).
SIGTERM Beendigung des Programms wird angefordert. Standardaktion entspricht Aufruf von _exit(1).
Die folgenden benutzerdefinierte Signale (nur in Win32 verfügbar) können nur durch den Aufruf
DDCHelp Hilfe zur Programmiersprache C Seite 351 von 606
von raise erzeugt werden:
SIGUSR1
SIGUSR2
SIGUSR3
Standardaktion: das Signal wird ignoriert.
signal.h definiert einen Datentyp sig_atomic_t als "Atom" eines Speicherzugriffs, der auch durch asynchrone Interrupts nicht unterbrochen werden kann. Für die Prozessoren der 8086-Familie ist dies ein Wort der Länge 16 Bit, für 80386 und höher ist es ein Wort der Länge 32 Bit, also ein Integer.
Wenn ein Signal durch die Funktion raise oder ein externes Ereignis erzeugt wird, dann geschieht folgendes:
Wurde für das Signal ein benutzerdefinierter Signal-Handler installiert, dann wird die Standardaktion für diesen Signaltyp SIG_DFL gesetzt.
Der benutzerdefinierte Handler wird aufgerufen. Der Signaltyp wird dabei als Parameter übergeben.
Benutzerdefinierte Handler können mit einem Aufruf von abort, _exit, exit oder longjmp enden - oder auch mit einem normalen Rücksprung zum unterbrochenen Programm. Soll Ihre Handler-Funktion weitere Signale empfangen und verarbeiten, so müssen Sie signal innerhalb der Handler-Funktion erneut aufrufen.
Oft gibt es eine Erweiterung von ANSI C bei den Signaltypen SIGFPE, SIGSEGV und SIGILL. Die entsprechenden, benutzerdefinierten Signal-Handler bekommen nicht nur den Signaltyp, sondern auch noch einen oder zwei zusätzliche Parameter übergeben. Wenn diese drei Signaltypen über raise ausgelöst werden, erhält der Handler einen der in folgender Tabelle aufgeführten Werte als zusätzlichen Parameter (und kann daran erkennen, dass er explizit aufgerufen wurde). Die Werte der folgenden Konstanten sind in float.h deklariert.
Hinweis: Deklarationen dieser Typen sind in float.h definiert.
Signal Parameter
SIGFPE FPE_EXPLICITGEN
SIGSEGV SEGV_EXPLICITGEN
SIGILL ILL_EXPLICITGEN
Wird ein Signal des Typs SIGFPE als Folge eines Gleitkommafehlers ausgelöst, bekommt der benutzerdefinierte Handler die Art dieses Fehlers als zweiten Parameter übergeben. Die dazugehörigen Konstanten (FPE_...) sind ebenfalls in float.h deklariert. Für die Signaltypen SIGSEGV und SIGILL oder den Typ SIGFPE als Folge eine Integerfehlers erhält der Handler zwei zusätzliche Parameter:
1. Den Signaltyp entsprechend dem ANSI-Standard (also SIGSEGV, SIGILL oder SIGFPE).
2. Einen Integer-Zeiger in den Stack der interrupt-Routine, die den benutzerdefinierten Signal-Handler aufgerufen hat. Dieser Zeiger zeigt auf eine Liste der Prozessorregister, die beim Auftreten des Fehlers gespeichert wurden. Die Register sind in derselben Reihenfolge wie die Parameter der Interrupt-Funktion (BP, DI, SI, DS, ES, DX, CX, BX, AX, IP, CS, FLAGS) gespeichert.
Wenn der Signal-Handler beispielsweise als
void Handler(int sig, int type, int *reglist);
deklariert ist, dann kann er mit
*((int*)reglist +2) = new_SI_value
festlegen, welchen Wert das Register SI bei der Rückkehr zum unterbrochenen Programm haben soll (vgl. Beispiel 2).
Für Signale des Typs SIGFPE sind in float.h folgende Konstanten definiert. Sie entsprechen den Fehlern, die der 8087-Prozessor erkennen kann, sowie INTEGER DIVIDE BY ZERO und INTERRUPT ON OVERFLOW beim Hauptprozessor.
Konstante Bedeutung
DDCHelp Hilfe zur Programmiersprache C Seite 352 von 606
FPE_INTOVFLOW INTO-Befehl mit gesetztem OF-Flag
FPE_INVALID Ungültiger 8087-Befehl
FPE_ZERODIVIDE Division durch Null
FPE_OVERFLOW Überlauf
FPE_UNDERFLOW Unterlauf
FPE_INEXACT Ergebnis ist ungenau (Rundungsfehler)
FPE_EXPLICITGEN Signal durch raise(SIGFPE) ausgelöst
FPE_STACKFAULT Über-/Unterlauf des Gleitkomma-Stack
FPE_STACKFAULT Stack-Überlauf
FPE_INTOVFLOW und FPE_INTDIV0 werden durch Integer-Operationen ausgelöst, die restlichen Signale durch Gleitkommaoperationen, d.h. entweder direkt durch den 8087-Prozessor oder durch die Routinen des 8087-Emulators. Ob ein Ausnahmezustand bei Gleitkommaoperationen ein Signal setzt, hängt vom Steuerwort des Koprozessors (bzw. des Emulators) ab, das über die Routine _control87 verändert werden kann. Denormalisierte Werte und der dazugehörige Ausnahmezustand (DeNorm) werden direkt vom Compiler behandelt und nicht an den Handler übergeben.
Für Signale des Typs SEGSEGV sind die folgenden Konstanten in signal.h definiert:
SEGV_BOUND ausgelöst durch BOUND-Befehl SEGV_EXPLICITGEN ausgelöst durch raise(SIGSEGV)
Der Prozessorbefehl BOUND ist für die Prozessortypen8088/86 nicht definiert. Die Prozessoren 186, 286, 386 sowie NEC V kennen diesen Befehl. Auf 80088/86 Prozessoren kann daher der Type SEGV_BOUND des Signals SIGSEGV nicht auftreten. Einige Compiler verwenden den Befehl BOUND nicht, er kann jedoch in Inline-Assemblercode sowie separat assemblierten Routinen verwendet werden.
Für Signale des Typs SIGILL sind die folgenden Konstanten in signal.h definiert:
ILL_EXECUTION ungültige Operationsanforderung
ILL_EXPLICITGEN ausgelöst durch raise(SIGILL)
Die Prozessortypen 8088/86, NEC V20 und V30 lösen bei illegalen Befehlen keinen Interrupt aus - SIGILL kann hier nur durch einen Aufruf von raise ausgelöst werden. Die Prozessortypen 186, 286, 386, NECV40 und NECV50 können hingegen SIGILL auslösen.
Bei den Signalen SIGFPE, SIGSEGV oder SIGILL ist ein Rücksprung des Signal-Handler im allgemeinen nicht empfehlenswert, wenn der Koprozessorstatus fehlerhaft, ein Divisionsergebnis falsch, ein Überlauf entstanden, eine BOUND-Befehl erfolglos oder eine Operation ungültig ist. Ein Rücksprung ist nur dann empfehlenswert, wenn der Signal-Handler die Register so verändert, dass ein sinnvoller Rücksprungkontext existiert oder wenn sich anhand des Signaltyps (beispielsweise FPE_EXPLICITGEN, SEG_EXPLICITGEN oder ILL_EXPLICITGEN) erkennen lässt, dass das Signal explizit per raise erzeugt wurde. Im allgemeinen sollten Sie jedoch ein Fehlermeldung ausgeben und das Programm mit _exit, exit oder abort beenden. Wird dennoch ein Rücksprung durchgeführt, dann ist die Programmfortführung wahrscheinlich nicht vorhersehbar.
Rückgabewert
Bei fehlerfreier Ausführung liefert signal einen Zeiger auf die Routine, die zuvor als Handler für Signale des angegebenen Typs gesetzt war. Im Fehlerfall ist das Ergebnis von signal der Zeiger SIG_ERR, errno wird auf den Wert EINVAL gesetzt.
Siehe auch abort
_c_exit
_cexit
_control87
DDCHelp Hilfe zur Programmiersprache C Seite 353 von 606
ctrlbrk
exit
longjmp
raise
setjmp
sin, sinl
Siehe auch Syntax #include <math.h>
double sin(double x);
long double sinl(long double x);
Beschreibung
Liefert den Sinus des Arguments zurück.
sin erwartet einen Winkel in der Einheit rad als Argument und liefert den dazugehörigen Sinus zurück.
sinl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung kann für diese Funktionen über _matherr bzw. _matherrl modifiziert werden.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
sin und sinl liefern den Sinus des Eingabewertes.
Siehe auch acos
asin
atan
atan2
bcd
complex
cos
tan
sinh, sinhl
Siehe auch Syntax #include <math.h>
double sinh(double x);
long double sinhl(long double x);
Beschreibung
Berechnet den Sinus hyperbolicus.
sinh berechnet den Sinus hyperbolicus, .
sinl ist die long double-Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Behandlung von Fehlern kann für diese Funktionen über _matherr bzw. _matherrl modifiziert werden.
DDCHelp Hilfe zur Programmiersprache C Seite 354 von 606
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
sinh und sinhl liefern den Sinus hyperbolicus von x zurück.
Bei Überläufen liefert sinh HUGE_VAL und sinhl _LHUGE_VAL (mit korrektem Vorzeichen) zurück und die globale Variable errno erhält den Wert ERANGE.
Siehe auch acos
asin
atan
atan2
bcd
complex
cos
cosh
sin
tan
tanh
sleep
Syntax #include <dos.h>
void sleep(unsigned seconds);
Beschreibung
Hält die Ausführung des Programms für einen bestimmten Zeitraum an.
sleep hält die Ausführung für die durch seconds angegebene Anzahl von Sekunden an und verwendet dabei die Uhr des Systems. Die Genauigkeit der Routine beträgt dabei eine Hundertstel Sekunde bzw. die Genauigkeit der Uhr des Betriebssystems, je nachdem, welche weniger genau ist.
Rückgabewert
Keiner.
sopen
Syntax #include <fcntl.h>
#include <sys\stat.h>
#include <share.h>
#include <io.h>
int sopen(char *path, int access, int shflag[, int mode]);
Beschreibung
Öffnet eine Datei in einem Modus für gemeinsamen Zugriff.
sopen öffnet die durch path angegebene Datei und bereitet je nach den für access, shflag und mode angegebenen Werten die Datei für gemeinsame Lese- und/oder Schreibzugriffe vor.
access wird dabei durch die bitweise ODER-Verknüpfung der in den folgenden beiden Tabellen
DDCHelp Hilfe zur Programmiersprache C Seite 355 von 606
aufgeführten Flags gebildet. Von der ersten Tabelle darf nur ein Flag benutzt werden. Die Flags der zweiten Tabelle dürfen dagegen in jeder logischen Kombination verwendet werden.
Flags für Lesen und/oder Schreiben
O_RDONLY Nur Lesen
O_WRONLY Nur Schreiben
O_RDWR Lesen und Schreiben
Weitere Zugriff-Flags
O_NDELAY Wird nicht verwendet und ist nur aus Gründen der UNIX-Kompatibilität definiert.
O_APPEND Falls gesetzt, wird der Dateizeiger vor jedem Schreibzugriff an das Dateiende gesetzt.
O_CREAT Falls die Datei bereits existiert, hat dieses Flag keine Wirkung. Wenn die Datei noch nicht existiert, wird sie erzeugt und die Dateiattribute werden - wie beim Aufruf von chmod - anhand der in mode gesetzten Bits festgelegt.
O_TRUNC Wenn die Datei bereits existiert, wird ihr vorheriger Inhalt gelöscht. Die Dateiattribute bleiben unverändert.
O_EXCL Wird nur zusammen mit O_CREAT verwendet. Falls die Datei bereits existiert, wird ein Fehler zurückgeliefert.
O_BINARY Die Datei wird im Binärmodus geöffnet..
O_TEXT Die Datei wird im Textmodus geöffnet.
O_NOINHERIT Die Datei wird nicht an Kindprozesse weitergegeben..
Hinweis: Die symbolischen Konstanten O_... sind in fcntl.h definiert.
Wenn weder O_BINARY noch O_TEXT angegeben ist, wird die Datei in dem Modus, der durch die globale Variable _fmode gesetzt ist, geöffnet.
Bei der Verwendung von O_CREAT (d.h. der Erzeugung einer neuen Datei) bei der Bildung von access muss das Argument mode auf eine der folgenden symbolischen Konstanten gesetzt werden; diese sind in sys\stat.h definiert sind:
Wert von mode Zugriffserlaubnis
S_IWRITE Schreiben erlaubt
S_IREAD Lesen erlaubt
S_IREAD | S_IWRITE Lesen und Schreiben erlaubt
shflag legt den Typ des gemeinsamen Zugriffs, der auf die Datei path angewendet werden soll, fest. Die symbolischen Konstanten für shflag sind in share.h festgelegt.
Wert von shflag Beschreibung
SH_COMPAT Setzt Kompatibilitätsmodus
SH_DENYRW Lesen und Schreiben nicht erlaubt
SH_DENYWR Schreiben nicht erlaubt
SH_DENYRD Lesen nicht erlaubt
SH_DENYNONE Lesen und Schreiben erlaubt
SH_DENYNO Lesen und Schreiben erlaubt
Rückgabewert
Wenn die Datei fehlerfrei geöffnet werden konnte, liefert die Funktion das Handle dieser Datei zurück (einen Integerwert größer als Null, über den weitere Operationen mit dieser Datei ausgeführt werden). Der Dateizeiger wird auf den Dateianfang gesetzt. Im Fehlerfall liefert die Funktion den Wert -1 und setzt die globale Variable errno auf einen der folgenden Werte:
DDCHelp Hilfe zur Programmiersprache C Seite 356 von 606
EACCES Zugriff nicht gestattet
EINVACC Ungültiger Zugriffscode
EMFILE Zu viele Dateien geöffnet
ENOENT Pfad/Datei nicht vorhanden
Siehe auch chmod
close
creat
lock
lseek
open
_rtl_open
unlock
umask
spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe
Siehe auch Syntax #include <process.h>
#include <stdio.h>
int spawnl(int mode, char *path, char *arg0, arg1, ..., argn, NULL);
int spawnle(int mode, char *path, char *arg0, arg1, ..., argn, NULL, char
*envp[]);
int spawnlp(int mode, char *path, char *arg0, arg1, ..., argn, NULL);
int spawnlpe(int mode, char *path, char *arg0, arg1, ..., argn, NULL,
char *envp[]);
int spawnv(int mode, char *path, char *argv[]);
int spawnve(int mode, char *path, char *argv[], char *envp[]);
int spawnvp(int mode, char *path, char *argv[]);
int spawnvpe(int mode, char *path, char *argv[], char *envp[]);
Hinweis: In den Funktionen spawnle, spawnlpe, spawnv, spawnve, spawnvp, und spawnvpe muss der letzte String den Wert NULL aufweisen.
Beschreibung
Erzeugung und Ausführung eines Kindprozesses.
Die Funktionen der spawn...-Familie erzeugen Kindprozesse, die ihre eigenen Dateien ausführen. Es muss ausreichend Speicherplatz für das Laden und Ausführen dieser Prozesse vorhanden sein.
Der Wert des Parameters mode legt fest, wie sich der aufrufende Prozess, der sogenannte Elternprozess, während der Ausführung des Kindprozesses verhält. Die folgenden Konstanten sind in process.h definiert:
P_WAIT Der Elternprozess bleibt im Speicher, wird aber für die Dauer der Ausführung des Kindprozesses "angehalten".
P_NOWAIT Die Ausführung des Elternprozesses wird nach dem Start des Kindprozesses fortgesetzt. Die Prozess-ID des Kindprozesses wird zurückgeliefert, so dass der Elternprozess über eine Aufruf von cwait oder wait auf das Ende des Kindprozesses warten kann.
DDCHelp Hilfe zur Programmiersprache C Seite 357 von 606
P_NOWAITO Entspricht P_NOWAIT mit der Ausnahme, dass die ID des Kindprozesses vom Betriebssystem nicht gespeichert wird. Daher kann der Elternprozess nicht mit cwait oder wait auf das Ende des Kindprozesses warten.
P_DETACH Entspricht P_NOWAITO mit der Ausnahme, dass der Kindprozess im Hintergrund ohne Tastatur- und Bildschirmzugriff ausgeführt wird.
P_OVERLAY Der Elternprozess wird vom Kindprozess im Speicher überlagert und nach dessen Beendigung nicht fortgesetzt. Dies entspricht dem Aufruf einer exec...-Funktion.
P_NOWAIT ist zur Zeit für 16-Bit-Windows oder 16-bit DOS nicht verfügbar; seine Verwendung erzeugt einen Fehler.
Der Parameter path gibt den Namen des Kindprozesses an. Dabei wird der Standard-Suchalgorithmus des Betriebssystems verwendet:
Wenn weder eine Namenserweiterung noch ein Punkt angegeben ist, wird zuerst nach Dateien ohne Erweiterung, dann nach .EXE-Dateien und anschließend nach .COM-Dateien gesucht. Ist die Suche erfolglos, dann wird .BAT an den Namen angehangen und noch einmal gesucht. Der Kommandozeileninterpreter COMSPEC wird zur Ausführung der Datei benutzt.
Wenn eine Namenserweiterung angegeben ist, wird nur nach dem genauen Dateinamen gesucht.
Wenn ein Punkt angegeben ist, wird nach dem Dateinamen ohne Erweiterung gesucht.
Die Varianten von spawn... mit der Namensendung p suchen, sofern in path kein Verzeichnis explizit angegeben ist, zuerst im aktuellen Verzeichnis und danach in sämtlichen Verzeichnissen, die durch die Umgebungsvariable PATH festgelegt sind.
Die einzelnen Funktionen der spawn...-Familie unterscheiden sich durch die Namensendungen p, l, v, und e, wobei jeder dieser Buchstaben für andere Fähigkeiten steht. Im einzelnen bedeuten:
p Die spawn-Funktion sucht nach dem Kindprozess nicht nur innerhalb des aktuellen Verzeichnisses, sondern auch in sämtlichen durch die Umgebungsvariable PATH festgelegten Verzeichnissen. Die Varianten ohne p suchen nur innerhalb des aktuellen Verzeichnisses.
l Die Argumentzeiger werden an den Kindprozess in Form einer Liste einzelner Argumente übergeben, also als arg0, arg1, ... argn. Die Listenform wird normalerweise verwendet, wenn die Zahl der Parameter vorher bekannt (und konstant) ist.
v Die Argumentzeiger werden an den Kindprozess als Zeiger-Array übergeben, d.h. als argv[0], argv[1] ...argv[n]. Diese Form wird normalerweise verwendet, wenn die Anzahl der Parameter variabel ist.
e Erlaubt die Übergabe des Zeiger-Array envp (d.h. eines eigenen Environment für den Kindprozess). Ein über die spawn...-Varianten ohne e aufgerufener Kindprozess verwendet dieselben Umgebungsvariablen wie der Elternprozess, er "erbt" das Environment des Elternprozesses.
Jede Funktion der spawn...-Familie enthält entweder ein l oder ein v im Namen, die weiteren Kombinationen mit p und e sind optional. Zwei Beispiele dazu:
spawnl verwendet eine Liste von Argumenten, sucht nur im aktuellen Verzeichnis nach dem Kindprozess und übergibt _environment des Elternprozesses an den Kindprozess.
spawnvpe übergibt die Argumentzeiger als Zeiger-Array und führt nötigenfalls eine Suche nach dem Kindprozess über die mit PATH gesetzten Verzeichnisse aus; mit Hilfe des Parameters env wird -environment des Kindprozesses geändert.
Sämtliche spawn...-Funktionen müssen mindestens ein Argument an den Kindprozess übergeben, nämlich arg0 bzw. argv[0]. Dieses erste Argument enthält per Konvention den Pfadnamen des Kindprozesses. Die Übergabe anderer Daten als erstes Argument erzeugt jedoch keinen Fehler. Zur Übergabe einer leeren Argumentliste an den Kindprozess muss arg0 bzw. argv[0] gleich NULL sein.
Ein in arg0 bzw. argv[0] übergebener path-Wert ist nur unter den DOS-Versionen von 3.0 aufwärts für den Kindprozess verfügbar. Bei älteren Versionen kann der Kindprozess den in arg0 bzw. argv[0] übergebenen Wert nicht benutzen.
Wenn das l-Suffix verwendet wird, zeigt arg0 normalerweise auf denselben String wie path. arg1,...,argn zeigen auf weitere Strings, die Argumentliste wird durch ein (obligatorisches!) NULL
DDCHelp Hilfe zur Programmiersprache C Seite 358 von 606
beendet.
Wenn das e-Suffix verwendet wird, wird eine Liste mit neuen _environment-Einstellungen über den Parameter envp übergeben. envp zeigt auf ein Array von char-Zeigern. Jedes Element dieses Array ist ein nullterminierter String der Form
U_Var = Wert
wobei U_Var der Name der Umgebungsvariable und Wert der String-Wert ist, auf den U_Var gesetzt wird. Das letzte Element des Array muss einen Zeiger mit dem Wert NULL enthalten, der das Listenende gekennzeichnet. Wenn envp den Wert NULL hat, verwendet der Kindprozess das Environment des Elternprozesses.
Die Gesamtlänge sämtlicher als arg übergebener Parameter darf 260 Bytes unter Windows (128 Bytes unter DOS) nicht überschreiten (inklusive der automatisch eingesetzten Leerzeichen zur Trennung einzelner Parameter). Nullzeichen werden bei dieser Zählung nicht berücksichtigt.
spawn... schließt keine Dateien - durch den Elternprozess geöffnete Dateien stehen auch dem Kindprozess zur Verfügung.
Rückgabewert
Bei fehlerfreier Ausführung liefert eine spawn...-Funktion mit mode P_WAIT den Exit-Code des Kindprozesses zurück (0 bei normaler Beendigung). Wenn der Kindprozess exit mit einem Wert ungleich Null explizit aufruft, so liefert die Funktion diesen Wert zurück. Ist mode auf P_NOWAIT, P_NOWAITO oder P_DETACH gesetzt, dann liefern die spawn...-Funktionen die Prozess-ID des Kindes zurück, die wiederum an cwait übergeben werden kann.
Konnte die spawn...-Funktion dagegen nicht ausgeführt werden, dann wird -1 zurückgeliefert, und errno erhält einen der folgenden Werte:
E2BIG Argumentliste zu lang
EINVAL Ungültiger Wert für mode
ENOENT Pfad/Dateiname nicht gefunden
ENOEXEC exec-Formatfehler
ENOMEM Nicht genug Platz im Hauptspeicher
Siehe auch abort
atexit
_c_exit
_cexit
cwait
_exit
exit
exec...
_fpreset
searchpath
system
wait
Beispiele spawnl
spawnle
spawnlp
spawnlpe
spawnv
DDCHelp Hilfe zur Programmiersprache C Seite 359 von 606
spawnve
spawnvp
spawnvpe
_splitpath
Syntax #include <stdlib.h>
void _splitpath(const char *path, char *drive, char *dir, char *name,
char *ext);
Beschreibung
Zerlegt einen vollständigen Pfadnamen in seine Einzelkomponenten.
_splitpath übernimmt im Parameter path einen vollständigen Dateinamen als String der Form
X:\DIR\SUBDIR\NAME.EXT
und zerlegt ihn in seine vier Einzelkomponenten. Diese werden in den durch drive, dir, name und ext bezeichneten Strings gespeichert. Alle fünf Parameter müssen übergeben werden, einzelne davon dürfen aber NULL sein, was zur Folge hat, dass die zugehörige Komponente zwar analysiert, aber nicht gespeichert wird. Für Maximalgrößen aller beteiligen Strings sind in stdlib.h folgende Konstanten definiert, wobei das abschließende Nullzeichen jeweils mitgezählt werden muss:
Konstante String
_MAX_PATH path
_MAX_DRIVE drive; inklusive Doppelpunkt (:)
_MAX_DIR dir; inklusive führendem und abschließendem umgekehrten Schrägstrich (\)
_MAX_FNAME name
_MAX_EXT ext; inklusive führendem Punkt (.)
_splitpath unterstellt, dass die durch drive, dir, name und ext bezeichneten Strings eine ausreichende Größe haben, um jede nicht leere Komponente zu speichern.
_splitpath verteilt die Interpunktionszeichen aus path in folgender Weise:
drive enthält den Laufwerksbezeichner mit einem Doppelpunkt (C:, A:, usw.).
dir enthält einen führenden und abschließenden umgekehrten Schrägstrich (\INCLUDE\, \SOURCE\ usw.).
name enthält den Dateinamen.
ext enthält den Punkt, der die Namenserweiterung einleitet (.C, .EXE usw.).
_makepath und _splitpath verhalten sich invers zueinander. Die Anwendung von _makepath auf die durch _splitpath ermittelten Elemente eines vollständigen Pfadnamens ergeben wieder das Original.
Rückgabewert
Keiner.
Siehe auch _fullpath
_makepath
DDCHelp Hilfe zur Programmiersprache C Seite 360 von 606
sprintf
Syntax #include <stdio.h>
int sprintf(char *buffer, const char *format[, argument, ...]);
Beschreibung
Schreibt formatierte Ausgabe in einen String.
sprintf übernimmt eine Reihe von Argumenten, auf die jeweils eine Formatieranweisung angewendet wird. Die Formatieranweisungen sind in dem String enthalten, auf den format zeigt. Die so formatierten Daten werden in den durch buffer angegebenen String geschrieben.
Hinweis: Weitere Details über Formatieranweisungen finden Sie unter printf.
sprintf wendet die erste Formatieranweisung auf das erste Argument an, die zweite auf das zweite Argument usw. Die Anzahl der Formatieranweisungen und die der Argumente muss übereinstimmen.
Rückgabewert
sprintf liefert die Anzahl der ausgegebenen Zeichen zurück, wobei das abschließende Nullzeichen nicht mitgezählt wird. Im Fehlerfall ist das Funktionsergebnis EOF.
Siehe auch fprintf
printf
sqrt, sqrtl
Siehe auch Syntax #include <math.h>
double sqrt(double x);
long double sqrtl(long double x);
Beschreibung
Berechnet die positive Quadratwurzel des Arguments.
sqrt berechnet die positive Quadratwurzel des Arguments x.
sqrtl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbearbeitung kann für diese Funktionen mit _matherr und _matherrl modifiziert werden.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
sqrt und sqrtl liefern die positive Quadratwurzel des Arguments, wenn x eine reelle Zahl und positiv ist. Ist x reell und negativ, wird die globale Variable errno auf den Wert
EDOM Bereichsfehler
gesetzt.
Siehe auch bcd
complex
exp
DDCHelp Hilfe zur Programmiersprache C Seite 361 von 606
log
pow
srand
Syntax #include <stdlib.h>
void srand(unsigned seed);
Beschreibung
Initialisiert den Zufallszahlengenerator.
Der Zufallszahlengenerator wird beim Aufruf von srand mit dem seed == 1 neu initialisiert. Durch den Aufruf von srand mit einem bestimmten Parameter seed kann er auf einen neuen Startwert gesetzt werden.
Rückgabewert
Keiner.
Siehe auch rand
random
randomize
sscanf
Syntax #include <stdio.h>
int sscanf(const char *buffer, const char *format[, address, ...]);
Beschreibung
Liest und formatiert Eingaben aus einem String.
Hinweis: Details zu Formatieranweisungen finden Sie unter scanf.
sscanf liest eine Reihe von Eingabefeldern zeichenweise aus dem durch buffer angegebenen String. Auf jedes Feld wird dann die entsprechende Formatieranweisung angewendet, die im durch format angegebenen Format-String enthalten ist. Gelesene Eingaben werden an den Adressen gespeichert, die in den Parametern hinter format übergeben werden. Die Anzahl von Eingabefeldern muss mit der Anzahl von Formatieranweisungen und Adressen übereinstimmen.
sscanf kann das Lesen eines bestimmten Eingabefeldes abbrechen, bevor das normale Feldende (ein Whitespace-Zeichen) erreicht ist. sscanf kann auch aus verschiedenen Gründen den Lesevorgang vollständig abbrechen. Die möglichen Ursachen hierfür werden unter scanf erläutert.
Rückgabewert
sscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück. Gelesene, aber nichtgespeicherte Felder werden nicht mitgezählt.
Der Versuch, über das Ende des Strings hinauszulesen, liefert den Wert EOF.
Wurden keine Felder gespeichert, so wird 0 zurückgeliefert.
Siehe auch fscanf
DDCHelp Hilfe zur Programmiersprache C Seite 362 von 606
scanf
stackavail
Syntax #include <malloc.h>
size_t stackavail(void);
Beschreibung
Ermittelt die Größe des verfügbaren Speichers.
stackavail gibt die Größe des verfügbaren Speichers auf dem Stack in Bytes zurück. Diese Größe entspricht dem dynamischen Speicher, auf den alloca zugreifen kann.
Rückgabewert
stackavail liefert einen Wert vom Typ size_t zurück, der der Größe des verfügbaren Speichers in Bytes entspricht.
Siehe auch alloca
_status87
Syntax #include <float.h>
unsigned int _status87(void);
Beschreibung
Liefert den Status der Gleitkommafunktionen zurück.
Diese Funktion liefert den aktuellen Wert des Statusworts der Gleitkommafunktionen zurück. Das Wort muss als Bitmuster interpretiert werden und enthält neben den Statusbits des 80x87 Koprozessors verschiedene Flags, die von der Routine zur Fehlerbehandlung gesetzt werden.
Rückgabewert
Die Bits des Rückgabewerts stellen den Gleitkommastatus dar. In der Header-Datei float.h finden Sie die vollständige Definition der von _status87 zurückgelieferten Bits.
stime
Syntax #include <time.h>
int stime(time_t *tp);
Beschreibung
Setzt Datum und Uhrzeit des Systems.
stime setzt Datum und Uhrzeit des Systems auf den über den Zeiger tp angegebenen Wert, der in Sekunden seit dem 1. Januar 1970, 0 Uhr 00:00 (Greenwich Mean Time) gemessen wird.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 363 von 606
stime liefert immer den Wert 0.
Siehe auch asctime
ftime
gettime
gmtime
localtime
time
tzset
stpcpy
Syntax #include <string.h>
char *stpcpy(char *dest, const char *src);
Beschreibung
Kopiert einen String in einen anderen.
stpcpy kopiert den Inhalt des durch src angegebenen nullterminierten Strings in den durch dest angegebenen Speicherbereich. Der Vorgang wird abgebrochen, sobald das abschließende Nullzeichen von src erreicht wird.
Rückgabewert
stpcpy liefert einen Zeiger zurück, der auf das neue Ende von dest zeigt, also dest + strlen(src).
Siehe auch strcpy
strcat, _fstrcat
Syntax #include <string.h>
char *strcat(char *dest, const char *src);
char far * far _fstrcat(char far *dest, const char far *src)
Beschreibung
Hängt einen String an einen anderen.
strcat hängt sämtliche Zeichen von src an die bereits in dest vorhandenen Zeichen an. Die Länge des resultierenden Strings ist strlen(dest) + strlen(src).
Rückgabewert
Zurückgeliefert wird ein Zeiger auf den zusammengefügten String.
DDCHelp Hilfe zur Programmiersprache C Seite 364 von 606
strchr, _fstrchr
Siehe auch Syntax #include <string.h>
char *strchr(const char *s, int c); /* nur C */
char far * far _fstrchr(const char far *s, int c) /* nur C */
const char *strchr(const char *s, int c); // nur C++
char *strchr( char *s, int c); // nur C++
const char far * far _fstrchr(const char far *s, int c); // nur C++
char far * far _fstrchr( char far *s, int c); // nur C++
Beschreibung
Sucht einen String nach dem ersten Auftreten eines bestimmten Zeichens ab.
strchr sucht den über s angegebenen String nach dem Zeichen c ab, wobei die Suche mit dem ersten Zeichen von s beginnt. strchr findet die erste Fundstelle des Zeichens c im String s. Das abschließende Nullzeichen wird zum Inhalt des String gezählt und als letztes verglichen, so dass ein Aufruf wie
strchr(strs,0)
einen Zeiger auf das abschließende Nullzeichen von strs liefert.
Rückgabewert
strchr liefert einen Zeiger auf die erste Fundstelle des Zeichens c im String s zurück bzw. den Wert NULL, wenn der String dieses Zeichen nicht enthält.
Siehe auch strcspn
strrchr
strcmp
Syntax #include <string.h>
int strcmp(const char *s1, const char *s2);
Beschreibung
Vergleicht zwei Strings miteinander.
strcmp führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch. Beginnend mit dem ersten Zeichen werden die beiden Strings zeichenweise verglichen, bis zwei korrespondierende Zeichen ungleich sind oder das Ende der Strings erreicht wird.
Rückgabewert
strcmp liefert einen Wert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 gleich s2 ist
> 0 wenn s1 größer als s2 ist
Siehe auch strcmpi
strcoll
stricmp
DDCHelp Hilfe zur Programmiersprache C Seite 365 von 606
strncmp
strncmpi
strnicmp
strcmpi
Syntax #include <string.h>
int strcmpi(const char *s1, const char *s2);
Beschreibung
Vergleicht zwei Strings ohne Unterscheidung von Groß- und Kleinschreibung.
strcmpi führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch; zwischen Groß- und Kleinbuchstaben wird dabei nicht unterschieden.
Die Funktion gibt einen Wert zurück (<0, 0 oder >0), der auf dem Vergleich von s1 (oder einem Teil davon) mit s2 (oder einem Teil davon) basiert.
strcmpi unterscheidet bei deutschen Umlauten dennoch zwischen Groß- und Kleinschreibung.
Die Routinen stricmp und strcmpi haben dieselbe Wirkung. strcmpi ist ein in string.h implementiertes Makro, das Aufrufe von strcmpi in Aufrufe von stricmp übersetzt, strcmpi wurde aus Kompatibilitätsgründen zu anderen Compilern definiert. Für die Verwendung von strcmpi muss daher die Header-Datei string.h eingebunden werden.
Rückgabewert
strcmpi liefert einen Wert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 gleich s2 ist
> 0 wenn s1 größer als s2 ist
Siehe auch strcmp
strcoll
stricmp
strncmp
strncmpi
strnicmp
strcoll
Syntax #include <string.h>
int strcoll(char *s1, char *s2);
Beschreibung
Vergleicht zwei Strings.
strcoll vergleicht den String, auf den s1 zeigt, mit dem String, auf den s2 zeigt. Dabei wird die in der Kategorie LC_COLLATE der aktuellen Locale-Einstellung gesetzte Vergleichsreihenfolge verwendet.
DDCHelp Hilfe zur Programmiersprache C Seite 366 von 606
Rückgabewert
strcoll liefert einen Wert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 gleich s2 ist
> 0 wenn s1 größer als s2 ist
Siehe auch strcmp
strcmpi
stricmp
strncmp
strncmpi
strnicmp
strxfrm
strcpy
Syntax #include <string.h>
char *strcpy(char *dest, const char *src);
Beschreibung
Kopiert einen String in einen anderen.
strcpy kopiert den Inhalt des über src angegebenen Strings in den durch dest angegebenen Speicherbereich. Das abschließende Nullzeichen von src wird als letztes Zeichen kopiert.
Rückgabewert
strcpy liefert dest zurück.
Siehe auch stpcpy
strcspn, _fstrcspn
Siehe auch Syntax #include <string.h>
size_t strcspn(const char *s1, const char *s2);
size_t far *far _fstrcspn(const char far *s1, const char far *s2)
Beschreibung
Liefert die Länge des Teilstrings zurück, der keines der Zeichen einer bestimmten Zeichenmenge enthält.
strcspn liest den String s1 zeichenweise bis eines der in s2 enthaltenen Zeichen auftritt. Die Anzahl der in s1 gelesenen Zeichen bildet den Rückgabewert. Das abschließende Nullzeichen wird nicht mitgezählt. Beide Strings werden durch den Suchvorgang nicht verändert.
DDCHelp Hilfe zur Programmiersprache C Seite 367 von 606
Rückgabewert
strcspn liefert die Länge des Teilstrings von s1 zurück, der nur aus Zeichen besteht, die in s2 nicht vorkommen.
Siehe auch strchr
strrchr
_strdate
Syntax #include <time.h>
char *_strdate(char *buf);
Beschreibung
Konvertiert das aktuelle Datum in einen String.
_strdate konvertiert das aktuelle Datum in einen String und speichert diesen in dem durch buf angegebenen Puffer. buf muss mindestens 9 Zeichen lang sein.
Der String ist durch ein Nullzeichen abgeschlossen und hat das Format MM/DD/YY. MM, DD und YY sind Zahlen mit jeweils zwei Ziffern und geben Monat, Tag und Jahr an.
Rückgabewert
Der Rückgabewert von _strdate ist buf, die Adresse des Datum-Strings.
Siehe auch asctime
ctime
localtime
strftime
_strtime
timetime
strdup, _fstrdup
Siehe auch Syntax #include <string.h>
char *strdup(const char *s);
char far * far _fstrdup(const char far *s)
Beschreibung
Kopiert einen String in einen neuen Speicherbereich.
strdup bestimmt zuerst die Länge des übergebenen String s, reserviert danach mit malloc einen Speicherbereich entsprechender Größe (strlen(s) + 1) und kopiert den Inhalt von s in diesen neu reservierten Speicherbereich. Der Programmierer muss den Speicher selbst wieder freigeben, wenn dieser nicht mehr benötigt wird.
Rückgabewert
strdup liefert einen Zeiger auf den neu reservierten Speicherbereich zurück, der den duplizierten String enthält. Falls nicht genug Platz im Speicher ist (d.h. malloc einen Fehler liefert), dann ist das
DDCHelp Hilfe zur Programmiersprache C Seite 368 von 606
Funktionsergebnis von strdup NULL.
Siehe auch free
_strerror
Syntax #include <string.h>
char *_strerror(const char *s);
Beschreibung
Generiert einen String mit einer Fehlermeldung.
Mit der Funktion _strerror können eigene Fehlermeldungen generiert werden. _strerror liefert einen Zeiger auf einen nullterminierten String zurück, der die Fehlermeldung enthält.
Wenn für s der Wert NULL angegeben wird, dann zeigt der von _strerror zurückgelieferte Wert auf die letzte Fehlermeldung.
Wird für s ein Wert ungleich NULL angegeben, dann enthält der generierte String in dieser Reihenfolge den durch den Parameter s übergebenen String (Ihre Fehlermeldung), einen Doppelpunkt, ein Leerzeichen, die zuletzt erzeugte Systemfehlermeldung und einen Zeilenvorschub (\n). Der übergebene String s darf höchstens 94 Zeichen lang sein.
Rückgabewert
_strerror liefert einen Zeiger auf den generierten Fehlerstring. Der String wird in einem statischen Puffer erzeugt, der bei jedem Aufruf dieser Funktion überschrieben wird.
Siehe auch perror
strerror
strerror
Syntax #include <string.h>
char *strerror(int errnum);
Beschreibung
Liefert einen Zeiger auf einen String mit einer Fehlermeldung.
strerror erwartet einen int-Wert im Parameter errnum und liefert einen Zeiger auf einen statischen String zurück, der die zum Wert von errnum gehörige Fehlermeldung enthält.
Rückgabewert
strerror liefert einen Zeiger auf den generierten Fehlerstring. Der String wird in einem statischen Puffer erzeugt, der bei jedem Aufruf dieser Funktion überschrieben wird.
Siehe auch perror
_strerror
DDCHelp Hilfe zur Programmiersprache C Seite 369 von 606
strftime
Syntax #include <time.h>
size_t strftime(char *s, size_t maxsize, const char *fmt, const struct tm
*t);
Beschreibung
Formatiert die Uhrzeit für die Ausgabe.
strftime formatiert die Uhrzeit im Argument t und gibt sie in das Array aus, auf das das Argument s zeigt. Bei der Formatierung werden die in fmt enthaltenen Formatieranweisungen angewandt. Der Format-String besteht aus null oder mehr Anweisungen und normalen Zeichen. Wie bei printf besteht eine Anweisung aus dem Zeichen %, gefolgt von dem Zeichen für das einzusetzende Format. Alle normalen Zeichen werden unverändert kopiert. Es werden maximal maxsize Zeichen nach s geschrieben.
Rückgabewert
strftime liefert die Anzahl der Zeichen zurück, die nach s geschrieben wurden. Ist die Anzahl der benötigten Zeichen größer als maxsize, so wird 0 zurückgeliefert.
Mehr über strftime ANSI-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungsmodifikationen
Siehe auch localtime
mktime
time
strftime Format-String
Der Format-String für strftime besteht aus Null oder mehr Direktiven und Ordnungszeichen.
Eine Direktive (Formatieranweisung) besteht aus dem %-Zeichen, gefolgt von einem Zeichen, welches die durchzuführende Ersetzung festlegt.
Siehe auch ANSI-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungen
ANSI-definierte Formatieranweisungen
Die folgende Tabelle beschreibt die ANSI-definierten Formatieranweisungen für den Format-String, der mit strftime verwendet wird.
Formatieranweisung Ersetzungen
DDCHelp Hilfe zur Programmiersprache C Seite 370 von 606
%% %-Zeichen
%a Abgekürzter Wochentagname
%A Vollständiger Wochentagname
%b Abgekürzter Monatsname
%B Vollständiger Monatsname
%c Datum und Uhrzeit
%d Zwei Ziffern für den Tag im Monat (01 - 31)
%H Zwei Ziffern für die Stunde (00 - 23)
%I Zwei Ziffern für die Stunde (01 - 12)
%j Drei Ziffern für den Tag im Jahr (001 - 366)
%m Zwei Ziffern für den Monat als Dezimalzahl (1 - 12)
%M Zwei Ziffern für die Minute (00 - 59)
%p AM oder PM (vormittags oder nachmittags)
%S Zwei Ziffern für die Sekunde (00 - 59)
%U Zwei Ziffern für die Wochenzahl, wobei der Sonntag den ersten Tag der Woche darstellt (00 - 53)
%w Wochentag, wobei 0 dem Sonntag entspricht (0 - 6)
%W Zwei Ziffern für die Wochenzahl, wobei der Montag den ersten Tag der Woche darstellt (00 - 53)
%x Datum
%X Uhrzeit
%y Zwei Ziffern für das Jahr ohne Jahrhundert (00 - 99)
%Y Jahr mit Jahrhundert
%Z Name der Zeitzone oder keine Zeichen, wenn keine Zeitzone festgelegt ist
Siehe auch POSIX-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungen
Die folgende Tabelle beschreibt die POSIX-definierten Anweisungen für den Format-String, der mit strftime verwendet wird.
Hinweis: Sie müssen __USELOCALES__ definieren, um diese Deskriptoren zu verwenden.
Formatieranweisung Ersetzung
%C Jahrhundert als Dezimalzahl (00 - 99). Zum Beispiel 1992 => 19
%D Datum im Format mm/tt/jj
%e Tag des Monats als Dezimalzahl in einem zweistelligen Feld mit führendem Leerzeichen (1 -31)
%h Ein Synonym für %b
%n Zeilenvorschubzeichen
%r 12-Stunden-Zeitformat (01 - 12) mit am/pm-String d.h. "%I:%M:%S %p"
%t Tabulatorzeichen
%T 24-Stunden-Zeitangabe (00 - 23) im Format "HH:MM:SS"
%u Wochentag als Dezimalzahl (1 Montag - 7 Sonntag)
Modifikationen
strftime unterstützt ferner für bestimmte Anweisungen POSIX-definierte Modifikationen. Weitere
DDCHelp Hilfe zur Programmiersprache C Seite 371 von 606
Informationen unter POSIX-definierte Formatieranweisungen.
Siehe auch ANSI-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungsmodifikationen
Die folgende Tabelle beschreibt die POSIX-definierten Modifikationen für die folgenden Format-String-Anweisungen, die mit strftime verwendet wird.
Hinweis: Sie müssen __USELOCALES__ definieren, um diese Deskriptoren zu verwenden.
Deskriptormodifikation Ersetzungen
%Od Tag des Monats unter Verwendung von Zahlen und Buchstaben
%Oe Tag des Monats unter Verwendung von Zahlen und Buchstaben
%OH Stunde (24-Stunden) unter Verwendung von Zahlen und Buchstaben
%OI Hour (12-Stunden) unter Verwendung von Zahlen und Buchstaben
%Om Monat unter Verwendung von Zahlen und Buchstaben
%OM Minuten unter Verwendung von Zahlen und Buchstaben
%OS Sekunden unter Verwendung von Zahlen und Buchstaben
%Ou Wochentag als Zahl unter Verwendung von Zahlen und Buchstaben
%OU Wochenzahl des Jahres unter Verwendung von Zahlen und Buchstaben
%Ow Wochentag als Zahl unter Verwendung von Zahlen und Buchstaben
%OW Wochentag des Jahres unter Verwendung von Zahlen und Buchstaben
%Oy Jahr (Offset von %C) unter Verwendung von Zahlen und Buchstaben
%O-Modifikationen
Bei den mit %O modifizierten Formatieranweisungen wird der numerische Wert in die
entsprechende Ordinalzahl konvertiert. Existiert die Ordinalzahl nicht, so wird die unmodifizierte Formatieranweisung verwendet.
Zum Beispiel erzeugt bei Datum 8/20/88
die Formatieranweisung %d den Wert 20 und
die Formatieranweisung %Od den Wert 20th
Siehe auch ANSI-definierte Formatieranweisungen
POSIX-definierte Formatieranweisungen
stricmp, _fstricmp
Siehe auch Syntax #include <string.h>
int stricmp(const char *s1, const char *s2);
int far _fstricmp(const char far *s1, const char far *s2)
Beschreibung
Vergleicht zwei Strings ohne Unterscheidung zwischen Groß- und Kleinschreibung.
stricmp führt mit den Inhalten von s1 und s2 einen unsigned-Vergleich durch. Beginnend mit dem ersten Zeichen wird solange zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder das Ende der Strings erreicht wird. Beim Vergleich werden Groß- und
DDCHelp Hilfe zur Programmiersprache C Seite 372 von 606
Kleinbuchstaben nicht unterschieden.
Zurückgeliefert wird ein Wert(<0, 0 oder >0) der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) basiert.
Die Routinen stricmp und strcmpi erfüllen dieselbe Funktion. strcmpi ist ein in string.h implementiertes Makro, das Aufrufe von strcmpi in Aufrufe von stricmp übersetzt. Daher müssen Sie die Header-Datei string.h einbinden, wenn Sie das Makro strcmpi verwenden wollen.
Rückgabewert
stricmp liefert einen Wert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 gleich s2 ist
> 0 wenn s1 größer als s2 ist
Siehe auch strcmp
strcmpi
strcoll
strncmp
strncmpi
strnicmp
strlen, _fstrlen
Syntax #include <string.h>
size_t strlen(const char *s);
size_t far _fstrlen(const char far *s)
Beschreibung
Berechnet die Länge eines Strings.
strlen berechnet die Länge des durch s angegebenen Strings.
Rückgabewert
strlen liefert die Anzahl der Zeichen des Strings s zurück. Das abschließende Nullzeichen wird dabei nicht mitgezählt.
strlwr, _fstrlwr
Siehe auch Syntax #include <string.h>
char *strlwr(char *s);
char far * far _fstrlwr(char far *s)
Beschreibung
Konvertiert alle Großbuchstaben in einem String in Kleinbuchstaben.
strlwr konvertiert sämtliche Großbuchstaben des durch s übergebenen Strings in Kleinbuchstaben. Dabei wird die Kategorie LC_CTYPE der aktuellen Locale-Einstellung berücksichtigt. In der Locale-Einstellung "C" werden die Großbuchstaben A bis Z in die Kleinbuchstaben a bis z konvertiert. Andere Zeichen (insbesondere Umlaute) werden nicht berücksichtigt.
DDCHelp Hilfe zur Programmiersprache C Seite 373 von 606
Rückgabewert
strlwr liefert einen Zeiger auf den String s zurück.
Siehe auch strupr
strncat, _fstrncat
Syntax #include <string.h>
char *strncat(char *dest, const char *src, size_t maxlen);
char far * far _fstrncat(char far *dest, const char far *src, size_t
maxlen)
Beschreibung
Hängt einen Teilstring an einen anderen an.
strncat hängt die ersten maxlen Zeichen von src an die bereits in dest vorhandenen Zeichen an. Die Operation wird beendet, wenn entweder maxlen Zeichen kopiert wurden oder das Ende von src erreicht ist. Als letztes schreibt strncat grundsätzlich ein Nullzeichen in dest. Die maximale Länge des resultierenden Strings beträgst strlen(dest) + maxlen.
Rückgabewert
strncat liefert dest zurück.
strncmp, _fstrncmp
Siehe auch Syntax #include <string.h>
int strncmp(const char *s1, const char *s2, size_t maxlen);
int far _fstrncmp(const char far *s1, const char far *s2, size_t maxlen)
Beschreibung
Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings miteinander.
strncmp führt den gleichen unsigned-Vergleich wie strcmp durch, vergleicht aber maximal die ersten maxlen Zeichen von s1 und s2 miteinander. Beginnend mit dem ersten Zeichen wird zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder maxlen Zeichen untersucht worden sind.
Rückgabewert
strncmp vergleicht s1 (oder einen Teil davon) mit s2 (oder einen Teil davon) und liefert aufgrund des Vergleichs einen Integerwert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 gleich s2 ist
> 0 wenn s1 größer als s2 ist.
Siehe auch strcmp
strcoll
stricmp
strncmpi
DDCHelp Hilfe zur Programmiersprache C Seite 374 von 606
strnicmp
strncmpi
Syntax #include <string.h>
int strncmpi(const char *s1, const char *s2, size_t n);
Beschreibung
Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings ohne Unterscheidung zwischen strncmpi vergleicht (in einem signed-Vergleich) maximal n Zeichen von s1 und s2 miteinander. Es wird kein Unterschied zwischen Groß- und Kleinschreibung gemacht. Beginnend mit dem ersten Zeichen wird zeichenweise solange verglichen, bis die korrespondierenden Zeichen ungleich oder n Zeichen untersucht worden sind. Zurückgeliefert wird ein Wert(<0, 0 oder >0), der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) basiert.
Die Routinen strnicmp und strncmpi erfüllen dieselbe Funktion; strncmpi ist ein in string.h implementiertes Makro, das Aufrufe von strncmpi in Aufrufe von strnicmp übersetzt. strncmpi wurde aus Kompatibilitätsgründen zu anderen Compilern definiert. Um strncmpi zu verwenden, muss daher die Header-Datei string.h eingebunden werden.
Rückgabewert
strncmpi liefert einen Wert
< 0 wenn s1 kleiner als s2 ist
== 0 wenn s1 und s2 gleich sind
> 0 wenn s1 größer als s2 ist
strncpy, _fstrncpy
Syntax #include <stdio.h>
char *strncpy(char *dest, const char *src, size_t maxlen);
char far * far _fstrncpy(char far *dest, const char far *src, size_t
maxlen)
Beschreibung
Kopiert eine bestimmte Anzahl von Bytes von einem String in einen anderen, wobei strncpy kopiert bis zu maxlen Zeichen des über src angegebenen Strings in den durch dest angegebenen Speicherbereich.
strncpy schreibt immer genau maxlen Zeichen - wenn src weniger als maxlen Zeichen enthält, wird eine entsprechende zusätzliche Anzahl von Nullzeichen in dest angehängt. Wenn src mehr als maxlen Zeichen umfasst, bleibt der nach dest kopierte String ohne ein abschließendes Nullzeichen.
Rückgabewert
strncpy liefert dest zurück.
strnicmp, _fstrnicmp
Syntax #include <string.h>
int strnicmp(const char *s1, const char *s2, size_t maxlen);
int far _fstrnicmp(const char far *s1, const char far *s2, size_t maxlen)
DDCHelp Hilfe zur Programmiersprache C Seite 375 von 606
Beschreibung
Vergleicht eine bestimmte Anzahl von Zeichen zweier Strings ohne Unterscheidung zwischen Groß- und Kleinschreibung.
strnicmp vergleicht (in einem signed-Vergleich) maximal maxlen Zeichen von s1 und s2 miteinander. Es wird kein Unterschied zwischen Groß- und Kleinschreibung gemacht. Beginnend mit dem ersten Zeichen wird zeichenweise verglichen, bis die korrespondierenden Zeichen ungleich sind oder das Ende des Strings erreicht wird.
Zurückgeliefert wird ein Wert (<0, 0 oder >0), der auf dem Vergleich von s1 (oder eines Teils davon) mit s2 (oder eines Teils davon) basiert.
Rückgabewert
strnicmp liefert einen Wert
<0 wenn s1 kleiner als s2 ist
==0 wenn s1 gleich s2 ist
>0 wenn s1 größer als s2 ist
strnset, _fstrnset
Syntax #include <string.h>
char *strnset(char *s, int ch, size_t n);
char far * far _fstrnset(char far *s, int ch, size_t n)
Beschreibung
Füllt eine angegebene Anzahl von Zeichen eines Strings mit einem bestimmten Zeichen.
strnset überschreibt die ersten n Zeichen des durch s angegebenen Strings mit dem Zeichen ch. Wenn n > strlen(s) ist, dann wird n durch strlen(s) ersetzt. strnset beendet die Operation, wenn n Zeichen überschrieben wurden oder wenn das abschließende Nullzeichen erreicht wird.
Rückgabewert
strnset liefert s zurück.
strpbrk, _fstrpbrk
Syntax #include <string.h>
char *strpbrk(const char *s1, const char *s2); /* nur C */
char far *far _fstrpbrk(const char far *s1,
const char far*s2) /* nur C */
const char *strpbrk(const char *s1, const char *s2); // nur C++
char *strpbrk(char *s1, const char *s2); // nur C++
const char far *far _fstrpbrk(const char far *s1,
const char far *s2); // nur C++
char far * far _fstrpbrk(char far *s1,
const char far *s2); // nur C++
Beschreibung
Sucht einen String nach dem ersten Vorkommen bestimmter Zeichen ab.
strpbrk sucht den über s1 angegebenen String nach dem ersten Vorkommen eines in s2 enthaltenen Zeichens ab.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 376 von 606
Die Funktion liefert einen Zeiger auf die erste Fundstelle eines Zeichens aus s2 zurück. Erscheint kein Zeichen aus s2 in s1, dann liefert strpbrk den Wert NULL zurück.
strrchr, _fstrrchr
Siehe auch Syntax
char *strrchr(const char *s, int c); /* nur C */
char far * far _fstrrchr(const char far *s, int c) /* nur C */
const char *strrchr(const char *s, int c); // nur C++
char *strrchr(char *s, int c); // nur C++
const char *_fstrrchr(const char far *s, int c); // nur C++
char *_fstrrchr(char far *s, int c); // nur C++
Beschreibung
Sucht einen String nach dem letzten Vorkommen eines bestimmten Zeichens ab.
strrchr sucht den über s angegebenen String nach dem Zeichen c ab, wobei die Suche mit dem letzten Zeichen von s beginnt. Das abschließende Nullzeichen wird zum Stringinhalt gerechnet und als erstes verglichen.
Rückgabewert
strrchr liefert einen Zeiger auf das letzte Vorkommen des Zeichens c in s zurück bzw. den Wert NULL, wenn der String dieses Zeichen nicht enthält.
Siehe auch strcspn
strchr
strrev, _fstrrev
Syntax #include <string.h>
char *strrev(char *s);
char far * far _fstrrev(char far *s)
Beschreibung
Dreht die Reihenfolge der Zeichen eines String um.
strrev spiegelt die Reihenfolge sämtlicher Zeichen des über s angegebenen String (aus "Meier" wird "reieM"). Das abschließende Nullzeichen bleibt unverändert.
Rückgabewert
strrev liefert einen Zeiger auf den gespiegelten String zurück.
strset, _fstrset
Siehe auch Syntax #include <string.h>
char *strset(char *s, int ch);
char far * far _fstrset(char far *s, int ch)
DDCHelp Hilfe zur Programmiersprache C Seite 377 von 606
Beschreibung
Überschreibt sämtliche Zeichen eines String mit einem bestimmten Zeichen.
strset überschreibt sämtliche Zeichen des durch s angegebenen String mit dem Zeichen ch und bricht erst beim abschließenden Nullzeichen ab.
Rückgabewert
strset liefert s zurück.
Siehe auch setmem
strspn, _fstrspn
Syntax #include <string.h>
size_t strspn(const char *s1, const char *s2);
size_t far _fstrspn(const char far *s1, const char far *s2)
Beschreibung
Liefert die Länge des Teilstrings von s1 zurück, der ausschließlich aus den in s2 angegebenen Zeichen besteht.
Beginnend mit dem ersten Zeichen überprüft die Funktion strspn, ob die Zeichen in s1 Bestandteil von s2 sind. Die Funktion stoppt beim ersten Zeichen von s1, das nicht in s2 enthalten ist.
Rückgabewert
strspn liefert die Länge des Teilstrings von s1, der ausschließlich aus Zeichen besteht, die in s2 enthalten sind.
strstr, _fstrstr
Syntax #include <string.h>
char *strstr(const char *s1, const char *s2); /* nur C */
char far * far _fstrstr(const char far *s1,
const char far*s2); /* nur C */
const char *strstr(const char *s1, const char *s2); // nur C++
char *strstr(char *s1, const char *s2); // nur C++
const char far *far _fstrstr(const char far *s1,
const char far *s2); // nur C++
char far * far _fstrstr(char far *s1, const char far *s2); // nur C++
Beschreibung
Sucht einen String nach dem Vorkommen eines bestimmten Teilstrings ab.
strstr sucht den über s1 angegebenen String nach dem ersten Vorkommen des Teilstrings s2 ab.
Rückgabewert
strstr liefert einen Zeiger auf den Beginn von s2 in s1 zurück bzw. den Zeigerwert NULL, wenns2 in s1 überhaupt nicht vorkommt.
DDCHelp Hilfe zur Programmiersprache C Seite 378 von 606
_strtime
Syntax #include <time.h>
char *_strtime(char *buf);
Beschreibung
Konvertiert die aktuelle Uhrzeit in einen String.
_strtime konvertiert die aktuelle Uhrzeit in einen String und speichert diesen in dem durch buf angegebenen Puffer. buf muss mindestens 9 Zeichen lang sein.
Der String wird durch ein Nullzeichen abgeschlossen und hat das folgende Format:
HH:MM:SS
HH, MM und SS sind jeweils Zahlen mit zwei Ziffern und geben Stunde, Minute und Sekunde an. Der String ist nullterminiert.
Rückgabewert
Der Rückgabewert von _strtime ist buf, die Adresse des Uhrzeit-Strings.
Siehe auch asctime
ctime
localtime
strftime
_strdate
timetime
strtod, _strtold
Siehe auch Syntax #include <stdlib.h>
double strtod(const char *s, char **endptr);
long double _strtold(const char *s, char **endptr);
Beschreibung
Konvertiert einen String in einen double- bzw. in einen long double-Wert.
strtod konvertiert den durch s angegebenen String in einen double-Wert. Der Inhalt des String muss daher als double interpretierbar sein und das folgende Format haben:
[ws] [sn] [ddd] [.] [ddd] [fmt [sn] ddd]
mit
[ws] = optionales Whitespace-Zeichen
[sn] = optionales Vorzeichen (+ oder -)
[ddd] = optionale Ziffern
[fmt] = optionales Exponentzeichen (e oder E)
[.] = optionaler Dezimalpunkt
strtod erkennt außerdem +INF und -INF für plus bzw. minus unendlich sowie +NAN und -NAN für Not-A-Number (keine darstellbare Zahl).
Beispiele für gültige Angaben sind:
+ 1231.1981 e-1
502.85E2
+ 2010.952
DDCHelp Hilfe zur Programmiersprache C Seite 379 von 606
strtod bricht die Analyse beim ersten Zeichen ab, das nicht mehr als Teil eines double-Werts interpretiert werden kann.
Solange der Parameter endptr nicht NULL ist, wird *endptr von strtod auf das Zeichen innerhalb von s gesetzt, durch das die Analyse abgebrochen wurde (*endptr = &abbruch_zeichen). endptr ist für die Fehlersuche nützlich.
_strtold ist die long double Version. Sie konvertiert einen String in einen Wert vom Typ long double.
Rückgabewert
Diese Funktionen liefern das Ergebnis der Konvertierung von s als double (strtod) oder als long double (_strtold) zurück. Im Falle eines Überlaufs wird plus oder minus HUGE_VAL (strtod) bzw. _LHUGE_VAL (_strtold) zurückgeliefert.
Siehe auch atof
strtok, _fstrtok
Syntax #include <string.h>
char *strtok(char *s1, const char *s2);
char far * far _fstrtok(char far *s1, const char far *s2)
Beschreibung
Sucht einen String nach einer von mehreren Zeichenfolgen ab, die in einem zweiten String definiert sind.
strtok betrachtet den über s1 angegebenen String als Folge von null oder mehr Zeichenfolgen (Token), die voneinander durch eines oder mehrere der in s2 definierten Zeichen getrennt sind.
Der erste Aufruf von strtok liefert einen Zeiger auf den Beginn der ersten gefundenen Zeichenfolge in s1 zurück und setzt ein Nullzeichen unmittelbar hinter das Ende der Zeichenfolge. Folgende Aufrufe von strtok mit dem Wert NULL anstelle des Arguments s1 liefern die restlichen Zeichenfolgen in s1.
s2 kann bei jedem Aufruf von strtok beliebig geändert werden.
Rückgabewert
strtok liefert einen Zeiger auf den Beginn der gefundenen Zeichenfolge in s1 zurück. Wenn keine weitere Zeichenfolge gefunden wird, ist der Rückgabewert NULL.
strtol
Syntax #include <stdlib.h>
long strtol(const char *s, char **endptr, int radix);
Beschreibung
Konvertiert einen String in einen long-Wert.
strtol konvertiert den durch s angegebenen String in einen long-Wert. Der Stringinhalt muss daher als long-Wert interpretierbar sein und das folgende Format haben:
[ws] [sn] [0] [x] [ddd]
mit
[ws] = optionales Whitespace-Zeichen
DDCHelp Hilfe zur Programmiersprache C Seite 380 von 606
[sn] = optionales Vorzeichen (+ oder -)
[0] = optionale Null (0)
[x] = optionales x oder X
[ddd] = optionale Ziffern
strtol bricht den Lesevorgang ab, wenn ein Zeichen nicht dem obigen Format entspricht.
Liegt radix zwischen 2 und 36, so wird s im Zahlensystem zur Basis radix interpretiert. Ist radix 0, so legen die ersten Zeichen von s die verwendete Basis fest:
Erstes Zeichen Zweites Zeichen Interpretation
0 1 bis 7 Oktalsystem
0 x oder X Hexadezimalsystem
1 bis 9 Dezimalsystem
Ist radix gleich 1, kleiner als 0 oder größer als 36, so wird der Parameter als ungültiger Wert interpretiert.
Bei Ausgabe ungültiger Werte für radix liefert die Funktion Null zurück und setzt den Zeiger *endptr auf den Stringanfang.
Falls der Wert in s als Oktalzahl interpretiert werden soll, werden nur die Zeichen zwischen 0 und 7 erkannt.
Soll der Wert in s als Dezimalzahl interpretiert werden, werden nur die Zeichen 0 bis 9 erkannt.
Falls der Wert in s als Zahl eines Zahlensystems zu einer anderen Basis interpretiert werden soll, werden nur die Zeichen, die zur Repräsentation von Zahlen dieses Zahlensystems verwendet werden, erkannt. (Beispielsweise nur die Zeichen 0 bis 4, wenn radix gleich 5 ist, ist radix gleich 20, werden nur die Zeichen 0 bis 9 und A bis J erkannt.)
Wenn endptr ungleich NULL ist, dann wird *endptr auf die Adresse des ersten nicht analysierbaren Zeichens in s gesetzt (*endptr = &abbruch_zeichen).
Rückgabewert
strtol liefert das Ergebnis der Konvertierung als long-Wert, im Fehlerfall den Wert 0 zurück.
Siehe auch atoi
atol
strtoul
strtoul
Syntax #include <stdlib.h>
unsigned long strtoul(const char *s, char **endptr, int radix);
Beschreibung
Konvertiert einen String in einen unsigned long-Wert im gegebenen radix.
strtoul arbeitet genauso wie strtol, konvertiert die durch s angegebene Zeichenfolge aber in einen unsigned long-Wert (siehe die Beschreibung von strtol).
Rückgabewert
strtoul liefert das Ergebnis der Konvertierung als unsigned long-Wert, im Fehlerfall den Wert 0 zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 381 von 606
Siehe auch atol
strtol
strupr, _fstrupr
Siehe auch Syntax #include <string.h>
char *strupr(char *s);
char far * far _fstrupr(char far *s)
Beschreibung
Konvertiert alle Kleinbuchstaben eines String in Großbuchstaben.
strupr konvertiert die Kleinbuchstaben des durch s angegebenen Strings in Großbuchstaben. Dabei wird die Kategorie LC_TYPE der aktuellen Locale-Einstellung berücksichtigt. In der standardmäßigen Locale-Einstellung "C" werden die Buchstaben a bis z in die Buchstaben A bis Z konvertiert und alle anderen Zeichen (insbesondere die deutschen Umlaute) bleiben unverändert.
Rückgabewert
strupr liefert s zurück.
Siehe auch strlwr
strxfrm
Syntax #include<string.h>
size_t strxfrm(char *target, const char *source, size_t n);
Beschreibung
Transformiert einen String anhand einer bestimmten Sortierreihenfolge.
strxfrm transformiert maximal n Zeichen des durch source angegebenen Strings so in den String target, dass die Funktion strcmp, angewendet auf die Ergebnisstrings der Funktion, dieselben Werte zurückliefert wie die Funktion strcoll, angewendet auf die Ausgangsstrings.
Einschließlich des abschließenden Nullzeichens werden maximal n Zeichen von source transformiert.
Der Ergebnisstring richtet sich nach der Kategorie LC_COLLATE der aktuellen Locale-Einstellung. Der generierte Spezial-String kann mit anderen Strings desselben Typs byteweise (beispielsweise per strcmp) verglichen werden. Die Vergleichsergebnisse entsprechen dann der aktuellen Locale-Einstellung für Vergleiche. Diese Spezial-Strings können als Schlüssel oder Symbol Strings ("tokenized strings") aufgefasst werden und sind jeweils nur innerhalb einer Locale-Einstellung sinnvoll.
Die in target enthaltenen Token werden anhand der von strcoll verwendeten Vergleichsgewichtungen aus den Vergleichstabellen der aktuellen Locale-Einstellung erzeugt.
Die Funktion wird beendet, wenn alle Ebenen bearbeitet wurden oder wenn die Länge des Symbol-String den Parameter n erreicht.
DDCHelp Hilfe zur Programmiersprache C Seite 382 von 606
Alle überflüssigen Token werden aus der Token-Menge jeder Ebene entfernt.
Der Puffer für den Symbol- String muss groß genug sein. Seine Größe hängt von der Länge des String source, von der Anzahl der Vergleichsebenen, von den Regeln für jede Ebene sowie vom Auftreten von Sonderzeichen ab. Bestimmte Sonderzeichen verursachen zusätzliche Bearbeitungsschritte und damit erhöhten Platzbedarf. Das französische Zeichen "oe" benötigt beispielsweise den doppelten Platz, da es in einigen Locale-Einstellungen pro Ebene auf zwei Vergleichsgewichtungen erweitert wird. Teil-Strings mit Ersetzungen benötigen ebenfalls zusätzlichen Platz.
Für die Berechnung des benötigten Speicherplatzes gibt es keine allgemeingültige Formel. Es sind jedoch mindestens (Ebenen * Stringlänge) Bytes erforderlich.
Rückgabewert
strxfrm liefert die Anzahl der transformierten Zeichen zurück. Das abschließende Nullzeichen wird nicht mitgezählt. Ist der zurückgelieferte Wert gleich oder größer als n, dann ist der Inhalt von target unbestimmt.
Siehe auch strcmp
strcoll
strncpy
swab
Syntax #include <stdlib.h>
void swab(char *from, char *to, int nbytes);
Beschreibung
Vertauscht Bytepositionen.
swab liest nbytes Bytes von dem durch from bezeichneten Speicherbereich, tauscht jeweils die Worthälften miteinander aus (das erste Byte wird mit dem zweiten vertauscht, das dritte mit dem vierten usw.), und schreibt diese vertauschten Bytes in den durch to bezeichneten Speicherbereich. Der Parameter nbytes sollte einen geradzahligen Wert haben. Sinnvoll ist swab hauptsächlich dann, wenn Daten zwischen Maschinen mit Prozessoren ausgetauscht werden sollen, die mit unterschiedlichen Byte-Reihenfolgen arbeiten.
Rückgabewert
Keiner.
system
Syntax #include <stdlib.h>
int system(const char *command);
Beschreibung
Führt einen Betriebssystembefehl aus.
system ruft innerhalb eines ausgeführten C-Programms den Kommandozeileninterpreter des Betriebssystems zur Ausführung eines Befehls, einer Batch-Datei oder eines Programms auf. Dazu wird ihm der String command als Kommandozeile übergeben.
DDCHelp Hilfe zur Programmiersprache C Seite 383 von 606
Aufgerufene Programme müssen sich im aktuellen Verzeichnis bzw. in einem in der Umgebungsvariable PATH aufgeführten Verzeichnis befinden.
Der Kommandozeileninterpreter wird mit Hilfe der Umgebungsvariable COMSPEC gefunden, so dass sich die Datei des Kommandozeileninterpreters nicht im aktuellen Verzeichnis befinden muss.
Rückgabewert
system liefert einen Wert ungleich Null, falls command ein NULL-Zeiger ist und der Kommandozeileninterpreter zur Verfügung steht.
Ist command kein NULL-Zeiger, so liefert system den Wert 0 zurück, falls der Kommandozeileninterpreter erfolgreich gestartet wurde.
Im Fehlerfall wird der Wert -1 zurückgeliefert und errno auf einen der folgenden Werte gesetzt:
ENOENT Pfad/Dateiname nicht gefunden
ENOEXEC exec-Formatfehler
ENOMEM Nicht genug Platz im Hauptspeicher
Siehe auch exec...
_fpreset
searchpath
spawn...
tan, tanl
Syntax #include <math.h>
double tan(double x);
long double tanl(long double x);
Beschreibung
Liefert den Tangens des Arguments.
tan erwartet einen Winkel in der Einheit rad als Argument und liefert den dazugehörigen Tangens (sin(x)/cos(x)) zurück.
tanl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung für tan und tanl kann mit _matherr bzw. _matherrl. modifiziert werden.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
tan und tanl liefern den Tangens von x zurück.
Siehe auch acos
DDCHelp Hilfe zur Programmiersprache C Seite 384 von 606
asin
atan
atan2
bcd
complex
cos
sin
tanh, tanhl
Syntax #include <math.h>
double tanh(double x);
long double tanhl(long double x);
Beschreibung
Liefert den Tangens hyperbolicus des Arguments.
tanh berechnet den Tangens hyperbolicus (sinh(x) / cosh(x)).
tanhl ist die long double Version. Sie erwartet ein Argument vom Typ long double und liefert ein Ergebnis vom Typ long double zurück. Die Fehlerbehandlung für tanh und tanhl kann mit _matherr bzw. _matherrl modifiziert werden.
Diese Funktion kann mit den Datentypen bcd und complex verwendet werden.
Rückgabewert
tanh und tanhl liefern den Tangens hyperbolicus von x.
Siehe auch bcd
complex
cos
cosh
sin
sinh
tan
tell
Syntax #include <io.h>
long tell(int handle);
Beschreibung
Liefert die aktuelle Position eines Dateizeigers zurück.
tell liefert die aktuelle Position des Dateizeigers innerhalb der durch handle bezeichneten Datei als Byte-Zahl relativ zum Dateianfang zurück.
Rückgabewert
tell liefert die aktuelle Position des Dateizeigers innerhalb der angegebenen Datei als long-Wert zurück. Im Fehlerfall wird -1L zurückgeliefert und die globale Variable errno erhält den Wert:
DDCHelp Hilfe zur Programmiersprache C Seite 385 von 606
EBADF Ungültiges Handle
Siehe auch fgetpos
fseek
ftell
lseek
tempnam
Syntax #include <stdio.h>
char *tempnam(char *dir, char *prefix)
Beschreibung
Erzeugt einen eindeutigen Dateinamen im angegebenen Verzeichnis.
Die Funktion tempnam erzeugt eindeutige Dateinamen in beliebigen Verzeichnissen. Die zugehörige Datei wird dabei nicht erzeugt - tempnam gewährleistet lediglich, dass eine Datei mit diesem Namen noch nicht existiert. tempnam versucht, in den folgenden Verzeichnissen (in der angegebenen Reihenfolge) einen eindeutigen Dateinamen zu erzeugen:
In dem durch die Umgebungsvariable TMP angegebenen Verzeichnis.
In dem Verzeichnis, das mit dir an tempnam übergeben wird.
Im Verzeichnis, das in der P_tmpdir-Definition in stdio.h angegeben ist. Wenn Sie dieses Verzeichnis in stdio.h ändern, wird die neue Definition nicht von tempnam verwendet.
Im aktuellen Arbeitsverzeichnis.
Wenn eines der aufgeführten Verzeichnisse NULL, nicht definiert oder nicht vorhanden ist, wird es ignoriert.
Der Parameter prefix enthält den ersten Teil des Dateinamens. Dieser darf nicht länger als fünf Zeichen sein und keinen Punkt (.) enthalten. Durch die Verknüpfung des Verzeichnisnamens mit dem Parameter prefix und 6 zusätzlichen Zeichen wird ein eindeutiger Dateiname erzeugt. Der Speicherplatz für den resultierenden Dateinamen wird mit malloc reserviert. Wenn der Dateiname nicht mehr benötigt wird, sollte die aufrufende Funktion den Speicherplatz durch einen Aufruf von free wieder freigeben.
Im Gegensatz zur Funktion tmpfile löscht tempnam den Datei nicht. Wenn Sie mit dem über tempnam erzeugten Namen eine temporäre Datei erstellen, liegt es deshalb in Ihrer Verantwortung, die Datei vor dem Ende des Programms wieder zu löschen (z.B. mit remove).
Rückgabewert
Bei fehlerfreier Ausführung liefert tempnam einen Zeiger auf den eindeutigen Namen einer temporären Datei. Dieser Zeiger kann später (wenn der Dateiname nicht mehr benötigt wird) an free übergeben werden. Wenn tempnam keinen eindeutigen Dateinamen zurückliefern kann, ist das Funktionsergebnis NULL.
Siehe auch mktemp
tmpfile
tmpnam
DDCHelp Hilfe zur Programmiersprache C Seite 386 von 606
textattr
Syntax #include <conio.h>
void textattr(int newattr);
Beschreibung
Setzt das Attribut für folgende Textausgaben.
Hinweis: Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.
textattr setzt sowohl die Vordergrund- als auch die Hintergrundfarbe für folgende Textausgaben (d.h., sie vereinigt die Funktionen textcolor und textbackground).
Diese Funktion lässt bereits auf dem Bildschirm befindliche Zeichen unverändert. Sie verändert nur die Zeichen, die im Textmodus von Funktionen (wie cprintf) direkt auf den Bildschirm ausgegeben werden, nachdem die Funktion aufgerufen wurde.
Der Parameter newattr hat die folgende Struktur:
Der 8 Bit Parameter newattr ist folgendermaßen aufgebaut:
ffff ist die 4 Bit-Vordergrundfarbe (0 bis 15).
bbb ist die 3 Bit-Hintergrundfarbe (0 bis 7).
B steuert das Attribut "Blinken".
Wenn das Attribut "Blinken" eingestellt ist, blinkt das Zeichen. Dies kann durch Hinzufügen der Konstante BLINK geschehen.
Wenn die in conio.h definierten Farbkonstanten zur Zuordnung von Textattributen über textattr verwendet werden sollen, müssen folgende Beschränkungen beachtet werden:
Sie können nur eine der acht ersten Farben für den Hintergrund wählen.
Die Hintergrundfarbe muss um 4 Bitpositionen nach links geschoben werden.
Für Vorder- und Hintergrundfarben sind die folgenden symbolischen Konstanten in conio.h definiert:
Konstante Wert Beschreibung Vorder/Hintergrund
BLACK 0 schwarz Für beide
BLUE 1 blau Für beide
GREEN 2 grün Für beide
CYAN 3 türkis Für beide
RED 4 rot Für beide
MAGENTA 5 violett Für beide
BROWN 6 braun Für beide
LIGHTGRAY 7 hellgrau Für beide
DARKGRAY 8 dunkelgrau Nur für Vordergrund
LIGHTBLUE 9 hellblau Nur für Vordergrund
LIGHTGREEN 10 hellgrün Nur für Vordergrund
LIGHTCYAN 11 helltürkis Nur für Vordergrund
LIGHTRED 12 hellrot Nur für Vordergrund
LIGHTMAGENTA 13 hellviolett Nur für Vordergrund
YELLOW 14 gelb Nur für Vordergrund
DDCHelp Hilfe zur Programmiersprache C Seite 387 von 606
WHITE 15 weiß Nur für Vordergrund
BLINK 128 blinkend Nur für Vordergrund
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
Rückgabewert
Keiner.
Siehe auch gettextinfo
highvideo
lowvideo
normvideo
textbackground
textcolor
textbackground
Syntax #include <conio.h>
void textbackground(int newcolor);
Beschreibung
Legt die Hintergrundfarbe für nachfolgende Textausgaben fest.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
textbackground legt die Hintergrundfarbe für folgende Zeichenausgaben fest, die im Textmodus direkt auf dem Bildschirm geschrieben werden. Der Parameter newcolor legt die neue Hintergrundfarbe fest. Erkann auf einen Integerwert zwischen 0 bis 7 oder auf eine der in conio.h definierten Konstanten gesetzt werden. Falls Sie symbolische Konstanten verwenden, muss die Header-Datei conio.h eingebunden werden.
Wenn textbackground aufgerufen wurde, verwenden alle folgenden Funktionsaufrufe mit direkter Bildschirmausgabe (wie z.B. cprintf) den Parameter newcolor. Bereits auf dem Bildschirm befindliche Zeichen bleiben unverändert.
Die Werte für die Hintergrundfarbe entsprechen den folgenden in conio.h definierten symbolischen Konstanten:
Name Beschreibung Wert
BLACK schwarz 0
BLUE blau 1
GREEN grün 2
CYAN türkis 3
RED rot 4
MAGENTA violett 5
BROWN braun 6
LIGHTGRAY hellgrau 7
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 388 von 606
Keiner.
Siehe auch gettextinfo
textattr
textcolor
textcolor
Syntax #include <conio.h>
void textcolor(int newcolor);
Beschreibung
Legt die Zeichenfarbe für folgende Textausgaben fest.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
textcolor legt die Zeichenfarbe für folgende Ausgaben fest; der zulässige Wertebereich für newcolor ist 0 bis 15 oder einer der in conio.h definierten symbolischen Konstanten. Falls Sie symbolische Konstanten verwenden, muss die Header-Datei conio.h eingebunden werden.
Wenn textcolor aufgerufen wurde, verwenden alle folgenden Aufrufe von Funktionen mit direkter Bildschirmausgabe (wie z.B. cprintf) den Parameter newcolor. Bereits auf dem Bildschirm befindliche Zeichen bleiben unverändert.
Die folgenden symbolischen Konstanten für die Zeichenfarbe sind in conio.h definiert:
Name Beschreibung Wert
BLACK schwarz 0
BLUE blau 1
GREEN grün 2
CYAN türkis 3
RED rot 4
MAGENTA violett 5
BROWN braun 6
LIGHTGRAY hellgrau 7
DARKGRAY dunkelgrau 8
LIGHTBLUE hellblau 9
LIGHTGREEN hellgrün 10
LIGHTCYAN helltürkis 11
LIGHTRED hellrot 12
LIGHTMAGENTA hellviolett 13
YELLOW gelb 14
WHITE weiß 15
BLINK blinkend 128
Durch Addition des Wertes 128 zur Vordergrundfarbe können Sie Zeichen blinkend darstellen lassen. Zu diesem Zweck wurde auch die Konstante BLINK definiert. Sie verwenden sie wie folgt:
DDCHelp Hilfe zur Programmiersprache C Seite 389 von 606
textcolor (CYAN + BLINK);
Hinweis: Nicht alle Farbmonitore reagieren auf das Intensitätsbit, das die Farben 0 bis7 und 8 bis 15 voneinander unterscheidet. Wie die verschiedenen Farben auf Systemen mit monochromen, LCD- und Plasmabildschirmen dargestellt werden (verschiedene Helligkeitsgrade, spezielle Muster oder Attribute wie unterstrichen, fett, etc.), hängt von der jeweiligen Hardware ab.
Rückgabewert
Keiner.
Siehe auch gettextinfo
highvideo
lowvideo
normvideo
textattr
textbackground
textmode
Syntax #include <conio.h>
void textmode(int newmode);
Beschreibung
Setzt einen Textmodus.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
textmode setzt einen bestimmten Textmodus.
Sie können den Textmodus über den Parameter textmode mit Hilfe des in conio.h definierten Aufzählungstyps text_modes setzen.
Die am häufigsten benutzten text_modes-Werte werden in der folgenden Tabelle aufgeführt. In conio.h finden Sie einige weitere Werte.
Name Beschreibung
LASTMODE vorheriger Textmodus
BW40 schwarz-weiß, 40 Spalten
C40 farbig, 40 Spalten
BW80 schwarz-weiß, 80 Spalten
C80 farbig, 80 Spalten
MONO schwarz-weiß, 80 Spalten für Monochrom-Adapter bzw. Hercules-Karte
C4350 EGA 43-Zeilen und VGA 50-Zeilen-Modus
Beim Aufruf von textmode wird das aktuelle Fenster auf die gesamte Bildschirmgröße vergrößert und die Textattribute werden wie beim Aufruf von normvideo auf ihre Standardwerte zurückgesetzt.
Ein Aufruf von textmode mit der Konstanten LASTMODE als Parameter ist nur dann sinnvoll, wenn der Bildschirm bereits im Textmodus ist; der Bildschirm wird dann auf den zuletzt verwendeten Textmodus umgeschaltet.
textmode sollte generell nur verwendet werden, wenn der Bildschirm bereits im Textmodus ist. Befindet sich der Bildschirm im Grafikmodus, so sollten Sie stattdessen restorecrtmode zum
DDCHelp Hilfe zur Programmiersprache C Seite 390 von 606
vorübergehenden Umschalten in den Textmodus verwenden.
Rückgabewert
Keiner.
Siehe auch gettextinfo
window
time
Syntax #include <time.h>
time_t time(time_t *timer);
Beschreibung
Liefert Datum und Uhrzeit des Systems.
time setzt die mit timer übergebene Variable auf die Anzahl der Sekunden, die seit dem 1. Januar 1970, 00:00:00 (Greenwich Mean Time) verstrichen sind, sofern timer kein NULL-Zeiger ist.
Rückgabewert
time liefert die Anzahl der seit dem 1.1.1970 verstrichenen Sekunden zurück.
Siehe auch asctime
ctime
difftime
ftime
gettime
gmtime
localtime
settime
stime
tzset
tmpfile
Syntax #include <stdio.h>
FILE *tmpfile(void);
Beschreibung
Öffnet eine temporäre Datei im Binärmodus.
tmpfile erzeugt eine temporäre binäre Datei und öffnet diese Datei für Lese- und Schreibzugriffe (w+b). Diese Datei wird beim Schließen bzw. bei Programmende automatisch wieder gelöscht, sofern nicht vorher das Arbeitsverzeichnis gewechselt wurde.
DDCHelp Hilfe zur Programmiersprache C Seite 391 von 606
Rückgabewert
Bei fehlerfreier Ausführung liefert tmpfile einen Zeiger auf den Stream der erzeugten Temporärdatei zurück. Wenn die Datei aus irgendeinem Grund nicht erzeugt oder geöffnet werden konnte, ist das Funktionsergebnis NULL.
Siehe auch fopen
tmpnam
tmpnam
Syntax #include <stdio.h>
char *tmpnam(char *s);
Beschreibung
Erzeugt eindeutige Namen für temporäre Dateien.
tmpnam erzeugt bei jedem Aufruf einen neuen String und kann für die Benennung temporärer Dateien verwendet werden. Die Funktion erzeugt bis zu TMP_MAX verschiedene Dateinamen. TMP_MAX ist in stdio.h mit dem Wert 65535 definiert.
Wenn der als s übergebene Zeiger den Wert NULL hat, liefert tmpnam einen Zeiger auf einen statischen Puffer zurück, der durch jeden Aufruf dieser Funktion erneut gesetzt wird. Wenn s einen Wert ungleich NULL hat, erwartet tmpnam, dass dieser Zeiger auf ein char-Array mit mindestens L_tmpnam Elementen zeigt und kopiert das Funktionsergebnis in dieses Array. Die Konstante L_tmpnam ist in stdio.h definiert.
Wenn Sie mit tmpname eine Temporärdatei erzeugen, so liegt das Löschen der Datei (beispielsweise durch einen Aufruf von remove) in Ihrer Verantwortung. Die Datei wird nicht (wie etwa bei tmpfile) automatisch gelöscht.
Rückgabewert
Wenn s den Wert NULL hat, liefert tmpnam einen Zeiger auf einen internen statischen Puffer, ansonsten den Zeiger s zurück.
Siehe auch tmpfile
toascii
Syntax #include <ctype.h>
int toascii(int c);
Beschreibung
Konvertiert Zeichen in das ASCII-Format.
toascii ist ein Makro, das den übergebenen Wert c (durch Löschen aller Bits, außer den 7 niederwertigsten) auf den Bereich 0 bis 127 begrenzt und das Ergebnis dieser Operation zurückliefert.
DDCHelp Hilfe zur Programmiersprache C Seite 392 von 606
Rückgabewert
Das Makro liefert das Ergebnis der Konvertierung von c als Wert vom Typ int zurück.
_tolower
Syntax #include <ctype.h>
int _tolower(int ch);
Beschreibung
Wandelt Groß- in Kleinbuchstaben um.
_tolower ist ein Makro, das wie die Funktion tolower das übergebene Zeichen ch in einen Kleinbuchstaben umwandelt. Dieses Makro ist jedoch nur auf Großbuchstaben (A bis Z) anwendbar - für Ziffern und Sonderzeichen erzeugt es unsinnige Ergebnisse.
Für _tolower müssen Sie ctype.h miteinbinden
Rückgabewert
Das Makro liefert als Ergebnis der Konvertierung einen Wert vom Typ int zurück, falls ch ein Großbuchstabe ist; ansonsten ist das Resultat undefiniert.
tolower
Syntax #include <ctype.h>
int tolower(int ch);
Beschreibung
Wandelt Groß- in Kleinbuchstaben um.
tolower ist eine Funktion, die das als Integerwert übergebene Zeichen ch (ein Wert im Bereich von EOF bis 255) in einen Kleinbuchstaben umwandelt.
Rückgabewert
Liefert bei großen Buchstaben den umgewandelten Wert von ch zurück, ansonsten wird das Zeichen unverändert zurückgeliefert.
_toupper
Syntax #include <ctype.h>
int _toupper(int ch);
Beschreibung
Wandelt Klein- in Großbuchstaben um.
_toupper ist ein Makro und wandelt wie die Funktion toupper Kleinbuchstaben in Großbuchstaben um. Im Unterschied zur Funktion muss beim Makro der Parameter ch einen Kleinbuchstaben (a bis z) enthalten.
_toupper kann nur verwendet werden, wenn die Header-Datei ctype.h. eingebunden ist.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 393 von 606
_toupper liefert den konvertierten Wert von ch zurück, falls ch einen Großbuchstaben enthält. Ansonsten ist das Ergebnis undefiniert.
toupper
Syntax #include <ctype.h>
int toupper(int ch);
Beschreibung
Wandelt Klein- in Großbuchstaben um.
toupper ist eine Funktion, die das als Integerwert übergebene Zeichen ch (ein Wert im Bereich von EOF bis 255) in einen Großbuchstaben umwandelt.
Rückgabewert
Falls ch ein Kleinbuchstabe ist, wird der umgewandelte Wert zurückgeliefert. Ansonsten wird das Zeichen unverändert zurückgeliefert.
tzset
Syntax #include <time.h>
void tzset(void)
Beschreibung
Setzt die globalen Variablen _daylight, _timezone und _tzname.
tzset ist auf XENIX-Systemen verfügbar.
Die Funktion setzt die globalen Variablen _daylight, _timezone und _tzname gemäß dem Inhalt der Umgebungsvariable TZ. Die Bibliotheksfunktionen ftime und localtime verwenden diese globalen Variablen, um die Greenwich Mean Time (GMT) an die lokale Zeitzone anzupassen. Die Umgebungsvariable TZ muss folgendes Format besitzen:
TZ = zzz[+|-]d[d][lll]
Das Feld zzz steht für den Namen der Zeitzone, der aus drei Buchstaben bestehen muss. Das ebenfalls obligatorische Feld [+/-]d[d] steht für die Abweichung von der Weltstandardzeit (Greenwich Mean Time: GMT) in Stunden, die durch einen Zahlenwert mit mindestens einer Ziffer (und, falls notwendig, einem Vorzeichen) ausgedrückt wird. Die Verschiebung für Länder westlich des 0. Längengrades wird mit positiven Werten notiert (+5 entspricht beispielsweise der Zeitverschiebung von New York gegenüber Greenwich), für Zeitzonen östlich von Greenwich entstehen negative Werte (für die MEZ gilt beispielsweise -1). Dieser Wert wird zur Berechnung der globalen Variablen _timezone verwendet. _timezone repräsentiert die Zeitdifferenz in Sekunden zwischen der Weltstandardzeit (GMT) und der Ortszeit.
Das Feld lll ist im Gegensatz zu den restlichen Feldern optional; wenn es angegeben ist, muss es aus drei Buchstaben bestehen. Es legt den Namen der lokalen Sommerzeitzone fest.
Wenn tzset keine Umgebungsvariable des Namens TZ findet oder dieser Eintrag nicht den zuvor
gezeigten Regeln genügt, verwendet die Funktion den String Eastern Standard Time
Zeitverschiebung +5 Stunden gegenüber GMT, Sommerzeit definiert. und belegt
die globalen Variablen _daylight, _timezone und _tzname mit den entsprechenden Werten. Die globale Variable _tzname[0] zeigt auf einen drei Zeichen langen String, der den Namen der auf der Umgebungsvariable TZ ermittelten Zeitzone speichert. _tzname[1] zeigt auf einen drei Zeichen langen String, der den Namen der Sommerzeitzone aus TZ speichert. Wurde keine Sommerzeitzone genannt, zeigt _tzname[1] auf einen leeren String.
DDCHelp Hilfe zur Programmiersprache C Seite 394 von 606
Rückgabewert
Keiner.
Siehe auch asctime
ctime
ftime
gmtime
localtime
stime
time
ultoa
Syntax #include <stdlib.h>
char *ultoa(unsigned long value, char *string, int radix);
Beschreibung
Konvertiert einen Wert vom Typ unsigned long in einen String.
Die Funktion konvertiert den übergebenen Wert value in einen nullterminierten String und speichert das Ergebnis in der durch string bezeichneten Variablen. ultoa erwartet einen Wert vom Typ unsigned long in value.
Der Parameter radix legt die Basis fest, zu der die Konvertierung stattfinden soll - mögliche Werte liegen im Bereich von 2 bis 36. ultoa prüft nicht auf Überlauf; wenn radix den Wert 10 hat und value kleiner als Null ist, stellt ultoa dem Ergebnis kein Minuszeichen voran.
Hinweis: Der durch string übergebene String muss in allen Fällen lang genug sein, um das Ergebnis der Konvertierung inklusive des abschließenden Nullzeichens (\0) aufnehmen zu können. ultoa kann maximal 33 Zeichen zurückgeben.
Rückgabewert
Die Funktion liefert string zurück.
Siehe auch itoa
ltoa
umask
Syntax #include <io.h>
unsigned umask(unsigned mode);
Beschreibung
Setzt das Bitfeld für Dateizugriffe (Lese- und Schreiboperationen).
umask setzt das Bitfeld, das bei Aufrufen von open und creat verwendet wird. Die in mode gesetzten Bits werden in den Zugriffsberechtigungen aller im folgenden mit create und open
DDCHelp Hilfe zur Programmiersprache C Seite 395 von 606
erzeugten Dateien gelöscht.
Der Parameter mode kann über die folgenden symbolischen Konstanten festgelegt werden, die in sys\stat.h definiert sind:
Wert von mode Zugriffserlaubnis
S_IWRITE Schreiben erlaubt
S_IREAD Lesen erlaubt
S_IREAD|S_IWRITE Lesen und Schreiben erlaubt
Rückgabewert
Es wird vorherige Wert von mask zurückgeliefert. Ein Fehlerwert existiert nicht.
Siehe auch creat
open
ungetc
Syntax #include <stdio.h>
int ungetc(int c, FILE *stream);
Beschreibung
Stellt ein aus einem Stream gelesenes Zeichen wieder zurück.
Hinweis: Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.
ungetc stellt ein Zeichen für eine erneute Leseoperation zurück in den Eingabe-Stream stream, der für Leseoperationen geöffnet sein muss. Ein Zeichen kann jederzeit zurückgestellt und später mit getc oder fread wieder gelesen werden. Es kann immer nur ein Zeichen zurückgestellt werden - ein zweiter Aufruf von ungetc ohne ein dazwischenliegendes getc überschreibt das zuvor zurückgestellte Zeichen. Die Anwendung von fflush, fseek, fsetpos oder rewind auf eine Datei löscht deren Puffer und damit auch ein eventuell mit ungetc zurückgestelltes Zeichen.
Rückgabewert
ungetc liefert bei fehlerfreier Ausführung das zurückgestellte Zeichen, ansonsten EOF zurück.
Siehe auch fgetc
getc
getchar
ungetch
Syntax #include <conio.h>
int ungetch(int ch);
Beschreibung
DDCHelp Hilfe zur Programmiersprache C Seite 396 von 606
Stellt ein von der Tastatur gelesenes Zeichen in den Tastaturpuffer zurück.
ungetch stellt das Zeichen ch für die nächste Leseaktion von der Tastatur zurück. Es kann nur jeweils ein Zeichen gespeichert werden - ungetch überschreibt ein zuvor zurückgestelltes Zeichen aber nicht, sondern liefert einen Fehler.
Rückgabewert
Die Funktion liefert das Zeichen ch zurück; bei einem Fehler wird EOF zurückgeliefert.
Siehe auch getch
getche
unixtodos
Syntax #include <dos.h>
void unixtodos(long time, struct date *d, struct time *t);
Beschreibung
Konvertiert Datum und Uhrzeit aus dem UNIX- in das DOS-Format.
unixtodos erwartet einen Wert vom Typ long, der Datum und Uhrzeit im UNIX-Format enthält, und setzt die Strukturen des Typs date bzw. time, auf die die Parameter d und t zeigen.
time muss eine Zeitangabe nach dem 1. Januar 1980 00:00:00 darstellen.
Rückgabewert
Keiner.
Siehe auch dostounix
unlink
Syntax #include <io.h>
int unlink(const char *filename);
Beschreibung
Löscht eine Datei.
unlink löscht die durch filename angegebene Datei. Als filename kann jeder Laufwerksbezeichner, jeder Pfad und Dateiname verwendet werden. Die Jokerzeichen * und ? sind in filename nicht erlaubt.
Schreibgeschützte Dateien können mit unlink nicht gelöscht werden. Um eine schreibgeschützte Datei zu löschen, muss zuerst das entsprechende Attribut mit chmod oder _rtl_chmod entfernt werden.
Hinweis: Eine geöffnete Datei muss vor dem Löschen geschlossen werden.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 397 von 606
Bei fehlerfreier Ausführung liefert unlink den Wert 0 zurück. Im Fehlerfall ist das Funktionsergebnis -1 und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
ENOENT Pfad/Datei nicht gefunden
Siehe auch chmod
remove
unlock
Syntax #include <io.h>
int unlock(int handle, long offset, long length);
Beschreibung
Entfernt mit lock gesetzte Sperren bei Dateien im gemeinsamen Zugriff.
unlock ist eine Schnittstelle zu den Betriebssystemmechanismen für gemeinsame Dateizugriffe. unlock gibt einen vorher mit lock gesperrten Dateibereich wieder frei. Zur Vermeidung von Fehlern müssen vor dem Schließen der Datei sämtliche Bereiche entsperrt werden und ein Programm muss alle Sperren aufheben, bevor die Ausführung beendet wird.
Rückgabewert
Die Funktion liefert bei fehlerfreier Ausführung den Wert 0, ansonsten den Wert -1 zurück.
Siehe auch lock
locking
sopen
utime
Syntax #include <utime.h>
int utime(char *path, struct utimbuf *times);
Beschreibung
Setzt Datum und Uhrzeit einer Datei.
utime setzt Uhrzeit und Datum für die durch path angegebene Datei. Die Modifikationszeit ist in der durch times übergebenen Struktur vom Typ utimbuf enthalten. Diese Struktur ist in utime.h definiert und hat das folgende Format:
struct utimebuf {
time_t actime; /* Zugriffszeit */
time_t modtime; /* Modifikationszeit */
};
Das FAT-Dateisystem (File Allocation Table) unterstützt nur die Modifikationszeit. Im FAT-Dateisystem wird actime daher bei einem Aufruf von utime ignoriert und nur modtime zum Setzen der Modifikationszeit verwendet.
DDCHelp Hilfe zur Programmiersprache C Seite 398 von 606
Hat times den Wert NULL, wird die Modifikationszeit der Datei auf die aktuelle Uhrzeit gesetzt.
Rückgabewert
utime liefert bei fehlerfreier Ausführung den Wert 0 zurück. Im Fehlerfall wird -1 zurückgeliefert und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
EMFILE Zu viele Dateien bereits offen
ENOENT Pfad/Datei nicht gefunden
Siehe auch setftime
stat
time
va_arg, va_end, va_start
Syntax #include <stdarg.h>
void va_start(va_list ap, lastfix);
type va_arg(va_list ap, type);
void va_end(va_list ap);
Beschreibung
Makros für Funktionen mit variabler Parameterzahl.
Verschiedene C-Funktionen (wie vfprintf und vprintf) erwarten einen oder mehrere obligatorische Parameter, können aber auch variable Argumentlisten verarbeiten. Die Makros va_arg, va_end und va_start stellen eine portable Schnittstelle dar, um auf diese Argumentlisten zuzugreifen. Sie werden benutzt, um sich entlang einer Liste von Argumenten zu bewegen, wenn die aufgerufene Funktion die Anzahl und die Typen der übergebenen Parameter nicht kennt.
In der Datei stdarg.h sind ein Typ (va_list) und drei Makros (va_start, va_arg und va_end) deklariert:
va_list ist der Array-Typ, der die von va_arg und va_end benötigten Informationen speichert. Eine Funktion mit einer variablen Parameterliste deklariert eine Variable ap vom Typ va_list.
va_start ist ein Makro, das ap auf den ersten variablen Parameter setzt, die der Funktion übergeben wird. Über lastfix wird der Name des letzten festen Parameters der Funktion angegeben. va_start muss vor va_arg und va_end aufgerufen werden.
Das Makro va_arg erwartet einen (zuvor mit va_start initialisierten) Zeiger ap sowie einen Variablentyp (type), interpretiert den jeweils nächsten variablen Parameter der Funktion als Wert des angegebenen Typs und liefert ihn zurück. Danach wird der Zeiger ap um sizeof(type) erhöht.
Hinweis: Für den Parameter type dürfen die Werte char, unsigned char oder float nicht verwendet werden.
Der erste Aufruf von va_arg liefert den Wert des ersten variablen Parameters zurück und erhöht ap entsprechend, so dass ap danach auf den nächsten Parameter zeigt. Weitere Aufrufe von va_arg - wieder mit ap - liefern die jeweils nachfolgenden Parameter zurück.
Das Makro va_end hilft der aufgerufenen Funktion, einen normalen Rücksprung durchzuführen. va_end kann ap verändern, so dass vor einer erneuten Verwendung wieder va_start aufgerufen werden muss. va_end sollte aufgerufen werden, nachdem va_arg alle Argumente abgearbeitet hat; wird dies unterlassen, resultiert daraus unter Umständen ein undefiniertes Verhalten des Programms.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 399 von 606
va_start und va_end haben keinen Rückgabewert, va_arg liefert den aktuellen Parameter der Funktion zurück, wobei der Ergebnistyp durch type bestimmt wird.
Siehe auch vprintf
vscanf
vfprintf
Syntax #include <stdio.h>
int vfprintf(FILE *stream, const char *format, va_list arglist);
Beschreibung
Formatierte Ausgabe in einen Stream.
Hinweis: Benutzen Sie diese Funktion nicht für Win32s- oder Win32-GUI-Anwendungen.
Die v...printf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...printf-Funktionen. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch anstelle einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter printf-Formatieranweisung.
vfprintf übernimmt einen Zeiger auf eine Reihe von Argumenten, wendet auf jedes Argument eine Formatieranweisung an, die in dem durch format gegebenen Format-String enthalten ist, und schreibt die formatierten Daten in den durch stream bezeichneten Stream. Die Anzahl der Argumente und Formatieranweisungen muss identisch sein.
Rückgabewert
Die Funktion liefert die Anzahl der ausgegebenen Bytes zurück. Im Fehlerfall liefert vfprint EOF zurück.
Siehe auch printf
va_arg
va_end
va_start
vfscanf
Syntax #include <stdio.h>
int vfscanf(FILE *stream
const char *format
va_list arglist);
Beschreibung
Formatierte Eingabe aus einem Stream.
Die v...scanf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...scanf-Funktionen. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch anstelle
DDCHelp Hilfe zur Programmiersprache C Seite 400 von 606
einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter scanf-Formatieranweisungen.
vfscanf liest eine Reihe von Eingabefeldern zeichenweise aus dem durch stream angegebenen Stream. Auf jedes Feld wird dann die entsprechende Formatieranweisung angewendet, die vfscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Nach der Analyse der ersten Formatieranweisung wird ein Eingabefeld gelesen, konvertiert und an der entsprechenden Adresse gespeichert. Die Anzahl der Eingabefelder muss mit der Anzahl der Formatieranweisungen und Adressen übereinstimmen.
Es ist möglich, dass vfscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durch ein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.
Rückgabewert
vfscanf liefert die Anzahl der fehlerfrei gelesenen und gespeicherten Felder zurück, wobei nur gelesene aber nicht gespeicherte Felder nicht gezählt werden. Wenn überhaupt keine Zuweisungen erfolgt sind, liefert vfscanf den Wert 0.
Beim Versuch, über das Ende einer Datei hinauszulesen, liefert vfscanf Wert EOF zurück.
Siehe auch fscanf
scanf
va_arg
va_end
va_start
vprintf
Syntax #include <stdarg.h>
int vprintf(const char *format, va_list arglist);
Beschreibung
Formatierte Ausgabe nach stdout.
Die v...printf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...printf-Funktionen. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch anstelle einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter printf-Formatieranweisung.
vprintf akzeptiert einen Zeiger auf ein Reihe von Argumenten, wendet auf jedes Argument eine Formatieranweisung an, die in dem durch format angegebenen Format-String enthalten ist, und schreibt die formatierten Daten nach stdout. Die Anzahl der Argumente und muss mit der der Formatieranweisungen übereinstimmen.
Hinweis: Wenn Sie das Flag SS!=DS bei 16-Bit Anwendungen verwenden, dann geht vprintf davon aus, dass sich die übergebene Adresse im SS-Segment befindet.
In Win32 oder Win32s GUI-Anwendungen muss stdout umgelenkt werden.
Rückgabewert
Die Funktion liefert die Anzahl der ausgegebenen Zeichen zurück. Bei einem Fehler liefert vprintf den Wert EOF zurück.
DDCHelp Hilfe zur Programmiersprache C Seite 401 von 606
Siehe auch freopen
printf
va_arg
va_end
va_start
vscanf
Syntax #include <stdarg.h>
int vscanf(const char *format, va_list arglist);
Beschreibung
Formatierte Eingabe von stdin.
Hinweis: Benutzen Sie diese Funktion nicht für Win32s oder Win32-GUI-Anwendungen.
Die v...scanf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...scanf-Funktionen. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch anstelle einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter scanf-Formatieranweisung.
vscanf liest eine Reihe von Eingabefeldern zeichenweise aus stdin. Auf jedes Feld wird dann die entsprechende Formatieranweisung angewendet, die vscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Nach der Analyse der ersten Formatieranweisung wird ein Eingabefeld gelesen, konvertiert und an der entsprechenden Adresse gespeichert. Die Anzahl der Eingabefelder muss mit der Anzahl der Formatieranweisungen und Adressen übereinstimmen.
Es ist möglich, dass vscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durchein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.
Rückgabewert
vscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück, wobei Felder, die nur gelesen aber nicht gespeichert wurden, nicht gezählt werden. Wenn überhaupt keine Zuweisungen erfolgt sind, ist der Rückgabewert 0.
Beim Versuch, über das Ende der Datei hinauszulesen, liefert vscanf den Wert EOF zurück.
Siehe auch freopen
fscanf
scanf
va_arg
va_end
va_start
DDCHelp Hilfe zur Programmiersprache C Seite 402 von 606
vsprintf
Syntax #include <stdarg.h>
int vsprintf(char *buffer, const char *format, va_list arglist);
Beschreibung
Formatierte Ausgabe in einen String.
Die v...printf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...printf-Funktionen. Sie verhalten sich exakt wie ihre ...printf-Gegenstücke, übernehmen jedoch anstelle einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter printf-Formatieranweisung.
vsprintf akzeptiert einen Zeiger auf ein Reihe von Argumenten, wendet auf jedes Argument eine Formatieranweisung an, die in dem durch format angegebenen Format-String enthalten ist, und schreibt die formatierten Daten in den durch buffer bezeichneten String. Die Anzahl der Argumente muss mit der der Formatieranweisungen übereinstimmen.
Rückgabewert
Die Funktion liefert die Anzahl der ausgegebenen Zeichen zurück. Bei einem Fehler liefert vsprintf EOF zurück.
Siehe auch printf
va_arg
va_end
va_start
vsscanf
Syntax #include <stdarg.h>
int vsscanf(const char *buffer, const char *format, va_list arglist);
Beschreibung
Formatierte Eingabe aus einem String.
Die v...scanf-Funktionen sind eine alternative Aufrufmöglichkeit der entsprechenden ...scanf-Funktionen. Sie verhalten sich exakt wie ihre ...scanf-Gegenstücke, übernehmen jedoch anstelle einer Argumentliste einen Zeiger auf eine Liste von Argumenten als Parameter.
Weitere Details über Formatieranweisungen finden Sie unter scanf-Formatieranweisung.
vsscanf liest eine Reihe von Eingabefeldern zeichenweise aus dem durch buffer bezeichneten String. Auf jedes Feld wird dann die entsprechende Formatieranweisung angewendet, der vsscanf über den Zeiger format auf den Format-String übergeben wurde. Der Format-String legt die Anzahl der Eingaben und ihr Format fest. Gelesene Eingaben werden an den Adressen, die in den format nachfolgenden Parametern angegeben werden, gespeichert. Nach der Analyse der ersten Formatieranweisung wird ein Eingabefeld gelesen, konvertiert und an der entsprechenden Adresse gespeichert. Die Anzahl der Eingabefelder muss der Anzahl der Formatieranweisungen und Adressen übereinstimmen.
Es ist möglich, dass vsscanf das Einlesen eines bestimmten Feldes vorzeitig - d.h. bevor das Feldende (markiert durch ein Whitespace-Zeichen) erreicht ist - abbricht bzw. den Lesevorgang komplett beendet. In der Beschreibung zu scanf werden die Gründe hierfür erläutert.
Rückgabewert
DDCHelp Hilfe zur Programmiersprache C Seite 403 von 606
vsscanf liefert die Anzahl der fehlerfrei gelesenen, konvertierten und gespeicherten Felder zurück, wobei Felder, die zwar gelesen aber nicht gespeichert wurden, nicht gezählt werden. Wenn überhaupt keine Zuweisungen erfolgt sind, ist der Rückgabewert 0.
Beim Versuch, über das Ende des Strings hinauszulesen, wird der Wert EOF zurückgeliefert.
Siehe auch fscanf
scanf
sscanf
va_arg
va_end
va_start
vfscanf
wait
Syntax #include <process.h>
int wait(int *statloc);
Beschreibung
Wartet auf das Ende von Kindprozessen.
Die Funktion wait wartet auf das Ende eines oder mehrerer Kindprozesse. Die Kindprozesse müssen vom aufrufenden Programm selbst erzeugt worden sein, denn wait kann nicht auf Enkelprozesse (Prozesse, die von Kindprozessen erzeugt wurden) warten. Enthält der Parameter statloc einen Wert ungleich NULL, dann wird an dieser Adresse der Beendigungs-Status des Kindprozesses gespeichert.
Bei normaler Beendigung des Kindprozesses (durch Aufruf von exit oder Rücksprung von main) ist das Statuswort folgendermaßen definiert
Bit 0-7 Null
Bit 8-15 Das niederwertige Byte des Rückgabewerts des Kindprozesses. Das ist der durch exit oder den Rücksprung aus main erhaltene Wert. Wird der Kindprozess durch einfachen Rücksprung aus main (ohne Wert) verlassen, so ist der Inhalt dieser Bits unbestimmt. Wird der Kindprozess nicht normal beendet, dann ist das Statuswort wie folgt definiert:
Bits 0-7 Information über die Beendigung des Kindprozesses
1 Abbruch durch kritischen Fehler
2 Ausführungsfehler, Schutzverletzung
3 Externes Signal
Bits 8-15 Null
Rückgabewert
Bei einer normalen Beendigung des Kindprozesses liefert wait die Prozess-ID des Kindes zurück.
Bei einer anormalen Beendigung des Kindprozesses liefert die Funktion -1 an den Elternprozess zurück und setzt errno auf EINTR.
Wenn wait zurückkehrt, ohne dass ein Kindprozess beendet wurde, so liefert die Funktion -1 zurück und setzt errno auf:
ECHILD Kein Kindprozess vorhanden
DDCHelp Hilfe zur Programmiersprache C Seite 404 von 606
Siehe auch cwait
spawn
wcstombs
Syntax #include <stdlib.h>
size_t wcstombs(char *s, const wchar_t *pwcs, size_t n);
Beschreibung
Konvertiert ein wchar_t-Array in einen String aus Multibyte-Zeichen.
wcstombs konvertiert die über pcws angegebenen Elemente des Typs wchar_t in den Multibyte-String s. Die Konvertierung wird beendet, wenn wcstombs auf ein Nullzeichen oder ein ungültiges Multibyte-Zeichen trifft.
Der Parameter n legt fest, wie viele Bytes maximal konvertiert werden. Wenn die betreffende Anzahl Bytes konvertiert und kein Nullzeichen angetroffen wurde, ist das Array s nicht nullterminiert.
Das Verhalten von wcstombs ist von der Kategorie LC_CTYPE der aktuellen locale-Einstellung abhängig.
Rückgabewert
wcstombs liefert (size_t)-1 zurück, wenn es auf ein ungültiges Multibyte-Zeichen trifft. Andernfalls wird die Anzahl der geänderten Bytes zurückgeliefert (das abschließende Zeichen ist - falls vorhanden - darin nicht enthalten).
wctomb
Syntax #include <stdlib.h>
int wctomb(char *s, wchar_t wc);
Beschreibung
Konvertiert einen Wert des Typs wchar_t in ein Multibyte-Zeichen.
Ist s ungleich NULL, stellt wctomb die Anzahl der Bytes fest, die zur Darstellung des durch wc angegebenen Multibyte-Zeichens erforderlich sind (einschließlich vom Status der Umschalttasten abhängiger Codierungen). Das Multibyte-Zeichen wird in s gespeichert. Maximal werden MB_CUR_MAX gespeichert. Hat wc den Wert NULL, behält wctomb den ursprünglichen Zustand bei.
Das Verhalten von wctomb ist von der Kategorie LC_CTYPE der aktuellen locale-Einstellung abhängig.
Rückgabewert
Ist s ein NULL-Zeiger, so liefert wctomb einen Wert ungleich Null, wenn die Multibyte-Zeichen statusabhängige Codierungen enthalten. Sind keine statusabhängigen Codierungen enthalten, so wird Null zurückgeliefert.
Ist s kein NULL-Zeiger, so liefert wctomb den Wert -1 zurück, wenn wc kein gültiges Multibyte-Zeichen enthält. Ansonsten liefert wctomb die Anzahl der Bytes des durch wc angegebenen Multibyte-Zeichens zurück. Der Rückgabewert ist nie größer als der Wert von MB_CUR_MAX.
DDCHelp Hilfe zur Programmiersprache C Seite 405 von 606
wherex
Syntax #include <conio.h>
int wherex(void);
Beschreibung
Liefert die Spaltenposition des Cursor innerhalb eines Fensters zurück.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
wherex liefert die aktuelle Spalte (die x-Koordinate) der Cursor-Position zurück. Die Funktion arbeitet relativ zum aktuellen Textfenster.
Rückgabewert
wherex liefert einen Integerwert im Bereich von 1 bis zur Anzahl der Spalten im aktuellen Videomodus zurück.
Siehe auch gettextinfo
gotoxy
wherey
wherey
Syntax #include <conio.h> int wherey(void);
Beschreibung
Liefert die aktuelle Zeile der Cursor-Position innerhalb eines Fensters zurück.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
wherey liefert die aktuelle Zeile (die y-Koordinate) der Cursor-Position zurück. Die Funktion arbeitet relativ zum aktuellen Textfenster.
Rückgabewert
wherey liefert einen Integerwert im Bereich von 1 bis zur Anzahl der Zeilen im aktuellen Videomodus zurück.
Siehe auch gettextinfo
gotoxy
wherex
DDCHelp Hilfe zur Programmiersprache C Seite 406 von 606
window
Syntax #include <conio.h>
void window(int links, int oben, int rechts, int unten);
Beschreibung
Definiert einen Bereich des Bildschirms als Textfenster.
Hinweis: Diese Funktion sollte in Win32s- oder Win32-GUI-Anwendungen nicht verwendet werden.
window definiert einen rechteckigen Bereich des Bildschirms als Textfenster, dessen obere linke Ecke mit (links, oben) und dessen untere rechte Ecke durch (rechts, unten) festgelegt ist. Die obere linke Ecke des Bildschirms hat die Koordinaten (1,1), die Minimalgröße des Fensters ist ein einzelner Buchstabe (d.h. eine Spalte und eine Zeile).
Wenn einer der vier Parameter von window nicht innerhalb der erlaubten Grenzen liegt, wird der Aufruf ignoriert und das aktuelle Fenster bleibt unverändert.
Die Minimalgröße des Textfensters beträgt 1 Zeile x 1 Spalte. Die Standardgröße entspricht der vollen Bildschirmgröße mit den Koordinaten
1,1,Sp,Ze
wobei Sp die Anzahl der Spalten und Ze die Anzahl der Zeilen im aktuellen Videomodus bezeichnet.
Rückgabewert
Keiner.
Siehe auch clreol
clrscr
delline
gettextinfo
gotoxy
insline
puttext
textmode
Siehe auch lseek
_rtl_read
write
write
Syntax #include <io.h>
int write(int handle, void *buf, unsigned len);
Beschreibung
Schreibt Daten in eine Datei.
DDCHelp Hilfe zur Programmiersprache C Seite 407 von 606
write liest len Bytes ab der durch buf angegebenen Adresse aus dem Speicher und schreibt sie in die durch handle bezeichnete Datei. handle ist ein Datei-Handle, das man durch einen Aufruf von creat, open, dup oder dup2 erhält. Mit Ausnahme von Textdateien entspricht die Anzahl der in die Datei geschriebenen Bytes dem durch den Parameter len angegebenen Wert. Mit write können maximal UINT_MAX-1 Bytes geschrieben werden, da UNIT_MAX dem Wert -1 entspricht, dem Fehlerindikator von write. UINT_MAX ist in limits.h definiert. Wenn die Datei im Textmodus geöffnet wurde und write auf das Zeilenvorschubzeichen LF ('\n') trifft, so wird die Zeichenfolge CR/LF ausgegeben
Ist die Anzahl der tatsächlich geschriebenen Bytes kleiner als len, so ist dies ein Fehler und bedeutet wahrscheinlich, dass die Diskette oder Festplatte voll ist. Bei Diskettendateien schreibt write ab der aktuellen Position des Dateizeigers, bei Gerätedateien wird direkt zum jeweiligen Gerät geschrieben. Wenn die Datei mit O_APPEND (anhängen) geöffnet wurde, setzt write den Dateizeiger automatisch auf das Dateiende.
Rückgabewert
Die Funktion liefert die Anzahl der tatsächlich geschriebenen Bytes zurück (wobei write die aus Zeilenvorschüben erzeugten CR/LF-Kombinationen als ein Byte zählt). Im Fehlerfall wird der Wert -1 zurückgeliefert und errno erhält einen der folgenden Werte:
EACCES Zugriff nicht gestattet
EBADF Ungültiges Handle
Siehe auch creat
lseek
open
read
_rtl_write
Beispiele
/* abs Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
int number = -1234;
printf("number: %d absolute value: %d\n", number, abs(number));
return 0;
}
/* cabs Beispiel */
#include <stdio.h>
#include <math.h>
DDCHelp Hilfe zur Programmiersprache C Seite 408 von 606
#ifdef __cplusplus
#include <complex.h>
#endif
#ifdef __cplusplus /* if C++, use class complex */
void print_abs(void)
{
complex z(1.0, 2.0);
double absval;
absval = abs(z);
printf("The absolute value of %.2lfi %.2lfj is %.2lf",
real(z), imag(z), absval);
}
#else /* below function is for C (and not C++) */
void print_abs(void)
{
struct complex z;
double absval;
z.x = 2.0;
z.y = 1.0;
absval = cabs(z);
printf("The absolute value of %.2lfi %.2lfj is %.2lf",
z.x, z.y, absval);
}
#endif
int main(void)
{
print_abs();
return 0;
}
/* fabs Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
float number = -1234.0;
printf("number: %f absolute value: %f\n", number, fabs(number));
return 0;
}
/* labs Beispiel */
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 409 von 606
#include <math.h>
int main(void)
{
long result;
long x = -12345678L;
result= labs(x);
printf("number: %ld abs value: %ld\n", x, result);
return 0;
}
/* acos Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 0.5;
result = acos(x);
printf("The arc cosine of %lf is %lf\n", x, result);
return 0;
}
/* asin Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 0.5;
result = asin(x);
printf("The arc sin of %lf is %lf\n", x, result);
return(0);
}
/* atan Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 0.5;
result = atan(x);
printf("The arc tangent of %lf is %lf\n", x, result);
return(0);
DDCHelp Hilfe zur Programmiersprache C Seite 410 von 606
}
/* atan2 Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 90.0, y = 45.0;
result = atan2(y, x);
printf("The arc tangent ratio of %lf is %lf\n", (y / x), result);
return 0;
}
/* alloca Beispiel */
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
void test(int a)
{
char *newstack;
int len = a;
char dummy[1];
dummy[0] = 0; /* force good stack frame */
printf("SP before calling alloca(0x%X) = 0x%X\n",len,_SP);
newstack = (char *) alloca(len);
printf("SP after calling alloca = 0x%X\n",_SP);
if (newstack)
printf("Alloca(0x%X) returned %p\n",len,newstack);
else
printf("Alloca(0x%X) failed\n",len);
}
void main()
{
test(256);
test(16384);
}
/* asctime Beispiel */
#include <string.h>
#include <time.h>
#include <stdio.h>
int main(void)
{
struct tm t;
char str[80];
DDCHelp Hilfe zur Programmiersprache C Seite 411 von 606
/* sample loading of tm structure */
t.tm_sec = 1; /* Seconds */
t.tm_min = 30; /* Minutes */
t.tm_hour = 9; /* Hour */
t.tm_mday = 22; /* Day of the Month */
t.tm_mon = 11; /* Month */
t.tm_year = 56; /* Year - does not include century */
t.tm_wday = 4; /* Day of the week */
t.tm_yday = 0; /* Does not show in asctime */
t.tm_isdst = 0; /* Is Daylight SavTime; does not show in asctime */
/* converts structure to null terminated string */
strcpy(str, asctime(&t));
printf("%s\n", str);
return 0;
}
/* ctime Beispiel */
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t t;
time(&t);
printf("Today's date and time: %s\n", ctime(&t));
return 0;
}
/* _beginthread Beispiel */
#include <stdio.h>
#include <errno.h>
#include <stddef.h> /* _threadid variable */
#include <process.h> /* _beginthread, _endthread */
#include <time.h> /* time, _ctime */
void thread_code(void *threadno)
{
time_t t;
time(&t);
printf("Executing thread number %d, ID = %d, time = %s\n",
(int)threadno, _threadid, ctime(&t));
_endthread();
}
void start_thread(int i)
{
int thread_id;
#if defined(__WIN32__)
DDCHelp Hilfe zur Programmiersprache C Seite 412 von 606
if ((thread_id = _beginthread(thread_code,4096,(void *)i)) ==
(unsigned long)-1)
#else
if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == -1)
#endif
{
printf("Unable to create thread %d, errno = %d\n",i,errno);
return;
}
printf("Created thread %d, ID = %ld\n",i,thread_id);
}
int main(void)
{
int i;
for (i = 1; i < 20; i++)
start_thread(i);
printf("Hit ENTER to exit main thread.\n");
getchar();
return 0;
}
/* beginthreadNT Beispiel */
#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <conio.h>
/* This function acts as the 'main' function for each new thread.
static void threadMain(void *arg) */
{
printf("Thread %2d has an ID of %u\n", (int)arg,
GetCurrentThreadId());
_endthread();
}
int main(void)
{
#define NTHREADS 25
HANDLE hThreads[NTHREADS];
int i;
// Create NTHREADS inheritable threads that are initially
// suspended and that will run starting at threadMain().
// at threadMain().
for (i = 0; i < NTHREADS; i++)
{
SECURITY_ATTRIBUTES sa =
{
sizeof(SECURITY_ATTRIBUTES), // structure size
0, // No security
descriptor
TRUE, // Thread handle
is inheritable
DDCHelp Hilfe zur Programmiersprache C Seite 413 von 606
};
DWORD threadId;
hThreads[i] = (HANDLE)_beginthreadNT(
threadMain, // Thread
starting address
4096, // Thread
stack size
(void *)i, // Thread
start argument
&sa, // Thread
security
CREATE_SUSPENDED, // Create
in suspended state
&threadId); // Thread
ID.
if (hThreads[i] == INVALID_HANDLE_VALUE)
{
MessageBox(0, "Thread Creation Failed", "Error",
MB_OK);
return 1;
}
printf("Created thread %2d with an ID of %u\n", i,
threadId);
}
printf("\nPress a key to thaw all threads\n\n");
getch();
// Resume the suspended threads.
for (i = 0; i < NTHREADS; i++)
ResumeThread(hThreads[i]);
// Wait for all threads to finish execution.
WaitForMultipleObjects(NTHREADS, // Number of objects to
wait for
hThreads, // The objects to wait
for
TRUE, // Wait for all objects
INFINITE); // No timeout
// Close all of the thread handles.
for (i = 0; i < NTHREADS; i++)
CloseHandle(hThreads[i]);
return 0;
}
/* biosequip Beispiel */
#include <bios.h>
#include <stdio.h>
#define CO_PROCESSOR_MASK 0x0002
int main(void)
{
DDCHelp Hilfe zur Programmiersprache C Seite 414 von 606
int equip_check;
/* get the current equipment configuration */
equip_check = biosequip();
/* check to see if there is a coprocessor installed */
if (equip_check & CO_PROCESSOR_MASK)
printf("There is a math coprocessor installed.\n");
else
printf("No math coprocessor installed.\n");
return 0;
}
/* _bios_equiplist Beispiel */
#include <stdio.h>
#include <bios.h>
#define CO_PROCESSOR_MASK 0x0002
int main(void)
{
unsigned equip_check;
/* get the current equipment configuration */
equip_check = _bios_equiplist();
/* check to see if there is a coprocessor installed */
if (equip_check & CO_PROCESSOR_MASK)
printf("There is a math coprocessor installed.\n");
else
printf("No math coprocessor installed.\n");
return 0;
}
/* biosmemory Beispiel */
#include <stdio.h>
#include <bios.h>
int main(void)
{
int memory_size;
memory_size = biosmemory(); /* returns value up to 640K */
printf("RAM size = %dK\n",memory_size);
return 0;
}
/* _bios_memsize Beispiel */
#include <stdio.h>
#include <bios.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 415 von 606
{
unsigned memory_size;
memory_size = _bios_memsize(); /* returns value up to 640K */
printf("RAM size = %dK\n", memory_size);
return 0;
}
/* biostime Beispiel */
#include <stdio.h>
#include <bios.h>
#include <time.h>
#include <conio.h>
int main(void)
{
long bios_time;
clrscr();
printf("The number of clock ticks since midnight is:\n");
printf("The number of seconds since midnight is:\n");
printf("The number of minutes since midnight is:\n");
printf("The number of hours since midnight is:\n");
printf("\nPress any key to stop:");
while(!kbhit())
{
bios_time = biostime(0, 0L);
gotoxy(50, 1);
printf("%lu", bios_time);
gotoxy(50, 2);
printf("%.4f", bios_time / _BIOS_CLK_TCK);
gotoxy(50, 3);
printf("%.4f", bios_time / _BIOS_CLK_TCK / 60);
gotoxy(50, 4);
printf("%.4f", bios_time / _BIOS_CLK_TCK / 3600);
}
return 0;
}
/* _bios_timeofday Beispiel */
#include <bios.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
int main(void)
{
long bios_time;
DDCHelp Hilfe zur Programmiersprache C Seite 416 von 606
clrscr();
printf("The number of clock ticks since midnight is:\n");
printf("The number of seconds since midnight is:\n");
printf("The number of minutes since midnight is:\n");
printf("The number of hours since midnight is:\n");
printf("\nPress any key to stop:");
while(!kbhit())
{
_bios_timeofday(_TIME_GETCLOCK, &bios_time);
gotoxy(50, 1);
printf("%lu", bios_time);
gotoxy(50, 2);
printf("%.4f", bios_time / CLK_TCK);
gotoxy(50, 3);
printf("%.4f", bios_time / CLK_TCK / 60);
gotoxy(50, 4);
printf("%.4f", bios_time / CLK_TCK / 3600);
}
return 0;
}
/* bsearch Beispiel */
#include <stdlib.h>
#include <stdio.h>
typedef int (*fptr)(const void*, const void*);
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2)
{
return(*p1 - *p2);
}
#pragma argsused
int lookup(int key)
{
int *itemptr;
/* The cast of (int(*)(const void *,const void*))
is needed to avoid a type mismatch error at
compile time */
itemptr = (int *) bsearch (&key, numarray, NELEMS(numarray),
sizeof(int), (fptr)numeric);
return (itemptr != NULL);
}
int main(void)
{
if (lookup(512))
printf("512 is in the table.\n");
else
printf("512 isn't in the table.\n");
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 417 von 606
/* lfind Beispiel */
#include <stdio.h>
#include <stdlib.h>
int compare(int *x, int *y)
{
return( *x - *y );
}
int main(void)
{
int array[5] = {35, 87, 46, 99, 12};
size_t nelem = 5;
int key;
int *result;
key = 99;
result = (int *) lfind(&key, array, &nelem,
sizeof(int), (int(*)(const void *,const void *))compare);
if (result)
printf("Number %d found\n",key);
else
printf("Number %d not found\n",key);
return 0;
}
/* lsearch Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <string.h> /* for strcmp declaration */
/* initialize number of colors */
char *colors[10] = { "Red", "Blue", "Green" };
int ncolors = 3;
int colorscmp(char **arg1, char **arg2)
{
return(strcmp(*arg1, *arg2));
}
int addelem(char **key)
{
int oldn = ncolors;
lsearch(key, colors, (size_t *)&ncolors, sizeof(char *),
(int(*)(const void *,const void *))colorscmp);
return(ncolors == oldn);
}
int main(void)
{
int i;
char *key = "Purple";
DDCHelp Hilfe zur Programmiersprache C Seite 418 von 606
if (addelem(&key))
printf("%s already in colors table\n", key);
else
{
printf("%s added to colors table\n", key);
}
printf("The colors:\n");
for (i = 0; i < ncolors; i++)
printf("%s\n", colors[i]);
return 0;
}
/* qsort Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(list[0]), sort_function);
for (x = 0; x < 5; x++)
printf("%s\n", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b) );
}
/* _rtl_chmod Beispiel */
#include <errno.h>
#include <stdio.h>
#include <dos.h>
#include <io.h>
int get_file_attrib(char *filename);
int main(void)
{
char filename[128];
int attrib;
printf("Enter a filename:");
scanf("%s", filename);
attrib = get_file_attrib(filename);
if (attrib == -1)
switch(errno)
{
case ENOENT : printf("Path or file not found.\n");
DDCHelp Hilfe zur Programmiersprache C Seite 419 von 606
break;
case EACCES : printf("Permission denied.\n");
break;
default: printf("Error number: %d", errno);
break;
}
else
{
if (attrib & FA_RDONLY)
printf("%s is read-only.\n", filename);
if (attrib & FA_HIDDEN)
printf("%s is hidden.\n", filename);
if (attrib & FA_SYSTEM)
printf("%s is a system file.\n", filename);
if (attrib & FA_DIREC)
printf("%s is a directory.\n", filename);
if (attrib & FA_ARCH)
printf("%s is an archive file.\n", filename);
}
return 0;
}
/* returns the attributes of a DOS file */
int get_file_attrib(char *filename)
{
return(_rtl_chmod(filename, 0));
}
/* _dos_getfileattr Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
char filename[128];
unsigned attrib;
printf("Enter a file name:");
scanf("%s", filename);
if (_dos_getfileattr(filename,&attrib) != 0)
{
perror("Unable to obtain file attributes");
return 1;
}
if (attrib & _A_RDONLY)
printf("%s is read-only.\n", filename);
if (attrib & _A_HIDDEN)
printf("%s is hidden.\n", filename);
if (attrib & _A_SYSTEM)
printf("%s is a system file.\n", filename);
if (attrib & _A_VOLID)
printf("%s is a volume label.\n", filename);
DDCHelp Hilfe zur Programmiersprache C Seite 420 von 606
if (attrib & _A_SUBDIR)
printf("%s is a directory.\n", filename);
if (attrib & _A_ARCH)
printf("%s is an archive file.\n", filename);
return 0;
}
/* _dos_setfileattr Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
char filename[128];
unsigned attrib;
printf("Enter a file name:");
scanf("%s", filename);
if (_dos_getfileattr(filename,&attrib) != 0)
{
perror("Unable to obtain file attributes");
return 1;
}
if (attrib & _A_RDONLY)
{
printf("%s currently read-only, making it read-write.\n", filename);
attrib &= ~_A_RDONLY;
}
else
{
printf("%s currently read-write, making it read-only.\n", filename);
attrib |= _A_RDONLY;
}
if (_dos_setfileattr(filename,attrib) != 0)
perror("Unable to set file attributes");
return 0;
}
/* close Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
main()
{
int handle;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
handle = open("NEW.FIL", O_CREAT);
if (handle > -1)
{
write(handle, buf, strlen(buf));
DDCHelp Hilfe zur Programmiersprache C Seite 421 von 606
close(handle); /* close the file */
}
else
{
printf("Error opening file\n");
}
return 0;
}
/* _rtl_close Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "Hello world";
if ((handle = _rtl_open("TEST.$$$", O_RDWR)) == -1)
{
perror("Error:");
return 1;
}
_rtl_write(handle, msg, strlen(msg));
_rtl_close(handle);
return 0;
}
/* _dos_close Beispiel */
#include <dos.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
unsigned count;
int handle;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)
{
perror("Unable to create DUMMY.FIL");
return 1;
}
if (_dos_write(handle, buf, strlen(buf), &count) != 0)
{
perror("Unable to write to DUMMY.FIL");
return 1;
}
/* close the file */
_dos_close(handle);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 422 von 606
}
/* cos Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 0.5;
result = cos(x);
printf("The cosine of %lf is %lf\n", x, result);
return 0;
}
/* sin Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result, x = 0.5;
result = sin(x);
printf("The sin of %lf is %lf\n", x, result);
return 0;
}
/* tan Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result, x;
x = 0.5;
result = tan(x);
printf("The tan of %lf is %lf\n", x, result);
return 0;
}
/* cosh Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 423 von 606
{
double result;
double x = 0.5;
result = cosh(x);
printf("The hyperbolic cosine of %lf is %lf\n", x, result);
return 0;
}
/* sinh Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result, x = 0.5;
result = sinh(x);
printf("The hyperbolic sin of %lf is %lf\n", x, result);
return 0;
}
/* tanh Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result, x;
x = 0.5;
result = tanh(x);
printf("The hyperbolic tangent of %lf is %lf\n", x, result);
return 0;
}
/* creat Beispiel */
#include <sys\stat.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
/* change the default file mode from text to binary */
_fmode = O_BINARY;
/* create a binary file for reading and writing */
handle = creat("DUMMY.FIL", S_IREAD |S_IWRITE);
DDCHelp Hilfe zur Programmiersprache C Seite 424 von 606
/* write 10 bytes to the file */
write(handle, buf, strlen(buf));
/* close the file */
close(handle);
return 0;
}
/* _rtl_creat Beispiel */
#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
int main() {
unsigned count;
int handle;
char buf[11] = "0123456789";
/* Create a 10-byte file using _dos_creat. */
if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0) {
perror("Unable to _dos_creat DUMMY.FIL");
return 1;
}
if (_dos_write(handle, buf, strlen(buf), &count) != 0) {
perror("Unable to _dos_write to DUMMY.FIL");
return 1;
}
_dos_close(handle);
/* Create another 10-byte file using _rtl_creat. */
if ((handle = _rtl_creat("DUMMY2.FIL", 0)) < 0) {
perror("Unable to _rtl_create DUMMY2.FIL");
return 1;
}
if (_rtl_write(handle, buf, strlen(buf)) < 0) {
perror("Unable to _rtl_write to DUMMY2.FIL");
return 1;
}
_rtl_close(handle);
return 0;
}
/* _dos_creat Beispiel */
#include <dos.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
unsigned count;
int handle;
char buf[11] = "0123456789";
DDCHelp Hilfe zur Programmiersprache C Seite 425 von 606
/* create a file containing 10 bytes */
if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)
{
perror("Unable to create DUMMY.FIL");
return 1;
}
if (_dos_write(handle, buf, strlen(buf), &count) != 0)
{
perror("Unable to write to DUMMY.FIL");
return 1;
}
/* close the file */
_dos_close(handle);
return 0;
}
/* _dos_creatnew Beispiel */
#include <dos.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
unsigned count;
int handle;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
if (_dos_creatnew("DUMMY.FIL", _A_NORMAL, &handle) != 0)
{
perror("Unable to create DUMMY.FIL");
return 1;
}
if (_dos_write(handle, buf, strlen(buf), &count) != 0)
{
perror("Unable to write to DUMMY.FIL");
return 1;
}
/* close the file */
_dos_close(handle);
return 0;
}
/* creatnew Beispiel */
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <dos.h>
#include <io.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
DDCHelp Hilfe zur Programmiersprache C Seite 426 von 606
/* attempt to create a file that doesn't already exist */
handle = creatnew("DUMMY.FIL", 0);
if (handle == -1)
printf("DUMMY.FIL already exists.\n");
else
{
printf("DUMMY.FIL successfully created.\n");
write(handle, buf, strlen(buf));
close(handle);
}
return 0;
}
/* disable Beispiel */
/* * * * * * * * * *
NOTE: This is an interrupt service routine. You cannot compile this
program with Test Stack Overflow turned on and get an executable file
that operates correctly.
* * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt (*oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */
{
/* disable interrupts during the handling of the interrupt */
disable();
/* increase the global counter */
count++;
/* reenable interrupts at the end of the handler */
enable();
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
DDCHelp Hilfe zur Programmiersprache C Seite 427 von 606
printf("count is %d\n",count);
/* reset the old interrupt handler */
setvect(INTR, oldhandler);
return 0;
}
/* _disable Beispiel */
/* * * * * * * * * *
NOTE: This is an interrupt service routine. You cannot compile this
program with Test Stack Overflow turned on and get an executable file
that operates correctly.
* * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt (*oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */
{
/* disable interrupts during the handling of the interrupt */
_disable();
/* increase the global counter */
count++;
/* reenable interrupts at the end of the handler */
enable();
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = _dos_getvect(INTR);
/* install the new interrupt handler */
_dos_setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
_dos_setvect(INTR, oldhandler);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 428 von 606
}
/* enable Beispiel */
/* * * * * * * * * *
NOTE: This is an interrupt service routine. You cannot compile this
program with Test Stack Overflow turned on and get an executable file
that operates correctly.
* * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt (*oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */
{
/* disable interrupts during the handling of the interrupt */
disable();
/* increase the global counter */
count++;
/* reenable interrupts at the end of the handler */
enable();
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
setvect(INTR, oldhandler);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 429 von 606
/* _enable Beispiel */
/* * * * * * * * * *
NOTE: This is an interrupt service routine. You cannot compile this
program with Test Stack Overflow turned on and get an executable file
that operates correctly.
* * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt (*oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS) /* if C++, need the the ellipsis */
{
/* disable interrupts during the handling of the interrupt */
disable();
/* increase the global counter */
count++;
/* reenable interrupts at the end of the handler */
_enable();
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = _dos_getvect(INTR);
/* install the new interrupt handler */
_dos_setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
_dos_setvect(INTR, oldhandler);
return 0;
}
/* div Beispiel */
/* div example */
#include <stdlib.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 430 von 606
div_t x;
int main(void)
{
x = div(10,3);
printf("10 div 3 = %d remainder %d\n",
x.quot, x.rem);
return 0;
}
/* ldiv Beispiel */
/* ldiv example */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
ldiv_t lx;
lx = ldiv(100000L, 30000L);
printf("100000 div 30000 = %ld remainder %ld\n", lx.quot, lx.rem);
return 0;
}
/* dup Beispiel */
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
void flush(FILE *stream);
int main(void)
{
FILE *fp;
char msg[] = "This is a test";
/* create a file */
fp = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, fp);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without closing it */
flush(fp);
printf("\nFile was flushed, Press any key to quit:");
getch();
DDCHelp Hilfe zur Programmiersprache C Seite 431 von 606
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush TC's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
/* dup2 Beispiel */
#include <sys\stat.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
#define STDOUT 1
int nul, oldstdout;
char msg[] = "This is a test";
/* create a file */
nul = open("DUMMY.FIL", O_CREAT | O_RDWR,
S_IREAD | S_IWRITE);
/* create a duplicate handle for standard output */
oldstdout = dup(STDOUT);
/*
redirect standard output to DUMMY.FIL
by duplicating the file handle onto
the file handle for standard output.
*/
dup2(nul, STDOUT);
/* close the handle for DUMMY.FIL */
close(nul);
/* will be redirected into DUMMY.FIL */
write(STDOUT, msg, strlen(msg));
/* restore original standard output handle */
dup2(oldstdout, STDOUT);
/* close duplicate handle for STDOUT */
close(oldstdout);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 432 von 606
/* ecvt Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
char *string;
double value;
int dec, sign;
int ndig = 10;
clrscr();
value = 9.876;
string = ecvt(value, ndig, &dec, &sign);
printf("string = %s dec = %d sign = %d\n", string, dec, sign);
value = -123.45;
ndig= 15;
string = ecvt(value,ndig,&dec,&sign);
printf("string = %s dec = %d sign = %d\n", string, dec, sign);
value = 0.6789e5; /* scientific notation */
ndig = 5;
string = ecvt(value,ndig,&dec,&sign);
printf("string = %s dec = %d sign = %d\n", string, dec, sign);
return 0;
}
/* fcvt Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *str;
double num;
int dec, sign, ndig = 5;
/* a regular number */
num = 9.876;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s decimal place = %d sign = %d\n", str, dec, sign);
/* a negative number */
num = -123.45;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s decimal place = %d sign = %d\n", str, dec, sign);
/* scientific notation */
num = 0.678e5;
str = fcvt(num, ndig, &dec, &sign);
printf("string = %10s decimal place= %d sign = %d\n", str, dec,
sign);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 433 von 606
}
/* execl Beispiel */
/* execl() example */
#include <stdio.h>
#include <process.h>
int main(int argc, char *argv[])
{
int loop;
printf("%s running...\n\n", argv[0]);
if (argc == 1) { /* check for only one command-line parameter */
printf("%s calling itself again...\n", argv[0]);
execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL);
perror("EXEC:");
exit(1);
}
printf("%s called with arguments:\n", argv[0]);
for (loop = 1; loop <= argc; loop++)
puts(argv[loop]); /* Display all command-line parameters */
return 0;
}
/* execlp Beispiel */
/* execlp example */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main( int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
execlp("CHILD.EXE", "CHILD.EXE", "arg1", "arg2", NULL);
perror("exec error");
exit(1);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 434 von 606
/* execle Beispiel */
#include <process.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
int loop;
char *new_env[] = { "TESTING", NULL };
printf("%s running...\n\n", argv[0]);
if (argc == 1) { /* check for only one command-line parameter */
printf("%s calling itself again...\n", argv[0]);
execle(argv[0], argv[0], "ONE", "TWO", "THREE", NULL, new_env);
perror("EXEC:");
exit(1);
}
printf("%s called with arguments:\n", argv[0]);
for (loop = 1; loop <= argc; loop++)
puts(argv[loop]); /* display all command-line parameters */
/* display the first environment parameter */
printf("value of env[0]: %s\n",env[0]);
return 0;
}
/* execlpe Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[], char **envp )
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
execlpe("CHILD.EXE", "CHILD.EXE", "arg1", "arg2", NULL, envp);
perror("exec error");
exit(1);
return 0;
}
/* execv Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
DDCHelp Hilfe zur Programmiersprache C Seite 435 von 606
int main(int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; i++)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
execv("CHILD.EXE", argv);
perror("exec error");
exit(1);
return 0;
}
/* execve Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[], char **envp)
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
execve("CHILD.EXE", argv, envp);
perror("exec error");
exit(1);
return 0;
}
/* execvp Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
DDCHelp Hilfe zur Programmiersprache C Seite 436 von 606
execvp("CHILD.EXE", argv);
perror("exec error");
exit(1);
return 0;
}
/* execvpe Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[], char **envp)
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
execvpe("CHILD.EXE", argv, envp);
perror("exec error");
exit(1);
return 0;
}
/* _exit Beispiel */
#include <stdlib.h>
#include <stdio.h>
void done(void);
int main(void)
{
atexit(done);
_exit(0);
return 0;
}
void done()
{
printf("hello\n");
}
/* _c_exit Beispiel */
#include <process.h>
#include <io.h>
#include <fcntl.h>
DDCHelp Hilfe zur Programmiersprache C Seite 437 von 606
#include <stdio.h>
#include <dos.h>
main()
{
int fd;
char c;
if ((fd = open("_c_exit.c",O_RDONLY)) < 0)
{
printf("Unable to open _c_exit.c for reading\n");
return 1;
}
if (read(fd,&c,1) != 1)
printf("Unable to read from open file handle %d before
_c_exit\n",fd);
else
printf("Successfully read from open file handle %d before
_c_exit\n",fd);
printf("Interrupt zero vector before _c_exit = %Fp\n",_dos_getvect(0));
_c_exit();
if (read(fd,&c,1) != 1)
printf("Unable to read from open file handle %d after _c_exit\n",fd);
else
printf("Successfully read from open file handle %d after
_c_exit\n",fd);
printf("Interrupt zero vector after _c_exit = %Fp\n",_dos_getvect(0));
return 0;
}
/* exit */
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int main(void)
{
int status;
printf("Enter either 1 or 2\n");
status = getch();
/* Sets DOS errorlevel */
exit(status - '0');
/* Note: this line is never reached */
return 0;
}
/* _cexit Beispiel */
#include <windows.h>
#include <process.h>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 438 von 606
#include <stdlib.h>
void exit_func(void)
{
printf("Exit function called\n\n");
printf("Close Window to return to program... It will beep if able to
read from file");
}
int main(void)
{
int fd;
char c;
if ((fd = open("_cexit.c",O_RDONLY)) < 0)
{
printf("Unable to open _cexit.c for reading\n");
return 1;
}
atexit(exit_func);
if (read(fd,&c,1) != 1)
printf("Unable to read from open file handle %d before _cexit\n",fd);
else
printf("Successfully read from open file handle %d before
_cexit\n",fd);
_cexit();
if (read(fd,&c,1) == 1)
MessageBeep(0);
return 0;
}
/* farfree Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
int main(void)
{
char far *fptr;
char *str = "Hello";
/* allocate memory for the far pointer */
fptr = (char far *) farcalloc(10, sizeof(char));
/* copy "Hello" into allocated memory */
/*
Note: movedata is used because you might be in a small data model, in
which case a normal string copy routine can't be used since it assumes
the pointer size is near.
*/
movedata(FP_SEG(str), FP_OFF(str),
FP_SEG(fptr), FP_OFF(fptr),
strlen(str));
/* display string (note the F modifier) */
printf("Far string is: %Fs\n", fptr);
DDCHelp Hilfe zur Programmiersprache C Seite 439 von 606
/* free the memory */
farfree(fptr);
return 0;
}
/* free Beispiel */
#include <string.h>
#include <stdio.h>
#include <alloc.h>
int main(void)
{
char *str;
/* allocate memory for string */
str = (char *) malloc(10);
/* copy "Hello" to string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
/* fgetc Beispiel */
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char ch;
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write a string into the file */
fwrite(string, strlen(string), 1, stream);
/* seek to the beginning of the file */
fseek(stream, 0, SEEK_SET);
do
{
/* read a char from the file */
ch = fgetc(stream);
DDCHelp Hilfe zur Programmiersprache C Seite 440 von 606
/* display the character */
putch(ch);
} while (ch != EOF);
fclose(stream);
return 0;
}
/* fputc Beispiel */
#include <stdio.h>
int main(void)
{
char msg[] = "Hello world";
int i = 0;
while (msg[i])
{
fputc(msg[i], stdout);
i++;
}
return 0;
}
/* fgetchar Beispiel */
#include <stdio.h>
int main(void)
{
char ch;
/* prompt the user for input */
printf("Enter a character followed by <Enter>: ");
/* read the character from stdin */
ch = fgetchar();
/* display what was read */
printf("The character read is: '%c'\n", ch);
return 0;
}
/* fputchar Beispiel */
#include <stdio.h>
int main(void)
{
char msg[] = "This is a test";
int i = 0;
while (msg[i])
{
DDCHelp Hilfe zur Programmiersprache C Seite 441 von 606
fputchar(msg[i]);
i++;
}
return 0;
}
/* fgets Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write a string into the file */
fwrite(string, strlen(string), 1, stream);
/* seek to the start of the file */
fseek(stream, 0, SEEK_SET);
/* read a string from the file */
fgets(msg, strlen(string)+1, stream);
/* display the string */
printf("%s", msg);
fclose(stream);
return 0;
}
/* fputs Beispiel */
#include <stdio.h>
int main(void)
{
/* write a string to standard output */
fputs("Hello world\n", stdout);
return 0;
}
/* _dos_findfirst and _dos_findnext Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
DDCHelp Hilfe zur Programmiersprache C Seite 442 von 606
struct find_t ffblk;
int done;
printf("Directory listing of *.*\n");
done = _dos_findfirst("*.*",_A_NORMAL,&ffblk);
while (!done) {
printf(" %s\n", ffblk.name);
done = _dos_findnext(&ffblk);
}
return 0;
}
/* Program output
Directory listing of *.*
FINDFRST.C
FINDFRST.OBJ
FINDFRST.MAP
FINDFRST.EXE */
/* findfirst and findnext Beispiel */
/* findfirst and findnext example */
#include <stdio.h>
#include <dir.h>
int main(void)
{
struct ffblk ffblk;
int done;
printf("Directory listing of *.*\n");
done = findfirst("*.*",&ffblk,0);
while (!done)
{
printf(" %s\n", ffblk.ff_name);
done = findnext(&ffblk);
}
return 0;
}
/* _fsopen Beispiel */
#include <io.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
int main(void)
{
FILE *f;
int status;
f = _fsopen("c:\\autoexec.bat", "r", SH_DENYNO);
if (f == NULL)
{
printf("_fsopen failed\n");
exit(1);
DDCHelp Hilfe zur Programmiersprache C Seite 443 von 606
}
status = access("c:\\autoexec.bat", 6);
if (status == 0)
printf("read/write access allowed\n");
else
printf("read/write access not allowed\n");
fclose(f);
return 0;
}
/* fdopen Beispiel */
#include <sys\stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
FILE *stream;
/* open a file */
handle = open("DUMMY.FIL", O_CREAT,
S_IREAD | S_IWRITE);
/* now turn the handle into a stream */
stream = fdopen(handle, "w");
if (stream == NULL)
printf("fdopen failed\n");
else
{
fprintf(stream, "Hello world\n");
fclose(stream);
}
return 0;
}
/* fopen Beispiel */
/* Program to create backup of the AUTOEXEC.BAT file */
#include <stdio.h>
int main(void)
{
FILE *in, *out;
if ((in = fopen("\\AUTOEXEC.BAT", "rt"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return 1;
}
if ((out = fopen("\\AUTOEXEC.BAK", "wt"))
DDCHelp Hilfe zur Programmiersprache C Seite 444 von 606
== NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
while (!feof(in))
fputc(fgetc(in), out);
fclose(in);
fclose(out);
return 0;
}
/* freopen Beispiel */
#include <stdio.h>
int main(void)
{
/* redirect standard output to a file */
if (freopen("OUTPUT.FIL", "w", stdout)
== NULL)
fprintf(stderr, "error redirecting stdout\n");
/* this output will go to a file */
printf("This will go into a file.");
/* close the standard output stream */
fclose(stdout);
return 0;
}
/* freemem Beispiel */
#include <dos.h>
#include <alloc.h>
#include <stdio.h>
int main(void)
{
unsigned int size, segp;
int stat;
size = 64; /* (64 x 16) = 1024 bytes */
stat = allocmem(size, &segp);
if (stat < 0)
printf("Allocated memory at segment: %x\n", segp);
else
printf("Failed: maximum number of\
paragraphs available is %u\n", stat);
freemem(segp);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 445 von 606
/* fstat Beispiel */
#include <sys\stat.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
struct stat statbuf;
FILE *stream;
/* open a file for update */
if ((stream = fopen("DUMMY.FIL", "w+"))
== NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return(1);
}
fprintf(stream, "This is a test");
fflush(stream);
/* get information about the file */
fstat(fileno(stream), &statbuf);
fclose(stream);
/* display the information returned */
if (statbuf.st_mode & S_IFCHR)
printf("Handle refers to a device.\n");
if (statbuf.st_mode & S_IFREG)
printf("Handle refers to an ordinary file.\n");
if (statbuf.st_mode & S_IREAD)
printf("User has read permission on file.\n");
if (statbuf.st_mode & S_IWRITE)
printf("User has write permission on file.\n");
printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
printf("Size of file in bytes: %ld\n", statbuf.st_size);
printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));
return 0;
}
/* stat Beispiel */
#include <sys\stat.h>
#include <stdio.h>
#include <time.h>
#define FILENAME "TEST.$$$"
int main(void)
{
struct stat statbuf;
FILE *stream;
/* open a file for update */
if ((stream = fopen(FILENAME, "w+")) == NULL)
{
DDCHelp Hilfe zur Programmiersprache C Seite 446 von 606
fprintf(stderr, "Cannot open output file.\n");
return(1);
}
/* get information about the file */
stat(FILENAME, &statbuf);
fclose(stream);
/* display the information returned */
if (statbuf.st_mode & S_IFCHR)
printf("Handle refers to a device.\n");
if (statbuf.st_mode & S_IFREG)
printf("Handle refers to an ordinary file.\n");
if (statbuf.st_mode & S_IREAD)
printf("User has read permission on file.\n");
if (statbuf.st_mode & S_IWRITE)
printf("User has write permission on file.\n");
printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
printf("Size of file in bytes: %ld\n", statbuf.st_size);
printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));
return 0;
}
/* getc Beispiel */
#include <stdio.h>
int main(void)
{
char ch;
printf("Input a character:");
/* read a character from the
standard input stream */
ch = getc(stdin);
printf("The character input was: '%c'\n", ch);
return 0;
}
/* putc Beispiel */
#include <stdio.h>
int main(void)
{
char msg[] = "Hello world\n";
int i = 0;
while (msg[i])
putc(msg[i++], stdout);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 447 von 606
/* getch Beispiel */
#include <conio.h>
#include <stdio.h>
int main(void)
{
int c;
int extended = 0;
c = getch();
if (!c)
extended = getch();
if (extended)
printf("The character is extended\n");
else
printf("The character isn't extended\n");
return 0;
}
/* getche Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
printf("Input a character:");
ch = getche();
printf("\nYou input a '%c'\n", ch);
return 0;
}
/* getchar Beispiel */
#include <stdio.h>
int main(void)
{
int c;
/*
Note that getchar reads from stdin and is line buffered; this means it
will not return until you press ENTER.
*/
while ((c = getchar()) != '\n')
printf("%c", c);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 448 von 606
/* putchar Beispiel */
#include <stdio.h>
/* define some box-drawing characters */
#define LEFT_TOP 0xDA
#define RIGHT_TOP 0xBF
#define HORIZ 0xC4
#define VERT 0xB3
#define LEFT_BOT 0xC0
#define RIGHT_BOT 0xD9
int main(void)
{
char i, j;
/* draw the top of the box */
putchar(LEFT_TOP);
for (i=0; i<10; i++)
putchar(HORIZ);
putchar(RIGHT_TOP);
putchar('\n');
/* draw the middle */
for (i=0; i<4; i++)
{
putchar(VERT);
for (j=0; j<10; j++)
putchar(' ');
putchar(VERT);
putchar('\n');
}
/* draw the bottom */
putchar(LEFT_BOT);
for (i=0; i<10; i++)
putchar(HORIZ);
putchar(RIGHT_BOT);
putchar('\n');
return 0;
}
/* getcwd Beispiel */
#include <stdio.h>
#include <dir.h>
int main(void)
{
char buffer[MAXPATH];
getcwd(buffer, MAXPATH);
printf("The current directory is: %s\n", buffer);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 449 von 606
/* _getdcwd Beispiel */
#include <direct.h>
#include <stdio.h>
char buf[65];
void main()
{
if (_getdcwd(3, buf, sizeof(buf)) == NULL)
perror("Unable to get current directory of drive C");
else
printf("Current directory of drive C is %s\n",buf);
}
/* _dos_getdate Beispiel */
#include <dos.h>
#include <stdio.h>
int main(void)
{
struct dosdate_t d;
_dos_getdate(&d);
printf("The current year is: %d\n", d.year);
printf("The current day is: %d\n", d.day);
printf("The current month is: %d\n", d.month);
return 0;
}
/* _dos_setdate Beispiel */
#include <dos.h>
#include <process.h>
#include <stdio.h>
int main(void)
{
struct dosdate_t reset;
reset.year = 2001;
reset.day = 1;
reset.month = 1;
printf("Setting date to 1/1/2001.\n");
_dos_setdate(&reset);
system("date");
return 0;
}
/* getdate Beispiel */
#include <dos.h>
#include <stdio.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 450 von 606
{
struct date d;
getdate(&d);
printf("The current year is: %d\n", d.da_year);
printf("The current day is: %d\n", d.da_day);
printf("The current month is: %d\n", d.da_mon);
return 0;
}
/* setdate Beispiel */
#include <stdio.h>
#include <process.h>
#include <dos.h>
int main(void)
{
struct date reset;
struct date save_date;
getdate(&save_date);
printf("Original date:\n");
system("date");
reset.da_year = 2001;
reset.da_day = 1;
reset.da_mon = 1;
setdate(&reset);
printf("Date after setting:\n");
system("date");
setdate(&save_date);
printf("Back to original date:\n");
system("date");
return 0;
}
/* _dos_getdiskfree Beispiel */
#include <stdio.h>
#include <dos.h>
#include <process.h>
int main(void)
{
struct diskfree_t free;
long avail;
if (_dos_getdiskfree(0, &free) != 0) {
printf("Error in _dos_getdiskfree() call\n");
exit(1);
}
avail = (long) free.avail_clusters
* (long) free.bytes_per_sector
DDCHelp Hilfe zur Programmiersprache C Seite 451 von 606
* (long) free.sectors_per_cluster;
printf("The current drive has %ld bytes available\n", avail);
return 0;
}
/* getdfree Beispiel */
#include <stdio.h>
#include <dos.h>
#include <process.h>
int main(void)
{
struct diskfree_t free;
long avail;
if (_dos_getdiskfree(0, &free) != 0) {
printf("Error in _dos_getdiskfree() call\n");
exit(1);
}
avail = (long) free.avail_clusters
* (long) free.bytes_per_sector
* (long) free.sectors_per_cluster;
printf("The current drive has %ld bytes available\n", avail);
return 0;
}
/* _chdrive Beispiel */
#include <stdio.h>
#include <direct.h>
int main(void)
{
if (_chdrive(3) == 0)
printf("Successfully changed to drive C:\n");
else
printf("Cannot change to drive C:\n");
return 0;
}
/* _dos_getdrive Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
unsigned disk;
_dos_getdrive(&disk);
printf("The current drive is: %c\n", disk + 'A' - 1);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 452 von 606
/* _dos_setdrive Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
unsigned maxdrives;
_dos_setdrive(3,&maxdrives); /* set drive to C: */
printf("The number of logical drives is: %d\n", maxdrives);
return 0;
}
/* _getdrive Beispiel */
#include <stdio.h>
#include <direct.h>
int main(void)
{
int disk;
disk = _getdrive() + 'A' - 1;
printf("The current drive is: %c\n", disk);
return 0;
}
/* getdisk Beispiel */
#include <stdio.h>
#include <dir.h>
int main(void)
{
int disk, maxdrives = setdisk(2);
disk = getdisk() + 'A';
printf("\nThe number of logical drives is:%d\n", maxdrives);
printf("The current drive is: %c\n", disk);
return 0;
}
/* setdisk Beispiel */
#include <stdio.h>
#include <dir.h>
int main(void)
{
int save, disk, disks;
/* save original drive */
save = getdisk();
DDCHelp Hilfe zur Programmiersprache C Seite 453 von 606
/* print number of logic drives */
disks = setdisk(save);
printf("%d logical drives on the system\n\n", disks);
/* print the drive letters available */
printf("Available drives:\n");
for (disk = 0;disk < 26;++disk)
{
setdisk(disk);
if (disk == getdisk())
printf("%c: drive is available\n", disk + 'a');
}
setdisk(save);
return 0;
}
/* getdta Beispiel */
#include <dos.h>
#include <stdio.h>
int main(void)
{
char far *dta;
dta = getdta();
printf("The current disk transfer address is: %Fp\n", dta);
return 0;
}
/* setdta Beispiel */
#include <process.h>
#include <string.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
char line[80], far *save_dta;
char buffer[256] = "SETDTA test!";
struct fcb blk;
int result;
/* get new file name from user */
printf("Enter a file name to create:");
gets(line);
/* parse the new file name to the dta */
parsfnm(line, &blk, 1);
printf("%d %s\n", blk.fcb_drive, blk.fcb_name);
/* request DOS services to create file */
if (bdosptr(0x16, &blk, 0) == -1)
{
perror("Error creating file");
DDCHelp Hilfe zur Programmiersprache C Seite 454 von 606
exit(1);
}
/* save old dta and set new dta */
save_dta = getdta();
setdta(buffer);
/* write new records */
blk.fcb_recsize = 256;
blk.fcb_random = 0L;
result = randbwr(&blk, 1);
printf("result = %d\n", result);
if (!result)
printf("Write OK\n");
else
{
perror("Disk error");
exit(1);
}
/* request DOS services to close the file */
if (bdosptr(0x10, &blk, 0) == -1)
{
perror("Error closing file");
exit(1);
}
/* reset the old dta */
setdta(save_dta);
return 0;
}
/* getfat Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
struct fatinfo diskinfo;
int flag = 0;
printf("Please insert disk in drive A\n");
getchar();
getfat(1, &diskinfo);
/* get drive information */
printf("\nDrive A: is ");
switch((unsigned char) diskinfo.fi_fatid)
{
case 0xFD:
printf("360K low density\n");
break;
case 0xF9:
printf("1.2 Meg high density\n");
break;
DDCHelp Hilfe zur Programmiersprache C Seite 455 von 606
default:
printf("unformatted\n");
flag = 1;
}
if (!flag)
{
printf(" sectors per cluster %5d\n", diskinfo.fi_sclus);
printf(" number of clusters %5d\n", diskinfo.fi_nclus);
printf(" bytes per sector %5d\n", diskinfo.fi_bysec);
}
return 0;
}
/* getfatd Beispiel */
#include <stdio.h>
#include <dos.h>
int main()
{
struct fatinfo diskinfo;
/* get default drive information */
getfatd(&diskinfo);
printf("\nDefault Drive:\n");
printf("sectors per cluster: %5d\n",diskinfo.fi_sclus);
printf("FAT ID byte: %5X\n",diskinfo.fi_fatid & 0xFF);
printf("number of clusters %5d\n",diskinfo.fi_nclus);
printf("bytes per sector %5d\n",diskinfo.fi_bysec);
return 0;
}
/* getftime Beispiel */
#include <stdio.h>
#include <io.h>
int main(void)
{
FILE *stream;
struct ftime ft;
if ((stream = fopen("TEST.$$$",
"wt")) == NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
getftime(fileno(stream), &ft);
printf("File time: %u:%u:%u\n",
ft.ft_hour, ft.ft_min,
ft.ft_tsec * 2);
printf("File date: %u/%u/%u\n",
ft.ft_month, ft.ft_day,
ft.ft_year+1980);
DDCHelp Hilfe zur Programmiersprache C Seite 456 von 606
fclose(stream);
return 0;
}
/* setftime Beispiel */
#include <stdio.h>
#include <process.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
struct ftime filet;
FILE *fp;
if ((fp = fopen("TEST.$$$", "w")) == NULL)
{
perror("Error:");
exit(1);
}
fprintf(fp, "testing...\n");
/* load ftime structure with new time and date */
filet.ft_tsec = 1;
filet.ft_min = 1;
filet.ft_hour = 1;
filet.ft_day = 1;
filet.ft_month = 1;
filet.ft_year = 21;
/* show current directory for time and date */
system("dir TEST.$$$");
/* change the time and date stamp*/
setftime(fileno(fp), &filet);
/* close and remove the temporary file */
fclose(fp);
system("dir TEST.$$$");
unlink("TEST.$$$");
return 0;
}
/* _dos_getftime Beispiel */
#include <stdio.h>
#include <dos.h>
int main()
{
FILE *stream;
unsigned date, time;
if ((stream = fopen("TEST.$$$", "w")) == NULL)
DDCHelp Hilfe zur Programmiersprache C Seite 457 von 606
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
_dos_getftime(fileno(stream), &date, &time);
printf("File date: 0x%x\n",date);
printf("File time: 0x%x\n",time);
fclose(stream);
return 0;
}
/* _dos_setftime Beispiel */
#include <stdio.h>
#include <dos.h>
int main()
{
FILE *stream;
unsigned date, time;
if ((stream = fopen("TEST.$$$", "w")) == NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
_dos_getftime(fileno(stream), &date, &time);
printf("File year of TEST.$$$: %d\n",((date >> 9) & 0x7f) + 1980);
date = (date & 0x1ff) | (21 << 9);
_dos_setftime(fileno(stream), date, time);
printf("Set file year to 2001.\n");
fclose(stream);
return 0;
}
/* puts Beispiel */
#include <stdio.h>
int main(void)
{
char string[] = "This is an example output string\n";
puts(string);
return 0;
}
/* gets Beispiel */
#include <stdio.h>
int main(void)
{
char string[80];
printf("Input a string:");
DDCHelp Hilfe zur Programmiersprache C Seite 458 von 606
gets(string);
printf("The string input was: %s\n", string);
return 0;
}
/* puttext Beispiel */
#include <conio.h>
int main(void)
{
char buffer[512];
/* put some text to the console */
clrscr();
gotoxy(20, 12);
cprintf("This is a test. Press any key to continue ...");
getch();
/* grab screen contents */
gettext(20, 12, 36, 21,buffer);
clrscr();
/* put selected characters back to the screen */
gotoxy(20, 12);
puttext(20, 12, 36, 21, buffer);
getch();
return 0;
}
/* gettext Beispiel */
#include <conio.h>
char buffer[4096];
int main(void)
{
int i;
clrscr();
for (i = 0; i <= 20; i++)
cprintf("Line #%d\r\n", i);
gettext(1, 1, 80, 25, buffer);
gotoxy(1, 25);
cprintf("Press any key to clear screen...");
getch();
clrscr();
gotoxy(1, 25);
cprintf("Press any key to restore screen...");
getch();
puttext(1, 1, 80, 25, buffer);
gotoxy(1, 25);
cprintf("Press any key to quit...");
DDCHelp Hilfe zur Programmiersprache C Seite 459 von 606
getch();
return 0;
}
/* _dos_gettime Beispiel */
#include <dos.h>
int main(void)
{
struct dostime_t t;
_dos_gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n", t.hour, t.minute,
t.second, t.hsecond);
return 0;
}
/* _dos_settime Beispiel */
#include <dos.h>
#include <process.h>
#include <stdio.h>
int main(void)
{
struct dostime_t reset;
reset.hour = 17;
reset.minute = 0;
reset.second = 0;
reset.hsecond = 0;
printf("Setting time to 5 PM.\n");
_dos_settime(&reset);
system("time");
return 0;
}
/* gettime Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
struct time t;
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 460 von 606
/* settime Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
struct time t;
gettime(&t);
printf("The current minute is: %d\n", t.ti_min);
printf("The current hour is: %d\n", t.ti_hour);
printf("The current hundredth of a second is: %d\n", t.ti_hund);
printf("The current second is: %d\n", t.ti_sec);
/* Add one to the minutes struct element and then call settime */
t.ti_min++;
settime(&t);
return 0;
}
/* _dos_getvect and _dos_setvect Beispiel */
#include <stdio.h>
#include <dos.h>
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt get_out(__CPPARGS); /* interrupt prototype */
void interrupt (*oldfunc)(__CPPARGS); /* interrupt function pointer */
int looping = 1;
int main(void)
{
puts("Press <Shift><PrtSc> to terminate");
/* save the old interrupt */
oldfunc = _dos_getvect(5);
/* install interrupt handler */
_dos_setvect(5,get_out);
/* do nothing */
while (looping);
/* restore to original interrupt routine */
_dos_setvect(5,oldfunc);
puts("Success");
return 0;
}
void interrupt get_out(__CPPARGS) {
DDCHelp Hilfe zur Programmiersprache C Seite 461 von 606
looping = 0; /* change global var to get out of oop */
}
/* getvect and setvect Beispiel */
/* * * * * * * * * * * * * * *
NOTE: This is an interrupt service routine.
You can NOT compile this program with
Test Stack Overflow turned on and get an
executable file that will operate correctly.
* * * * * * * * * * * * * * */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt ( *oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS)
{
/* increase the global counter */
count++;
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
setvect(INTR, oldhandler);
return 0;
}
/* getw Beispiel */
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 462 von 606
#include <stdlib.h>
#define FNAME "test.$$$"
int main(void)
{
FILE *fp;
int word;
/* place the word in a file */
fp = fopen(FNAME, "wb");
if (fp == NULL)
{
printf("Error opening file %s\n", FNAME);
exit(1);
}
word = 94;
putw(word,fp);
if (ferror(fp))
printf("Error writing to file\n");
else
printf("Successful write\n");
fclose(fp);
/* reopen the file */
fp = fopen(FNAME, "rb");
if (fp == NULL)
{
printf("Error opening file %s\n", FNAME);
exit(1);
}
/* extract the word */
word = getw(fp);
if (ferror(fp))
printf("Error reading file\n");
else
printf("Successful read: word = %d\n", word);
/* clean up */
fclose(fp);
unlink(FNAME);
return 0;
}
/* putw Beispiel */
#include <stdio.h>
#include <stdlib.h>
#define FNAME "test.$$$"
int main(void)
{
FILE *fp;
int word;
DDCHelp Hilfe zur Programmiersprache C Seite 463 von 606
/* place the word in a file */
fp = fopen(FNAME, "wb");
if (fp == NULL)
{
printf("Error opening file %s\n", FNAME);
exit(1);
}
word = 94;
putw(word,fp);
if (ferror(fp))
printf("Error writing to file\n");
else
printf("Successful write\n");
fclose(fp);
/* reopen the file */
fp = fopen(FNAME, "rb");
if (fp == NULL)
{
printf("Error opening file %s\n", FNAME);
exit(1);
}
/* extract the word */
word = getw(fp);
if (ferror(fp))
printf("Error reading file\n");
else
printf("Successful read: word = %d\n", word);
/* clean up */
fclose(fp);
unlink(FNAME);
return 0;
}
/* gmtime Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
/* Pacific Standard Time & Daylight Savings */
char *tzstr = "TZ=PST8PDT";
int main(void)
{
time_t t;
struct tm *gmt, *area;
putenv(tzstr);
tzset();
t = time(NULL);
area = localtime(&t);
printf("Local time is: %s", asctime(area));
gmt = gmtime(&t);
DDCHelp Hilfe zur Programmiersprache C Seite 464 von 606
printf("GMT is: %s", asctime(gmt));
return 0;
}
/* localtime Beispiel */
#include <time.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
time_t timer;
struct tm *tblock;
/* gets time of day */
timer = time(NULL);
/* converts date/time to a structure */
tblock = localtime(&timer);
printf("Local time is: %s", asctime(tblock));
return 0;
}
/* heapcheck and _heapchk Beispiel */
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
if( heapcheck() == _HEAPCORRUPT )
printf( "Heap is corrupted.\n" );
else
printf( "Heap is OK.\n" );
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 465 von 606
/* heapcheckfree Beispiel */
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
char far *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char far *) farmalloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
farfree( array[ i ] );
if( farheapcheck() == _HEAPCORRUPT )
printf( "Heap is corrupted.\n" );
else
printf( "Heap is OK.\n" );
return 0;
}
/* heapchecknode Beispiel */
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
for( i = 0; i < NUM_PTRS; i++ )
{
printf( "Node %2d ", i );
switch( heapchecknode( array[ i ] ) )
{
case _HEAPEMPTY:
printf( "No heap.\n" );
break;
case _HEAPCORRUPT:
printf( "Heap corrupt.\n" );
break;
case _BADNODE:
printf( "Bad node.\n" );
break;
DDCHelp Hilfe zur Programmiersprache C Seite 466 von 606
case _FREEENTRY:
printf( "Free entry.\n" );
break;
case _USEDENTRY:
printf( "Used entry.\n" );
break;
default:
printf( "Unknown return code.\n" );
break;
}
}
return 0;
}
/* heapfillfree Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <mem.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
char *array[ NUM_PTRS ];
int i;
int res;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
if( heapfillfree( 1 ) < 0 )
{
printf( "Heap corrupted.\n" );
return 1;
}
for( i = 1; i < NUM_PTRS; i += 2 )
memset( array[ i ], 0, NUM_BYTES );
res = heapcheckfree( 1 );
if( res < 0 )
switch( res )
{
case _HEAPCORRUPT:
printf( "Heap corrupted.\n" );
return 1;
case _BADVALUE:
printf( "Bad value in free space.\n" );
return 1;
default:
printf( "Unknown error.\n" );
return 1;
}
DDCHelp Hilfe zur Programmiersprache C Seite 467 von 606
printf( "Test successful.\n" );
return 0;
}
/* heapwalk Beispiel*/
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main( void )
{
struct heapinfo hi;
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi.ptr = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
while( heapwalk( &hi ) == _HEAPOK )
printf( "%7u %s\n", hi.size, hi.in_use ? "used" : "free" );
return 0;
}
/* _rtl_heapwalk Beispiel*/
#include <stdio.h>
#include <malloc.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
#if defined(__FLAT__)
int main( void )
{
struct heapinfo hi;
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi.ptr = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
DDCHelp Hilfe zur Programmiersprache C Seite 468 von 606
while( _rtl_heapwalk( &hi ) == _HEAPOK )
printf( "%7u %s\n", hi.size, hi.in_use ? "used" : "free" );
return 0;
}
#endif
/* inp Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
int result;
int port = 0; /* serial port 0 */
result = inport(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}
/* inpw Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
unsigned result;
unsigned port = 0;
result = inpw(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}
/* outp Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
unsigned port = 0;
int value;
value = outp(port, 'C');
printf("Value %c sent to port number %d\n", value, port);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 469 von 606
/* outpw Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
unsigned value;
unsigned port = 0;
value = outpw(port, 64);
printf("Value %d sent to port number %d\n", value, port);
return 0;
}
/* inport Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
int result;
int port = 0;
result = inport(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}
/* inportb Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
unsigned char result;
int port = 0; /* serial port 1 */
result = inportb(port);
printf("Byte read from port %d = 0x%X\n", port, result);
return 0;
}
/* outport Beispiel */
#include <conio.h>
#include <stdio.h>
int main(void)
{
int port = 0;
int value = 'C';
outport(port, value);
printf("Value %d sent to port number %d\n", value, port);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 470 von 606
}
/* outportb Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
int port = 0;
char value = 'C';
outportb(port, value);
printf("Value %c sent to port number %d\n", value, port);
return 0;
}
/* int86 Beispiel */
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define VIDEO 0x10
void movetoxy(int x, int y)
{
union REGS regs;
regs.h.ah = 2; /* set cursor position */
regs.h.dh = y;
regs.h.dl = x;
regs.h.bh = 0; /* video page 0 */
int86(VIDEO, ®s, ®s);
}
int main(void)
{
clrscr();
movetoxy(35, 10);
printf("Hello\n");
return 0;
}
/* int86x Beispiel */
#include <dos.h>
#include <process.h>
#include <stdio.h>
int main(void)
{
char filename[80];
union REGS inregs, outregs;
struct SREGS segregs;
DDCHelp Hilfe zur Programmiersprache C Seite 471 von 606
printf("Enter filename: ");
gets(filename);
inregs.h.ah = 0x43;
inregs.h.al = 0x21;
inregs.x.dx = FP_OFF(filename);
segregs.ds = FP_SEG(filename);
int86x(0x21, &inregs, &outregs, &segregs);
printf("File attribute: %X\n", outregs.x.cx);
return 0;
}
/* intdos Beispiel */
#include <stdio.h>
#include <dos.h>
/* deletes file name; returns 0 on success, nonzero on failure */
int delete_file(char near *filename)
{
union REGS regs;
int ret;
regs.h.ah = 0x41;
/* delete file */
regs.x.dx = (unsigned) filename;
ret = intdos(®s, ®s);
/* if carry flag is set, there was an error */
return(regs.x.cflag ? ret : 0);
}
int main(void)
{
int err;
err = delete_file("NOTEXIST.$$$");
if (!err)
printf("Able to delete NOTEXIST.$$$\n");
else
printf("Not Able to delete NOTEXIST.$$$\n");
return 0;
}
/* intdosx Beispiel */
#include <stdio.h>
#include <dos.h>
/* deletes file name; returns 0 on success,
nonzero on failure */
int delete_file(char far *filename)
{
union REGS regs; struct SREGS sregs;
int ret;
regs.h.ah = 0x41; /* delete file */
regs.x.dx = FP_OFF(filename);
sregs.ds = FP_SEG(filename);
ret = intdosx(®s, ®s, &sregs);
DDCHelp Hilfe zur Programmiersprache C Seite 472 von 606
/* if carry flag is set, there was an error */
return(regs.x.cflag ? ret : 0);
}
int main(void)
{
int err;
err = delete_file("NOTEXIST.$$$");
if (!err)
printf("Able to delete NOTEXIST.$$$\n");
else
printf("Not Able to delete NOTEXIST.$$$\n");
return 0;
}
/* itoa Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int number = 12345;
char string[25];
itoa(number, string, 10);
printf("integer = %d string = %s\n", number, string);
return 0;
}
/* ltoa Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char string[25];
long value = 123456789L;
ltoa(value,string,10);
printf("number = %ld string = %s\n", value, string);
return 0;
}
/* ultoa Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
DDCHelp Hilfe zur Programmiersprache C Seite 473 von 606
unsigned long lnumber = 3123456789L;
char string[25];
ultoa(lnumber,string,10);
printf("string = %s unsigned long = %lu\n",string,lnumber);
return 0;
}
/* keep Beispiel */
/* * * * * * * * * * * * *
NOTE: This is an interrupt service routine. You can NOT compile this
program with Test Stack Overflow turned on and get an executable file
which will operate correctly.
Due to the nature of this function the formula used to compute the number
of paragraphs may not necessarily work in all cases. Use with care!
Terminate Stay Resident (TSR) programs are complex and no other support
for them is provided.
Refer to the MS-DOS technical documentation for more information.
* * * * * * * * * * * * */
#include <dos.h>
/* The clock tick interrupt */
#define INTR 0x1C
/* Screen attribute (blue on grey) */
#define ATTR 0x7900
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
/* reduce heaplength and stacklength to make a smaller program in memory
*/
extern unsigned _heaplen = 1024;
extern unsigned _stklen = 512;
void interrupt ( *oldhandler)(__CPPARGS);
typedef unsigned int (far *s_arrayptr);
void interrupt handler(__CPPARGS)
{
s_arrayptr screen[80];
static int count;
/* For a color screen the video memory is at B800:0000.
For a monochrome system use B000:000 */
screen[0] = (s_arrayptr) MK_FP(0xB800,0);
/* increase the counter and keep it within 0 to 9 */
count++;
count %= 10;
DDCHelp Hilfe zur Programmiersprache C Seite 474 von 606
/* put the number on the screen */
screen[0][79] = count + '0' + ATTR;
/* call the old interrupt handler */
oldhandler();
}
int main(void)
{
/* get the address of the current clock
tick interrupt */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR, handler);
/* * *
_psp is the starting address of the program in memory. The top of the
stack is the end of the program.
Using _SS and _SP together we can get the end of the stack. You may want
to allow a bit of safety space to insure that enough room is being
allocated ie:
(_SS + ((_SP + safety space)/16) - _psp)
* * */
keep(0, (_SS + (_SP/16) - _psp));
return 0;
}
/* localeconv Beispiel */
#include <locale.h>
#include <stdio.h>
int main(void)
{
struct lconv ll;
struct lconv *conv = ≪
/* read the locality conversion structure */
conv = localeconv();
/* display the structure */
printf("Decimal Point : %s\n", conv-> decimal_point);
printf("Thousands Separator : %s\n", conv-> thousands_sep);
printf("Grouping : %s\n", conv-> grouping);
printf("International Currency symbol : %s\n", conv-> int_curr_symbol);
printf("$ thousands separator : %s\n", conv->
mon_thousands_sep);
printf("$ grouping : %s\n", conv-> mon_grouping);
printf("Positive sign : %s\n", conv-> positive_sign);
printf("Negative sign : %s\n", conv-> negative_sign);
printf("International fraction digits : %d\n", conv-> int_frac_digits);
printf("Fraction digits : %d\n", conv-> frac_digits);
printf("Positive $ symbol precedes : %d\n", conv-> p_cs_precedes);
printf("Positive sign space separation: %d\n", conv-> p_sep_by_space);
printf("Negative $ symbol precedes : %d\n", conv-> n_cs_precedes);
DDCHelp Hilfe zur Programmiersprache C Seite 475 von 606
printf("Negative sign space separation: %d\n", conv-> n_sep_by_space);
printf("Positive sign position : %d\n", conv-> p_sign_posn);
printf("Negative sign position : %d\n", conv-> n_sign_posn);
return 0;
}
/* setlocale Beispiel */
#include <locale.h>
#include <stdio.h>
int main(void)
{
char *old_locale;
/* The only locale supported in most compilers is "C" */
old_locale = setlocale(LC_ALL,"C");
printf("Old locale was %s\n",old_locale);
return 0;
}
/* locking Beispiel */
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <sys\locking.h>
int main(void)
{
int handle, status;
long length;
/* must have DOS SHARE.EXE loaded for file locking to function */
handle = sopen("c:\\autoexec.bat", O_RDONLY,SH_DENYNO);
if (handle < 0) {
printf("sopen failed\n");
exit(1);
}
length = filelength(handle);
status = locking(handle,LK_LOCK,length/2);
if (status == 0)
printf("lock succeeded\n");
else
perror("lock failed");
status = locking(handle,LK_UNLCK,length/2);
if (status == 0)
printf("unlock succeeded\n");
else
perror("unlock failed");
close(handle);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 476 von 606
/* lock Beispiel */
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
int main(void)
{
int handle, status;
long length;
/* Must have DOS Share.exe loaded for */
/* file locking to function properly */
handle = sopen("c:\\autoexec.bat",
O_RDONLY,SH_DENYNO,S_IREAD);
if (handle < 0)
{
printf("sopen failed\n");
exit(1);
}
length = filelength(handle);
status = lock(handle,0L,length/2);
if (status == 0)
printf("lock succeeded\n");
else
printf("lock failed\n");
status = unlock(handle,0L,length/2);
if (status == 0)
printf("unlock succeeded\n");
else
printf("unlock failed\n");
close(handle);
return 0;
}
/* unlock Beispiel */
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
int main(void)
{
int handle, status;
DDCHelp Hilfe zur Programmiersprache C Seite 477 von 606
long length;
handle = sopen("c:\\autoexec.bat",O_RDONLY,SH_DENYNO,S_IREAD);
if (handle < 0)
{
printf("sopen failed\n");
exit(1);
}
length = filelength(handle);
status = lock(handle,0L,length/2);
if (status == 0)
printf("lock succeeded\n");
else
printf("lock failed\n");
status = unlock(handle,0L,length/2);
if (status == 0)
printf("unlock succeeded\n");
else
printf("unlock failed\n");
close(handle);
return 0;
}
/* log Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double result;
double x = 8.6872;
result = log(x);
printf("The natural log of %lf is %lf\n", x, result);
return 0;
}
/* log10 Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double result;
double x = 800.6872;
result = log10(x);
printf("The common log of %lf is %lf\n", x, result);
DDCHelp Hilfe zur Programmiersprache C Seite 478 von 606
return 0;
}
/* _lrotl and _lrotr Beispiel */
#include <stdlib.h>
#include <stdio.h>
/* function prototypes */
int lrotl_example(void);
int lrotr_example(void);
/* lrotl example */
int lrotl_example(void)
{
unsigned long result;
unsigned long value = 100;
result = _lrotl(value,1);
printf("The value %lu rotated left one bit is: %lu\n", value, result);
return 0;
}
/* lrotr example */
int lrotr_example(void)
{
unsigned long result;
unsigned long value = 100;
result = _lrotr(value,1);
printf("The value %lu rotated right one bit is: %lu\n", value,
result);
return 0;
}
int main(void)
{
lrotl_example();
lrotr_example();
return 0;
}
/* _rotl and _rotr Beispiel */
#include <stdlib.h>
#include <stdio.h>
/* rotl example */
int rotl_example(void)
{
DDCHelp Hilfe zur Programmiersprache C Seite 479 von 606
unsigned value, result;
value = 32767;
result = _rotl(value, 1);
printf("The value %u rotated left one bit is: %u\n", value, result);
return 0;
}
/* rotr example */
int rotr_example(void)
{
unsigned value, result;
value = 32767;
result = _rotr(value, 1);
printf("The value %u rotated right one bit is: %u\n", value, result);
return 0;
}
int main(void)
{
rotl_example();
rotr_example();
return 0;
}
/* _makepath Beispiel */
#include <dir.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char s[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char file[_MAX_FNAME];
char ext[_MAX_EXT];
getcwd(s,_MAX_PATH); /* get current working directory */
if (s[strlen(s)-1] != '\\')
strcat(s,"\\"); /* append a trailing \ character */
_splitpath(s,drive,dir,file,ext); /* split the string to separate
elems */
strcpy(file,"DATA");
strcpy(ext,".TXT");
_makepath(s,drive,dir,file,ext); /* merge everything into one string */
puts(s); /* display resulting string */
return 0;
}
/* _splitpath Beispiel */
#include <dir.h>
DDCHelp Hilfe zur Programmiersprache C Seite 480 von 606
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char s[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char file[_MAX_FNAME];
char ext[_MAX_EXT];
/* get current working directory */
getcwd(s,_MAX_PATH);
if (s[strlen(s)-1] != '\\')
/* append a trailing \ character */
strcat(s,"\\");
/* split the string to separate elems */
_splitpath(s,drive,dir,file,ext);
strcpy(file,"DATA");
strcpy(ext,".TXT");
/* merge everything into one string */
_makepath(s,drive,dir,file,ext);
/* display resulting string */
puts(s);
return 0;
}
/* fnsplit Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <dir.h>
int main(void)
{
char *s;
char drive[MAXDRIVE];
char dir[MAXDIR];
char file[MAXFILE];
char ext[MAXEXT];
int flags;
s=getenv("COMSPEC"); /* get the comspec environment parameter */
flags=fnsplit(s,drive,dir,file,ext);
printf("Command processor info:\n");
if(flags & DRIVE)
printf("\tdrive: %s\n",drive);
if(flags & DIRECTORY)
printf("\tdirectory: %s\n",dir);
if(flags & FILENAME)
printf("\tfile: %s\n",file);
if(flags & EXTENSION)
printf("\textension: %s\n",ext);
DDCHelp Hilfe zur Programmiersprache C Seite 481 von 606
return 0;
}
/* fnmerge Beispiel */
#include <string.h>
#include <stdio.h>
#include <dir.h>
int main(void)
{
char s[MAXPATH];
char drive[MAXDRIVE];
char dir[MAXDIR];
char file[MAXFILE];
char ext[MAXEXT];
getcwd(s,MAXPATH); /* get the current working directory
*/
strcat(s,"\\"); /* append on a trailing character */
fnsplit(s,drive,dir,file,ext); /* split the string to separate elems
*/
strcpy(file,"DATA");
strcpy(ext,".TXT");
fnmerge(s,drive,dir,file,ext); /* merge everything into one string
*/
puts(s); /* display resulting string */
return 0;
}
/* memmove Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *dest = "abcdefghijklmnopqrstuvwxyz0123456789";
char *src = "******************************";
printf("destination prior to memmove: %s\n", dest);
memmove(dest, src, 26);
printf("destination after memmove: %s\n", dest);
return 0;
}
/* memccpy Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *src = "This is the source string";
char dest[50];
DDCHelp Hilfe zur Programmiersprache C Seite 482 von 606
char *ptr;
ptr = (char *) memccpy(dest, src, 'c', strlen(src));
if (ptr)
{
*ptr = '\0';
printf("The character was found: %s\n", dest);
}
else
printf("The character wasn't found\n");
return 0;
}
/* memcpy Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char src[] = "******************************";
char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
char *ptr;
printf("destination before memcpy: %s\n", dest);
ptr = (char *) memcpy(dest, src, strlen(src));
if (ptr)
printf("destination after memcpy: %s\n", dest);
else
printf("memcpy failed\n");
return 0;
}
/* memcmp Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *buf1 = "aaa";
char *buf2 = "bbb";
char *buf3 = "ccc";
int stat;
stat = memcmp(buf2, buf1, strlen(buf2));
if (stat > 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
stat = memcmp(buf2, buf3, strlen(buf2));
if (stat > 0)
printf("buffer 2 is greater than buffer 3\n");
else
DDCHelp Hilfe zur Programmiersprache C Seite 483 von 606
printf("buffer 2 is less than buffer 3\n");
return 0;
}
/* memicmp Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *buf1 = "ABCDE123";
char *buf2 = "abcde456";
int stat;
stat = memicmp(buf1, buf2, 5);
printf("The strings to position 5 are ");
if (stat)
printf("not ");
printf("the same\n");
return 0;
}
/* _dos_open Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <dos.h>
int main(void)
{
int handle;
unsigned nbytes;
char msg[] = "Hello world\n";
if (_dos_open("TEST.$$$", O_RDWR, &handle) != 0) {
perror("Unable to open TEST.$$$");
return 1;
}
if (_dos_write(handle, msg, strlen(msg),&nbytes) != 0)
perror("Unable to write to TEST.$$$");
printf("%u bytes written to TEST.$$$\n",nbytes);
_dos_close(handle);
return 0;
}
/* _rtl_open Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
DDCHelp Hilfe zur Programmiersprache C Seite 484 von 606
int handle;
char msg[] = "Hello world";
if ((handle = _rtl_open("TEST.$$$", O_RDWR)) == -1)
{
perror("Error:");
return 1;
}
_rtl_write(handle, msg, strlen(msg));
_rtl_close(handle);
return 0;
}
/* sopen Beispiel */
/* Load share before running this example.
*/
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int handle,
handle1;
handle = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
if (handle == -1)
{
perror (sys_errlist[errno]);
exit (1);
}
if (!handle)
{
printf("sopen failed\n");
exit(1);
}
/* Attempt sopen for write.
*/
handle1 = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
if (handle1 == -1)
{
perror (sys_errlist[errno]);
exit (1);
}
if (!handle1)
{
printf("sopen failed\n");
exit(1);
}
DDCHelp Hilfe zur Programmiersprache C Seite 485 von 606
close (handle);
close (handle1);
return 0;
}
/* open Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "Hello world";
if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1)
{
perror("Error:");
return 1;
}
write(handle, msg, strlen(msg));
close(handle);
return 0;
}
/* cprintf Beispiel */
#include <conio.h>
int main(void)
{
/* clear the screen */
clrscr();
/* create a text window */
window(10, 10, 80, 25);
/* output some text in the window */
cprintf("Hello world\r\n");
/* wait for a key */
getch();
return 0;
}
/* fprintf Beispiel */
#include <stdio.h>
int main(void)
{
FILE *stream;
int i = 100;
DDCHelp Hilfe zur Programmiersprache C Seite 486 von 606
char c = 'C';
float f = 1.234;
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write some data to the file */
fprintf(stream, "%d %c %f", i, c, f);
/* close the file */
fclose(stream);
return 0;
}
/* printf Beispiel */
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
DDCHelp Hilfe zur Programmiersprache C Seite 487 von 606
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
/* sprintf Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
char buffer[80];
sprintf(buffer, "An approximation of Pi is %f\n", M_PI);
puts(buffer);
return 0;
}
/* vfprintf Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfpf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfprintf(fp, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
fp = tmpfile();
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
vfpf("%d %f %s", inumber, fnumber, string);
rewind(fp);
fscanf(fp,"%d %f %s", &inumber, &fnumber, string);
DDCHelp Hilfe zur Programmiersprache C Seite 488 von 606
printf("%d %f %s\n", inumber, fnumber, string);
fclose(fp);
return 0;
}
/* vprintf Beispiel */
#include <stdio.h>
#include <stdarg.h>
int vpf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vprintf(fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char *string = "abc";
vpf("%d %f %s\n",inumber,fnumber,string);
return 0;
}
/* vsprintf Beispiel */
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
char buffer[80];
int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 489 von 606
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
vspf("%d %f %s", inumber, fnumber, string);
printf("%s\n", buffer);
return 0;
}
/* _dos_read Beispiel */
#include <stdio.h>
#include <fcntl.h>
#include <dos.h>
int main(void)
{
int handle;
unsigned bytes;
char buf[10];
/* Looks for a file in the current directory named TEST.$$$ and
attempts to read 10 bytes from it. To use this example you
should create the file TEST.$$$ */
if (_dos_open("TEST.$$$", O_RDONLY, &handle) != 0) {
perror("Unable to open TEST.$$$");
return 1;
}
if (_dos_read(handle, buf, 10, &bytes) != 0) {
perror("Unable to read from TEST.$$$");
return 1;
}
else
printf("_dos_read: %d bytes read.\n", bytes);
return 0;
}
/* _rtl_read Beispiel */
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
DDCHelp Hilfe zur Programmiersprache C Seite 490 von 606
Looks for a file in the current directory named TEST.$$$ and attempts to
read 10 bytes from it. To use this example you should create the file
TEST.$$$
*/
if ((handle =
open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = _rtl_read(handle, buf, 10)) == -1) {
printf("Read Failed.\n");
exit(1);
}
else {
printf("_rtl_read: %d bytes read.\n", bytes);
}
return 0;
}
/* read Beispiel */
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
Looks for a file in the current directory named TEST.$$$ and attempts to
read 10 bytes from it. To use this example you should create the file
TEST.$$$.
*/
if ((handle =
open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = read(handle, buf, 10)) == -1) {
printf("Read Failed.\n");
exit(1);
}
else {
printf("Read: %d bytes read.\n", bytes);
}
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 491 von 606
/* farrealloc Beispiel */
#include <stdio.h>
#include <alloc.h>
int main(void)
{
char far *fptr;
char far *newptr;
fptr = (char far *) farmalloc(16);
printf("First address: %Fp\n", fptr);
/*
We use a second pointer, newptr, so that in the case of farrealloc()
returning NULL, our original pointer is not set to NULL.
*/
newptr = (char far *) farrealloc(fptr,64);
printf("New address : %Fp\n", newptr);
if (newptr != NULL)
farfree(newptr);
return 0;
}
/* realloc Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char *str;
/* allocate memory for string */
str = (char *) malloc(10);
/* copy "Hello" into string */
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = (char *) realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
/* free memory */
free(str);
return 0;
}
/* cscanf Beispiel */
#include <conio.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 492 von 606
{
char string[80];
/* clear the screen */
clrscr();
/* Prompt the user for input */
cprintf("Enter a string with no spaces:");
/* read the input */
cscanf("%s", string);
/* display what was read */
cprintf("\r\nThe string entered is: %s", string);
return 0;
}
/* fscanf Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
printf("Input an integer: ");
/* read an integer from the
standard input stream */
if (fscanf(stdin, "%d", &i))
printf("The integer read was: %i\n", i);
else
{
fprintf(stderr, "Error reading an integer from stdin.\n");
exit(1);
}
return 0;
}
/* scanf Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
char label[20];
char name[20];
int entries = 0;
int loop, age;
double salary;
struct Entry_struct
{
char name[20];
int age;
DDCHelp Hilfe zur Programmiersprache C Seite 493 von 606
float salary;
} entry[20];
/* Input a label as a string of characters restricting to 20 characters
*/
printf("\n\nPlease enter a label for the chart: ");
scanf("%20s", label);
fflush(stdin); /* flush the input stream in case of bad input */
/* Input number of entries as an integer */
printf("How many entries will there be? (less than 20) ");
scanf("%d", &entries);
fflush(stdin); /* flush the input stream in case of bad input */
/* input a name restricting input to only letters upper or lower case */
for (loop=0;loop<entries;++loop)
{
printf("Entry %d\n", loop);
printf(" Name : ");
scanf("%[A-Za-z]", entry[loop].name);
fflush(stdin); /* flush the input stream in case of bad input */
/* input an age as an integer */
printf(" Age : ");
scanf("%d", &entry[loop].age);
fflush(stdin); /* flush the input stream in case of bad input */
/* input a salary as a float */
printf(" Salary : ");
scanf("%f", &entry[loop].salary);
fflush(stdin); /* flush the input stream in case of bad input */
}
/* Input a name, age and salary as a string, integer, and double */
printf("\nPlease enter your name, age and salary\n");
scanf("%20s %d %lf", name, &age, &salary);
/* Print out the data that was input */
printf("\n\nTable %s\n",label);
printf("Compiled by %s age %d $%15.2lf\n", name, age, salary);
printf("-----------------------------------------------------\n");
for (loop=0;loop<entries;++loop)
printf("%4d | %-20s | %5d | %15.2lf\n",
loop + 1,
entry[loop].name,
entry[loop].age,
entry[loop].salary);
printf("-----------------------------------------------------\n");
return 0;
}
/* sscanf Beispiel */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
char *names[4] = {"Peter", "Mike", "Shea", "Jerry"};
DDCHelp Hilfe zur Programmiersprache C Seite 494 von 606
#define NUMITEMS 4
int main(void)
{
int loop;
char temp[4][80];
char name[20];
int age;
long salary;
/* clear the screen */
clrscr();
/* create name, age and salary data */
for (loop=0; loop < NUMITEMS; ++loop)
sprintf(temp[loop], "%s %d %ld", names[loop], random(10) + 20,
random(5000) + 27500L);
/* print title bar */
printf("%4s | %-20s | %5s | %15s\n", "#", "Name", "Age", "Salary");
printf(" --------------------------------------------------\n");
/* input a name, age and salary data */
for (loop=0; loop < NUMITEMS; ++loop)
{
sscanf(temp[loop],"%s %d %ld", &name, &age, &salary);
printf("%4d | %-20s | %5d | %15ld\n", loop + 1, name, age, salary);
}
return 0;
}
/* vfscanf Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfsf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfscanf(fp, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
fp = tmpfile();
DDCHelp Hilfe zur Programmiersprache C Seite 495 von 606
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
fprintf(fp,"%d %f %s\n",inumber,fnumber,string);
rewind(fp);
vfsf("%d %f %s",&inumber,&fnumber,string);
printf("%d %f %s\n",inumber,fnumber,string);
fclose(fp);
return 0;
}
/* vscanf Beispiel */
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
int vscnf(char *fmt, ...)
{
va_list argptr;
int cnt;
printf("Enter an integer, a float, and a string (e.g. i,f,s,)\n");
va_start(argptr, fmt);
cnt = vscanf(fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber;
float fnumber;
char string[80];
vscnf("%d, %f, %s", &inumber, &fnumber, string);
printf("%d %f %s\n", inumber, fnumber, string);
return 0;
}
/* vsscanf Beispiel */
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
char buffer[80] = "30 90.0 abc";
int vssf(char *fmt, ...)
{
va_list argptr;
DDCHelp Hilfe zur Programmiersprache C Seite 496 von 606
int cnt;
fflush(stdin);
va_start(argptr, fmt);
cnt = vsscanf(buffer, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber;
float fnumber;
char string[80];
vssf("%d %f %s", &inumber, &fnumber, string);
printf("%d %f %s\n", inumber, fnumber, string);
return 0;
}
/* setbuf Beispiel */
#include <stdio.h>
/* BUFSIZ is defined in stdio.h */
char outbuf[BUFSIZ];
int main(void)
{
/* attach a buffer to the standard output stream */
setbuf(stdout, outbuf);
/* put some characters into the buffer */
puts("This is a test of buffered output.\n\n");
puts("This output will go into outbuf\n");
puts("and won't appear until the buffer\n");
puts("fills up or we flush the stream.\n");
/* flush the output buffer */
fflush(stdout);
return 0;
}
/* setvbuf Beispiel */
#include <stdio.h>
int main(void)
{
FILE *input, *output;
char bufr[512];
input = fopen("file.in", "r+b");
output = fopen("file.out", "w");
DDCHelp Hilfe zur Programmiersprache C Seite 497 von 606
/* set up input stream for minimal disk access,
using our own character buffer */
if (setvbuf(input, bufr, _IOFBF, 512) != 0)
printf("failed to set up buffer for input file\n");
else
printf("buffer set up for input file\n");
/* set up output stream for line buffering using space that
will be obtained through an indirect call to malloc */
if (setvbuf(output, NULL, _IOLBF, 132) != 0)
printf("failed to set up buffer for output file\n");
else
printf("buffer set up for output file\n");
/* perform file I/O here */
/* close files */
fclose(input);
fclose(output);
return 0;
}
/* spawnl Beispiel */
#include <process.h>
#include <stdio.h>
#include <conio.h>
void spawnl_example(void)
{
int result;
clrscr();
result = spawnl(P_WAIT, "bcc.exe", "bcc.exe", NULL);
if (result == -1)
{
perror("Error from spawnl");
exit(1);
}
}
int main(void)
{
spawnl_example();
return 0;
}
/* spawnle Beispiel */
#include <process.h>
#include <stdio.h>
#include <conio.h>
void spawnle_example(void)
DDCHelp Hilfe zur Programmiersprache C Seite 498 von 606
{
int result;
clrscr();
result = spawnle(P_WAIT, "bcc.exe", "bcc.exe", NULL, NULL);
if (result == -1)
{
perror("Error from spawnle");
exit(1);
}
}
int main(void)
{
spawnle_example();
return 0;
}
/* spawnlp Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
void main(int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i<argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
spawnlp(P_WAIT, "C:\\DEVC\\BIN\\BCC.EXE", "C:\\DEVC\\BIN\\BCC.EXE",
argv[1], argv[2], NULL);
perror("exec error");
exit(1);
}
/* spawnlpe Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main( int argc, char *argv[], char **envp )
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
DDCHelp Hilfe zur Programmiersprache C Seite 499 von 606
spawnlpe(P_WAIT, "C:\\DEVC\\BIN\\BCC.EXE", "C:\\DEVC\\BIN\\BCC.EXE",
argv[1], argv[2], NULL, envp);
perror("exec error");
exit(1);
return 0;
}
/* spawnv Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
void main(int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i<argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
spawnv(P_WAIT, "C:\\DEVC\\BIN\\BCC.EXE", argv);
perror("exec error");
exit(1);
}
/* spawnve Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
void main(int argc, char *argv[], char **envp)
{
int i;
printf("Command line arguments:\n");
for (i=0; i<argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
spawnve(P_WAIT, "C:\\DEVC\\BIN\\TDMEM.EXE", argv, envp);
perror("exec error");
exit(1);
}
/* spawnvp Beispiel */
#include <process.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 500 von 606
#include <errno.h>
void main(int argc, char *argv[])
{
int i;
printf("Command line arguments:\n");
for (i=0; i<argc; ++i)
printf("[%2d] : %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
spawnvp(P_WAIT, "C:\\DEVC\\BIN\\BCC.EXE", argv);
perror("exec error");
exit(1);
}
/* spawnvpe Beispiel */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main( int argc, char *argv[], char **envp )
{
int i;
printf("Command line arguments:\n");
for (i=0; i < argc; ++i)
printf("[%2d] %s\n", i, argv[i]);
printf("About to exec child with arg1 arg2 ...\n");
spawnvpe(P_WAIT, "C:\\DEVC\\BIN\\BCC.EXE", argv, envp);
perror("exec error");
exit(1);
return 0;
}
/* strcmp Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
else
DDCHelp Hilfe zur Programmiersprache C Seite 501 von 606
printf("buffer 2 is less than buffer 1\n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
return 0;
}
/* strcmpi Beispiel */
/* strncmpi example */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";
int ptr;
ptr = strcmpi(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
if (ptr < 0)
printf("buffer 2 is less than buffer 1\n");
if (ptr == 0)
printf("buffer 2 equals buffer 1\n");
return 0;
}
/* stricmp Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";
int ptr;
ptr = stricmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
if (ptr < 0)
printf("buffer 2 is less than buffer 1\n");
if (ptr == 0)
printf("buffer 2 equals buffer 1\n");
DDCHelp Hilfe zur Programmiersprache C Seite 502 von 606
return 0;
}
/* strspn Beispiel */
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *string1 = "1234567890";
char *string2 = "123DC8";
int length;
length = strspn(string1, string2);
printf("Character where strings differ is at position %d\n", length);
return 0;
}
/* strcspn Beispiel */
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *string1 = "1234567890";
char *string2 = "747DC8";
int length;
length = strcspn(string1, string2);
printf("Character where strings intersect is at position %d\n",
length);
return 0;
}
/* _strerror Beispiel */
#include <stdio.h>
#include <errno.h>
int main(void)
{
char *buffer;
buffer = strerror(errno);
printf("Error: %s\n", buffer);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 503 von 606
/* strerror Beispiel */
#include <stdio.h>
#include <errno.h>
int main(void)
{
char *buffer;
buffer = strerror(errno);
printf("Error: %s\n", buffer);
return 0;
}
/* strlwr Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "FH Heilbronn";
printf("string prior to strlwr: %s\n", string);
strlwr(string);
printf("string after strlwr: %s\n", string);
return 0;
}
/* strupr Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;
/* converts string to upper case characters */
ptr = strupr(string);
printf("%s\n", ptr);
return 0;
}
/* strncmp Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";
int ptr;
DDCHelp Hilfe zur Programmiersprache C Seite 504 von 606
ptr = strncmp(buf2,buf1,3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
ptr = strncmp(buf2,buf3,3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
return(0);
}
/* strncmpi Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBBccc", *buf2 = "bbbccc";
int ptr;
ptr = strncmpi(buf2,buf1,3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
if (ptr < 0)
printf("buffer 2 is less than buffer 1\n");
if (ptr == 0)
printf("buffer 2 equals buffer 1\n");
return 0;
}
/* strnicmp Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "BBBccc", *buf2 = "bbbccc";
int ptr;
ptr = strnicmp(buf2, buf1, 3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
if (ptr < 0)
printf("buffer 2 is less than buffer 1\n");
DDCHelp Hilfe zur Programmiersprache C Seite 505 von 606
if (ptr == 0)
printf("buffer 2 equals buffer 1\n");
return 0;
}
/* strtod Beispiel */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char input[80], *endptr;
double value;
printf("Enter a floating point number:");
gets(input);
value = strtod(input, &endptr);
printf("The string is %s the number is %lf\n", input, value);
return 0;
}
/* strtol Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "87654321", *endptr;
long lnumber;
/* strtol converts string to long integer */
lnumber = strtol(string, &endptr, 10);
printf("string = %s long = %ld\n", string, lnumber);
return 0;
}
/* strtoul Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "87654321", *endptr;
unsigned long lnumber;
lnumber = strtoul(string, &endptr, 10);
printf("string = %s long = %lu\n",
string, lnumber);
DDCHelp Hilfe zur Programmiersprache C Seite 506 von 606
return 0;
}
/* textattr Beispiel */
#include <conio.h>
int main(void)
{
int i;
clrscr();
for (i=0; i<9; i++)
{
textattr(i + ((i+1) << 4));
cprintf("This is a test\r\n");
}
return 0;
}
/* textbackground and textcolor Beispiel */
#include <conio.h>
int main(void)
{
int i, j;
clrscr();
for (i=0; i<9; i++)
{
for (j=0; j<80; j++)
cprintf("C");
cprintf("\r\n");
textcolor(i+1);
textbackground(i);
}
return 0;
}
/* time Beispiel */
#include <time.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
time_t t;
t = time(NULL);
printf("The number of seconds since January 1, 1970 is %ld",t);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 507 von 606
}
/* stime Beispiel */
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t t;
t = time(NULL);
printf("Current date is %s", ctime(&t));
t -= 24L*60L*60L; /* Back up to same time previous day */
stime(&t);
printf("\nNew date is %s", ctime(&t));
return 0;
}
/* tolower Beispiel */
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i;
char *string = "THIS IS A STRING";
length = strlen(string);
for (i=0; i<length; i++)
{
string[i] = tolower(string[i]);
}
printf("%s\n",string);
return 0;
}
/* _tolower Beispiel */
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i;
DDCHelp Hilfe zur Programmiersprache C Seite 508 von 606
char *string = "THIS IS A STRING.";
length = strlen(string);
for (i = 0; i < length; i++) {
if ((string[i] >= 'A') && (string[i] <= 'Z')){
string[i] = _tolower(string[i]);
}
}
printf("%s\n",string);
return 0;
}
/* toupper Beispiel */
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i;
char *string = "this is a string";
length = strlen(string);
for (i=0; i<length; i++)
{
string[i] = toupper(string[i]);
}
printf("%s\n",string);
return 0;
}
/* _toupper Beispiel */
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i;
char *string = "this is a string.";
length = strlen(string);
for (i = 0; i < length; i++) {
if ((string[i] >= 'a') && (string[i] <= 'z')){
string[i] = _toupper(string[i]);
}
}
printf("%s\n",string);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 509 von 606
/* _dos_write Beispiel */
#include <dos.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
unsigned count;
int handle;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
if (_dos_creat("DUMMY.FIL", _A_NORMAL, &handle) != 0)
{
perror("Unable to create DUMMY.FIL");
return 1;
}
if (_dos_write(handle, buf, strlen(buf), &count) != 0)
{
perror("Unable to write to DUMMY.FIL");
return 1;
}
/* close the file */
_dos_close(handle);
return 0;
}
/* _rtl_write Beispiel */
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(200);
/*
Create a file name TEST.$$$ in the current directory and writes 200 bytes
to it. If TEST.$$$ already exists, it's overwritten.
*/
if ((handle = open("TEST.$$$", O_CREAT | O_WRONLY | O_BINARY,
S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
DDCHelp Hilfe zur Programmiersprache C Seite 510 von 606
if ((bytes = _rtl_write(handle, buf, 200)) == -1) {
printf("Write Failed.\n");
exit(1);
}
printf("_rtl_write: %d bytes written.\n",bytes);
return 0;
}
/* write Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <io.h>
#include <string.h>
int main(void)
{
int handle;
char string[40];
int length, res;
/*
Create a file named "TEST.$$$" in the current directory and write a
string to it. If "TEST.$$$" already exists, it will be overwritten.
*/
if ((handle = open("TEST.$$$", O_WRONLY | O_CREAT | O_TRUNC,
S_IREAD | S_IWRITE)) == -1)
{
printf("Error opening file.\n");
exit(1);
}
strcpy(string, "Hello, world!\n");
length = strlen(string);
if ((res = write(handle, string, length)) != length)
{
printf("Error writing to the file.\n");
exit(1);
}
printf("Wrote %d bytes to the file.\n", res);
close(handle);
return 0;
}
/* getcurdir Beispiel */
#include <dir.h>
#include <stdio.h>
#include <string.h>
char *current_directory(char *path)
DDCHelp Hilfe zur Programmiersprache C Seite 511 von 606
{
strcpy(path, "X:\\"); /* fill string with form of response: X:\ */
path[0] = 'A' + getdisk(); /* replace X with current drive letter */
getcurdir(0, path+3); /* fill rest of string with current directory */
return(path);
}
int main(void)
{
char curdir[MAXPATH];
current_directory(curdir);
printf("The current directory is %s\n", curdir);
return 0;
}
/* getenv Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
int main(void)
{
char *path, *ptr;
int i = 0;
/* get the current path environment */
ptr = getenv("PATH");
/* set up new path */
path = (char *) malloc(strlen(ptr)+15);
strcpy(path,"PATH=");
strcat(path,ptr);
strcat(path,";c:\\temp");
/* replace the current path and display current environment */
putenv(path);
while (_environ[i])
printf("%s\n",_environ[i++]);
return 0;
}
/* putenv Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
DDCHelp Hilfe zur Programmiersprache C Seite 512 von 606
int main(void)
{
char *path, *ptr;
int i = 0;
/* get the current path environment */
ptr = getenv("PATH");
/* set up new path */
path = (char *) malloc(strlen(ptr)+15);
strcpy(path,"PATH=");
strcat(path,ptr);
strcat(path,";c:\\temp");
/* replace the current path and display current environment */
putenv(path);
while (_environ[i])
printf("%s\n",_environ[i++]);
return 0;
}
/* getpass Beispiel */
#include <conio.h>
int main(void)
{
char *password;
password = getpass("Input a password:");
cprintf("The password is: %s\r\n", password);
return 0;
}
/* getpid Beispiel */
#include <stdio.h>
#include <process.h>
int main()
{
printf("This program's process identification number (PID) "
"number is %X\n", getpid());
printf("Note: under DOS it is the PSP segment\n");
return 0;
}
/* gettextinfo Beispiel */
#include <conio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 513 von 606
int main(void)
{
struct text_info ti;
gettextinfo(&ti);
cprintf("window left %2d\r\n",ti.winleft);
cprintf("window top %2d\r\n",ti.wintop);
cprintf("window right %2d\r\n",ti.winright);
cprintf("window bottom %2d\r\n",ti.winbottom);
cprintf("attribute %2d\r\n",ti.attribute);
cprintf("normal attribute %2d\r\n",ti.normattr);
cprintf("current mode %2d\r\n",ti.currmode);
cprintf("screen height %2d\r\n",ti.screenheight);
cprintf("screen width %2d\r\n",ti.screenwidth);
cprintf("current x %2d\r\n",ti.curx);
cprintf("current y %2d\r\n",ti.cury);
return 0;
}
/* getverify Beispiel */
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
int verify_flag;
printf("Enter 0 to set verify flag off\n");
printf("Enter 1 to set verify flag on\n");
verify_flag = getch() - 0;
setverify(verify_flag);
if (getverify())
printf("DOS verify flag is on\n");
else
printf("DOS verify flag is off\n");
return 0;
}
/* setverify Beispiel */
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
int verify_flag;
printf("Enter 0 to set verify flag off\n");
DDCHelp Hilfe zur Programmiersprache C Seite 514 von 606
printf("Enter 1 to set verify flag on\n");
verify_flag = getch() - 0;
setverify(verify_flag);
if (getverify())
printf("DOS verify flag is on\n");
else
printf("DOS verify flag is off\n");
return 0;
}
/* gotoxy Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
gotoxy(35, 12);
cprintf("Hello world");
getch();
return 0;
}
/* harderr Beispiel */
/*
This program will trap disk errors and
prompt the user for action. Try running it
with no disk in drive A: to invoke its
functions.
*/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define IGNORE 0
#define RETRY 1
#define ABORT 2
int buf[500];
/*
define the error messages for trapping disk problems
*/
static char *err_msg[] = {
"write protect",
"unknown unit",
"drive not ready",
"unknown command",
"data error (CRC)",
"bad request",
DDCHelp Hilfe zur Programmiersprache C Seite 515 von 606
"seek error",
"unknown media type",
"sector not found",
"printer out of paper",
"write fault",
"read fault",
"general failure",
"reserved",
"reserved",
"invalid disk change"
};
error_win(char *msg)
{
int retval;
cputs(msg);
/*
prompt for user to press a key to abort, retry, ignore
*/
while(1)
{
retval= getch();
if (retval == 'a' || retval == 'A')
{
retval = ABORT;
break;
}
if (retval == 'r' || retval == 'R')
{
retval = RETRY;
break;
}
if (retval == 'i' || retval == 'I')
{
retval = IGNORE;
break;
}
}
return(retval);
}
/*
pragma warn -par reduces warnings which occur
due to the non use of the parameters
not_used1 and not_used2 to the handler.
*/
#pragma warn -par
void handler(unsigned int ax, unsigned int not_used1, unsigned int
*not_used2)
{
static char msg[80];
unsigned di;
int drive;
int errorno;
di= _DI;
/*
if this is not a disk error then it was
another device having trouble
*/
DDCHelp Hilfe zur Programmiersprache C Seite 516 von 606
if (ax < 0)
{
/* report the error */
error_win("Device error");
/* and return to the program directly requesting abort */
_hardretn(ABORT);
}
/* otherwise it was a disk error */
drive = ax & 0x00FF;
errorno = di & 0x00FF;
/* report which error it was */
sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",
err_msg[errorno], 'A' + drive);
/*
return to the program via dos interrupt 0x23 with abort, retry,
or ignore as input by the user.
*/
_hardresume(error_win(msg));
// return ABORT;
}
#pragma warn +par
int main(void)
{
/*
install our handler on the hardware problem interrupt
*/
_harderr(handler);
clrscr();
printf("Make sure there is no disk in drive A:\n");
printf("Press any key ....\n");
getch();
printf("Trying to access drive A:\n");
printf("fopen returned %p\n",fopen("A:temp.dat", "w"));
return 0;
}
/* hardresume Beispiel */
/*
This program will trap disk errors and
prompt the user for action. Try running it
with no disk in drive A: to invoke its
functions.
*/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define IGNORE 0
#define RETRY 1
#define ABORT 2
int buf[500];
/*
define the error messages for trapping disk problems
*/
static char *err_msg[] = {
DDCHelp Hilfe zur Programmiersprache C Seite 517 von 606
"write protect",
"unknown unit",
"drive not ready",
"unknown command",
"data error (CRC)",
"bad request",
"seek error",
"unknown media type",
"sector not found",
"printer out of paper",
"write fault",
"read fault",
"general failure",
"reserved",
"reserved",
"invalid disk change"
};
error_win(char *msg)
{
int retval;
cputs(msg);
/*
prompt for user to press a key to abort, retry, ignore
*/
while(1)
{
retval= getch();
if (retval == 'a' || retval == 'A')
{
retval = ABORT;
break;
}
if (retval == 'r' || retval == 'R')
{
retval = RETRY;
break;
}
if (retval == 'i' || retval == 'I')
{
retval = IGNORE;
break;
}
}
return(retval);
}
/*
pragma warn -par reduces warnings which occur
due to the non use of the parameters
not_used1 and not_used2 to the handler.
*/
#pragma warn -par
void handler(unsigned int ax, unsigned int not_used1, unsigned int
*not_used2)
{
static char msg[80];
unsigned di;
int drive;
DDCHelp Hilfe zur Programmiersprache C Seite 518 von 606
int errorno;
di= _DI;
/*
if this is not a disk error then it was
another device having trouble
*/
if (ax < 0)
{
/* report the error */
error_win("Device error");
/* and return to the program directly requesting abort */
_hardretn(ABORT);
}
/* otherwise it was a disk error */
drive = ax & 0x00FF;
errorno = di & 0x00FF;
/* report which error it was */
sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ",
err_msg[errorno], 'A' + drive);
/*
return to the program via dos interrupt 0x23 with abort, retry,
or ignore as input by the user.
*/
_hardresume(error_win(msg));
// return ABORT;
}
#pragma warn +par
int main(void)
{
/*
install our handler on the hardware problem interrupt
*/
_harderr(handler);
clrscr();
printf("Make sure there is no disk in drive A:\n");
printf("Press any key ....\n");
getch();
printf("Trying to access drive A:\n");
printf("fopen returned %p\n",fopen("A:temp.dat", "w"));
return 0;
}
/* highvideo Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
lowvideo();
cprintf("Low Intensity text\r\n");
highvideo();
gotoxy(1,2);
cprintf("High Intensity Text\r\n");
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 519 von 606
}
/* lowvideo Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
highvideo();
cprintf("High Intensity Text\r\n");
lowvideo();
gotoxy(1,2);
cprintf("Low Intensity Text\r\n");
return 0;
}
/* normvideo Beispiel */
#include <conio.h>
int main(void)
{
normvideo();
cprintf("NORMAL Intensity Text\r\n");
return 0;
}
/* hypot Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 3.0;
double y = 4.0;
result = hypot(x, y);
printf("The hypotenuse is: %lf\n", result);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 520 von 606
/* imag Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = " << z << "\n";
cout << " has real part = " << real(z) << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << "\n";
return 0;
}
/* insline Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
cprintf("INSLINE inserts an empty line in the text window\r\n");
cprintf("at the cursor position using the current text\r\n");
cprintf("background color. All lines below the empty one\r\n");
cprintf("move down one line and the bottom line scrolls\r\n");
cprintf("off the bottom of the window.\r\n");
cprintf("\r\nPress any key to continue:");
gotoxy(1, 3);
getch();
insline();
getch();
return 0;
}
/* intr Beispiel */
#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>
#define CF 1 /* Carry flag */
int main(void)
{
char directory[80];
struct REGPACK reg;
printf("Enter directory to change to: ");
gets(directory);
reg.r_ax = 0x3B << 8; /* shift 3Bh into AH */
reg.r_dx = FP_OFF(directory);
reg.r_ds = FP_SEG(directory);
intr(0x21, ®);
DDCHelp Hilfe zur Programmiersprache C Seite 521 von 606
if (reg.r_flags & CF)
printf("Directory change failed\n");
getcwd(directory, 80);
printf("The current directory is: %s\n", directory);
return 0;
}
/* ioctl Beispiel */
#include <stdio.h>
#include <dir.h>
#include <io.h>
int main(void)
{
int stat;
/* use func 8 to determine if the default drive is removable */
stat = ioctl(0, 8, 0, 0);
if (!stat)
printf("Drive %c is removable.\n", getdisk() + 'A');
else
printf("Drive %c is not removable.\n", getdisk() + 'A');
return 0;
}
/* isatty Beispiel */
#include <stdio.h>
#include <io.h>
int main(void)
{
int handle;
handle = fileno(stdprn);
if (isatty(handle))
printf("Handle %d is a device type\n", handle);
else
printf("Handle %d isn't a device type\n", handle);
return 0;
}
/* kbhit Beispiel */
#include <conio.h>
int main(void)
{
cprintf("Press any key to continue:");
while (!kbhit()) /* do nothing */ ;
cprintf("\r\nA key was pressed...\r\n");
DDCHelp Hilfe zur Programmiersprache C Seite 522 von 606
return 0;
}
/* ldexp Beispiel */
#include <stdio.h>
#include <math.h>
int main(void)
{
double value;
double x = 2;
/* ldexp raises 2 by a power of 3
then multiplies the result by 2 */
value = ldexp(x,3);
printf("The ldexp value is: %lf\n", value);
return 0;
}
/* setjmp Beispiel */
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
void subroutine(jmp_buf);
int main(void)
{
int value;
jmp_buf jumper;
value = setjmp(jumper);
if (value != 0)
{
printf("Longjmp with value %d\n", value);
exit(value);
}
printf("About to call subroutine ... \n");
subroutine(jumper);
return 0;
}
void subroutine(jmp_buf jumper)
{
longjmp(jumper,1);
}
DDCHelp Hilfe zur Programmiersprache C Seite 523 von 606
/* longjmp Beispiel */
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
void subroutine(jmp_buf);
int main(void)
{
int value;
jmp_buf jumper;
value = setjmp(jumper);
if (value != 0)
{
printf("Longjmp with value %d\n", value);
exit(value);
}
printf("About to call subroutine ... \n");
subroutine(jumper);
return 0;
}
void subroutine(jmp_buf jumper)
{
longjmp(jumper,1);
}
/* lseek Beispiel */
#include <sys\stat.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "This is a test";
char ch;
/* create a file */
handle = open("TEST.$$$", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
/* write some data to the file */
write(handle, msg, strlen(msg));
/* seek to the begining of the file */
lseek(handle, 0L, SEEK_SET);
/* reads chars from the file until we hit EOF */
do
{
read(handle, &ch, 1);
DDCHelp Hilfe zur Programmiersprache C Seite 524 von 606
printf("%c", ch);
} while (!eof(handle));
close(handle);
return 0;
}
/* malloc Beispiel */
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
int main(void)
{
char *str;
/* allocate memory for string */
if ((str = (char *) malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}
/* copy "Hello" into string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
/* _matherr Beispiel */
#include <math.h>
#include <string.h>
#include <stdio.h>
int matherr (struct exception *a)
{
if (a->type == DOMAIN)
if (!strcmp(a->name,"sqrt")) {
a->retval = sqrt (-(a->arg1));
return 1;
}
return 0;
}
int main(void)
{
double x = -2.0, y;
DDCHelp Hilfe zur Programmiersprache C Seite 525 von 606
y = sqrt(x);
printf("Matherr corrected value: %lf\n",y);
return 0;
}
/* max and min Beispiel */
#include <stdlib.h>
#include <stdio.h>
#ifdef __cplusplus
int max (int value1, int value2);
int max(int value1, int value2)
{
return ( (value1 > value2) ? value1 : value2);
}
#endif
int main(void)
{
int x = 5;
int y = 6;
int z;
z = max(x, y);
printf("The larger number is %d\n", z);
return 0;
}
/* memchr Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char str[17];
char *ptr;
strcpy(str, "This is a string");
ptr = (char *) memchr(str, 'r', strlen(str));
if (ptr)
printf("The character 'r' is at position: %d\n", ptr - str);
else
printf("The character was not found\n");
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 526 von 606
/* memset Beispiel */
#include <string.h>
#include <stdio.h>
#include <mem.h>
int main(void)
{
char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) - 1);
printf("Buffer after memset: %s\n", buffer);
return 0;
}
/* mkdir Beispiel */
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dir.h>
#define DIRNAME "testdir.$$$"
int main(void)
{
int stat;
stat = mkdir(DIRNAME);
if (!stat)
printf("Directory created\n");
else
{
printf("Unable to create directory\n");
exit(1);
}
getch();
system("dir/p");
getch();
stat = rmdir(DIRNAME);
if (!stat)
printf("\nDirectory deleted\n");
else
{
perror("\nUnable to delete directory\n");
exit(1);
}
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 527 von 606
/* rmdir Beispiel */
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dir.h>
#define DIRNAME "testdir.$$$"
int main(void)
{
int stat;
stat = mkdir(DIRNAME);
if (!stat)
printf("Directory created\n");
else
{
printf("Unable to create directory\n");
exit(1);
}
getch();
system("dir/p");
getch();
stat = rmdir(DIRNAME);
if (!stat)
printf("\nDirectory deleted\n");
else
{
perror("\nUnable to delete directory\n");
exit(1);
}
return 0;
}
/* mktemp Beispiel */
#include <dir.h>
#include <stdio.h>
int main(void)
{
/* fname defines the template for the
temporary file. */
char *fname = "TXXXXXX", *ptr;
ptr = mktemp(fname);
printf("%s\n",ptr);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 528 von 606
/* mktime Beispiel */
#include <stdio.h>
#include <time.h>
char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Unknown"};
int main(void)
{
struct tm time_check;
int year, month, day;
/* Input a year, month and day to find the weekday for */
printf("Year: ");
scanf("%d", &year);
printf("Month: ");
scanf("%d", &month);
printf("Day: ");
scanf("%d", &day);
/* load the time_check structure with the data */
time_check.tm_year = year - 1900;
time_check.tm_mon = month - 1;
time_check.tm_mday = day;
time_check.tm_hour = 0;
time_check.tm_min = 0;
time_check.tm_sec = 1;
time_check.tm_isdst = -1;
/* call mktime to fill in the weekday field of the structure */
if (mktime(&time_check) == -1)
time_check.tm_wday = 7;
/* print out the day of the week */
printf("That day is a %s\n", wday[time_check.tm_wday]);
return 0;
}
/* modf Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double fraction, integer;
double number = 100000.567;
fraction = modf(number, &integer);
printf("The whole and fractional parts of %lf are %lf and %lf\n",
number, integer, fraction);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 529 von 606
/* movedata Beispiel */
#include <mem.h>
#define MONO_BASE 0xB000
char buf[80*25*2];
/* saves the contents of the monochrome screen in buffer */
void save_mono_screen(char near *buffer)
{
movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
}
int main(void)
{
save_mono_screen(buf);
return 0;
}
/* movmem Beispiel */
#include <mem.h>
#include <alloc.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char *source = "FH Heilbronn";
char *destination;
int length;
length = strlen(source);
destination = (char *) malloc(length + 1);
movmem(source, destination, length);
printf("%s\n", destination);
return 0;
}
/* movetext Beispiel */
#include <conio.h>
#include <string.h>
int main(void)
{
char *str = "This is a test string";
clrscr();
cputs(str);
getch();
movetext(1, 1, strlen(str), 2, 10, 10);
getch();
DDCHelp Hilfe zur Programmiersprache C Seite 530 von 606
return 0;
}
/* norm Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = " << z << "\n";
cout << " has real part = " << real(z) << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << "\n";
double mag = sqrt(norm(z));
double ang = arg(z);
cout << "The polar form of z is:\n";
cout << " magnitude = " << mag << "\n";
cout << " angle (in radians) = " << ang << "\n";
cout << "Reconstructing z from its polar form gives:\n";
cout << " z = " << polar(mag,ang) << "\n";
return 0;
}
/* closedir and readdir Beispiel */
/* opendir.c - test opendir(), readdir(), closedir() */
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
void scandir(char *dirname)
{
DIR *dir;
struct dirent *ent;
printf("First pass on '%s':\n",dirname);
if ((dir = opendir(dirname)) == NULL)
{
perror("Unable to open directory");
exit(1);
}
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
printf("Second pass on '%s':\n",dirname);
rewinddir(dir);
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
if (closedir(dir) != 0)
DDCHelp Hilfe zur Programmiersprache C Seite 531 von 606
perror("Unable to close directory");
}
void main(int argc,char *argv[])
{
if (argc != 2)
{
printf("usage: opendir dirname\n");
exit(1);
}
scandir(argv[1]);
exit(0);
}
/* opendir Beispiel */
/* opendir.c - test opendir(), readdir(), closedir() */
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
void scandir(char *dirname)
{
DIR *dir;
struct dirent *ent;
printf("First pass on '%s':\n",dirname);
if ((dir = opendir(dirname)) == NULL)
{
perror("Unable to open directory");
exit(1);
}
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
printf("Second pass on '%s':\n",dirname);
rewinddir(dir);
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
if (closedir(dir) != 0)
perror("Unable to close directory");
}
void main(int argc,char *argv[])
{
if (argc != 2)
{
printf("usage: opendir dirname\n");
exit(1);
}
scandir(argv[1]);
exit(0);
}
DDCHelp Hilfe zur Programmiersprache C Seite 532 von 606
/* parsfnm Beispiel */
#include <process.h>
#include <string.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
char line[80];
struct fcb blk;
/* get file name */
printf("Enter drive and file name (no path; e.g., a:file.dat)\n");
gets(line);
/* put file name in fcb */
if (parsfnm(line, &blk, 1) == NULL)
printf("Error in parsfm call\n");
else
printf("Drive #%d Name: %11s\n", blk.fcb_drive, blk.fcb_name);
return 0;
}
/* peek Beispiel */
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
int value = 0;
printf("The current status of your keyboard is:\n");
value = peek(0x0040, 0x0017);
if (value & 1)
printf("Right shift on\n");
else
printf("Right shift off\n");
if (value & 2)
printf("Left shift on\n");
else
printf("Left shift off\n");
if (value & 4)
printf("Control key on\n");
else
printf("Control key off\n");
if (value & 8)
printf("Alt key on\n");
else
printf("Alt key off\n");
if (value & 16)
DDCHelp Hilfe zur Programmiersprache C Seite 533 von 606
printf("Scroll lock on\n");
else
printf("Scroll lock off\n");
if (value & 32)
printf("Num lock on\n");
else
printf("Num lock off\n");
if (value & 64)
printf("Caps lock on\n");
else
printf("Caps lock off\n");
return 0;
}
/* perror Beispiel */
#include <stdio.h>
int main(void)
{
FILE *fp;
fp = fopen("perror.dat", "r");
if (!fp)
perror("Unable to open file for reading");
return 0;
}
/* poke Beispiel */
#include <dos.h>
#include <conio.h>
int main(void)
{
clrscr();
cprintf("Make sure the scroll lock key is off and press any
key\r\n");
getch();
poke(0x0000,0x0417,16);
cprintf("The scroll lock is now on\r\n");
return 0;
}
/* polar Beispiel */
#include <iostream.h>
#include <complex.h>
DDCHelp Hilfe zur Programmiersprache C Seite 534 von 606
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = " << z << "\n";
cout << " has real part = " << real(z) << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << "\n";
double mag = sqrt(norm(z));
double ang = arg(z);
cout << "The polar form of z is:\n";
cout << " magnitude = " << mag << "\n";
cout << " angle (in radians) = " << ang << "\n";
cout << "Reconstructing z from its polar form gives:\n";
cout << " z = " << polar(mag,ang) << "\n";
return 0;
}
/* poly Beispiel */
#include <stdio.h>
#include <math.h>
/* polynomial: x**3 - 2x**2 + 5x - 1 */
int main(void)
{
double array[] = { -1.0, 5.0, -2.0, 1.0
};
double result;
result = poly(2.0, 3, array);
printf("The polynomial: x**3 - 2.0x**2 + 5x - 1 at 2.0 is %lf\n",
result);
return 0;
}
/* pow Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 2.0, y = 3.0;
printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 535 von 606
/* pow10 Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double p = 3.0;
printf("Ten raised to %lf is %lf\n", p, pow10(p));
return 0;
}
/* putch Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch = 0;
printf("Input a string:");
while ((ch != '\r'))
{
ch = getch();
putch(ch);
}
return 0;
}
/* raise Beispiel */
#include <signal.h>
int main(void)
{
int a, b;
a = 10;
b = 0;
if (b == 0)
/* preempt divide by zero error */
raise(SIGFPE);
a = a / b;
return 0;
}
/* rand Beispiel */
#include <stdlib.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 536 von 606
int main(void)
{
int i;
randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
/* random Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* prints a random number in the range 0 to 99 */
int main(void)
{
randomize();
printf("Random number in the 0-99 range: %d\n", random (100));
return 0;
}
/* randomize Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
/* real Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = " << z << "\n";
cout << " has real part = " << real(z) << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << "\n";
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 537 von 606
}
/* remove Beispiel */
#include <stdio.h>
int main(void)
{
char file[80];
/* prompt for file name to delete */
printf("File to delete: ");
gets(file);
/* delete the file */
if (remove(file) == 0)
printf("Removed %s.\n",file);
else
perror("remove");
return 0;
}
/* rename Beispiel */
#include <stdio.h>
int main(void)
{
char oldname[80], newname[80];
/* prompt for file to rename and new name */
printf("File to rename: ");
gets(oldname);
printf("New name: ");
gets(newname);
/* Rename the file */
if (rename(oldname, newname) == 0)
printf("Renamed %s to %s.\n", oldname, newname);
else
perror("rename");
return 0;
}
/* rewind Beispiel */
#include <stdio.h>
#include <dir.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 538 von 606
{
FILE *fp;
char *fname = "TXXXXXX", *newname, first;
newname = mktemp(fname);
fp = fopen(newname,"w+");
fprintf(fp,"abcdefghijklmnopqrstuvwxyz");
rewind(fp);
fscanf(fp,"%c",&first);
printf("The first character is: %c\n",first);
fclose(fp);
remove(newname);
return 0;
}
/* rewinddir Beispiel */
/* opendir.c - test opendir(), readdir(), closedir() */
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
void scandir(char *dirname)
{
DIR *dir;
struct dirent *ent;
printf("First pass on '%s':\n",dirname);
if ((dir = opendir(dirname)) == NULL)
{
perror("Unable to open directory");
exit(1);
}
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
printf("Second pass on '%s':\n",dirname);
rewinddir(dir);
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
if (closedir(dir) != 0)
perror("Unable to close directory");
}
void main(int argc,char *argv[])
{
if (argc != 2)
{
printf("usage: opendir dirname\n");
exit(1);
}
scandir(argv[1]);
exit(0);
}
DDCHelp Hilfe zur Programmiersprache C Seite 539 von 606
/* rmtmp Beispiel */
#include <stdio.h>
#include <process.h>
void main()
{
FILE *stream;
int i;
/* Create temporary files */
for (i = 1; i <= 10; i++)
{
if ((stream = tmpfile()) == NULL)
perror("Could not open temporary file\n");
else
printf("Temporary file %d created\n", i);
}
/* Remove temporary files */
if (stream != NULL)
printf("%d temporary files deleted\n", rmtmp());
}
/* _searchenv Beispiel */
#include <stdio.h>
#include <stdlib.h>
char buf[_MAX_PATH];
int main(void)
{
/* looks for TLINK */
_searchenv("TLINK.EXE","PATH",buf);
if (buf[0] == '\0')
printf("TLINK.EXE not found\n");
else
printf("TLINK.EXE found in %s\n", buf);
/* looks for non-existent file */
_searchenv("NOTEXIST.FIL","PATH",buf);
if (buf[0] == '\0')
printf("NOTEXIST.FIL not found\n");
else
printf("NOTEXIST.FIL found in %s\n", buf);
return 0;
}
/* Program output
TLINK.EXE found in C:\BIN\TLINK.EXE
NOTEXIST.FIL not found
*/
DDCHelp Hilfe zur Programmiersprache C Seite 540 von 606
/* searchpath Beispiel */
#include <stdio.h>
#include <dir.h>
int main(void)
{
char *p;
/* Looks for TLINK and returns a pointer
to the path */
p = searchpath("TLINK.EXE");
printf("Search for TLINK.EXE : %s\n", p);
/* Looks for non-existent file */
p = searchpath("NOTEXIST.FIL");
printf("Search for NOTEXIST.FIL : %s\n", p);
return 0;
}
/* abort Beispiel */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Calling abort()\n");
abort();
return 0; /* This is never reached */
}
/* access Beispiel */
#include <stdio.h>
#include <io.h>
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
DDCHelp Hilfe zur Programmiersprache C Seite 541 von 606
/* arg Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = " << z << "\n";
cout << " has real part = " << real(z) << "\n";
cout << " and imaginary part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << "\n";
double mag = sqrt(norm(z));
double ang = arg(z);
cout << "The polar form of z is:\n";
cout << " magnitude = " << mag << "\n";
cout << " angle (in radians) = " << ang << "\n";
cout << "Reconstructing z from its polar form gives:\n";
cout << " z = " << polar(mag,ang) << "\n";
return 0;
}
/* assert Beispiel */
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct ITEM {
int key;
int value;
};
/* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
}
int main(void)
{
additem(NULL);
return 0;
}
/* atexit Beispiel */
#include <stdio.h>
#include <stdlib.h>
void exit_fn1(void)
{
printf("Exit function #1 called\n");
}
void exit_fn2(void)
DDCHelp Hilfe zur Programmiersprache C Seite 542 von 606
{
printf("Exit function #2 called\n");
}
int main(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}
/* atof Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
/* atoi Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
/* atol Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *lstr = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", lstr, l);
DDCHelp Hilfe zur Programmiersprache C Seite 543 von 606
return(0);
}
/* bcd Beispiel */
#include <iostream.h>
#include <bcd.h>
double x = 10000.0; // ten thousand dollars
bcd a = bcd(x/3,2); // a third, rounded to nearest penny
int main(void)
{
cout << "share of fortune = $" << a << "\n";
return 0;
}
/* bdos Beispiel */
#include <stdio.h>
#include <dos.h>
/* Get current drive as 'A', 'B', ... */
char current_drive(void)
{
char curdrive;
/* Get current disk as 0, 1, ... */
curdrive = bdos(0x19, 0, 0);
return('A' + curdrive);
}
int main(void)
{
printf("The current drive is %c:\n", current_drive());
return 0;
}
/* bdosptr Beispiel */
#include <string.h>
#include <stdio.h>
#include <dir.h>
#include <dos.h>
#include <errno.h>
#include <stdlib.h>
#define BUFLEN 80
int main(void)
{
char buffer[BUFLEN];
int test;
printf("Enter full pathname of a directory\n");
DDCHelp Hilfe zur Programmiersprache C Seite 544 von 606
gets(buffer);
test = bdosptr(0x3B,buffer,0);
if(test)
{
printf("DOS error message: %d\n", errno);
/* See errno.h for error listings */
exit (1);
}
getcwd(buffer, BUFLEN);
printf("The current directory is: %s\n", buffer);
return 0;
}
/* calloc Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char *str = NULL;
/* allocate memory for string */
str = (char *) calloc(10, sizeof(char));
/* copy "Hello" into string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
/* ceil and floor Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double number = 123.54;
double down, up;
down = floor(number);
up = ceil(number);
printf("original number %5.2lf\n", number);
printf("number rounded down %5.2lf\n", down);
printf("number rounded up %5.2lf\n", up);
DDCHelp Hilfe zur Programmiersprache C Seite 545 von 606
return 0;
}
/* cgets Beispiel */
#include <stdio.h>
#include <conio.h>
int main(void)
{
char buffer[83];
char *p;
/* There's space for 80 characters plus the NULL terminator */
buffer[0] = 81;
printf("Input some chars:");
p = cgets(buffer);
printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p);
printf("The returned pointer is %p, buffer[0] is at %p\n", p,
&buffer);
/* Leave room for 5 characters plus the NULL terminator */
buffer[0] = 6;
printf("Input some chars:");
p = cgets(buffer);
printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p);
printf("The returned pointer is %p, buffer[0] is at %p\n", p,
&buffer);
return 0;
}
/* _chain_intr Beispiel */
#include <dos.h>
#include <stdio.h>
#include <process.h>
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
typedef void interrupt (*fptr)(__CPPARGS);
static void mesg(char *s)
{
while (*s)
bdos(2,*s++,0);
}
#pragma argsused
void interrupt handler2(unsigned bp, unsigned di)
{
DDCHelp Hilfe zur Programmiersprache C Seite 546 von 606
_enable();
mesg("In handler 2.\r\n");
if (di == 1)
mesg("DI is 1\r\n");
else
mesg("DI is not 1\r\n");
di++;
}
#pragma argsused
void interrupt handler1(unsigned bp, unsigned di)
{
_enable();
mesg("In handler 1.\r\n");
if (di == 0)
mesg("DI is 0\r\n");
else
mesg("DI is not 0\r\n");
di++;
mesg("Chaining to handler 2.\r\n");
_chain_intr((fptr) handler2);
}
int main()
{
_dos_setvect(128,(fptr) handler1);
printf("About to generate interrupt 128\n");
_DI = 0;
geninterrupt(128);
printf("DI was 0 before interrupt, is now 0x%x\n",_DI);
return 0;
}
/* chdir Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
char old_dir[MAXDIR];
char new_dir[MAXDIR];
int main(void)
{
if (getcurdir(0, old_dir))
{
perror("getcurdir()");
exit(1);
}
printf("Current directory is: \\%s\n", old_dir);
if (chdir("\\"))
{
perror("chdir()");
exit(1);
}
if (getcurdir(0, new_dir))
DDCHelp Hilfe zur Programmiersprache C Seite 547 von 606
{
perror("getcurdir()");
exit(1);
}
printf("Current directory is now: \\%s\n", new_dir);
printf("\nChanging back to original directory: \\%s\n", old_dir);
if (chdir(old_dir))
{
perror("chdir()");
exit(1);
}
return 0;
}
/* chmod Beispiel */
/* NEW chmod() example: */
#include <errno.h>
#include <stdio.h>
#include <io.h>
#include <process.h>
#include <sys\stat.h>
void main(void)
{
char filename[64];
struct stat stbuf;
int amode;
printf("Enter name of file: ");
scanf("%s", filename);
if (stat(filename, &stbuf) != 0)
{
perror("Unable to get file information");
exit(1);
}
if (stbuf.st_mode & S_IWRITE)
{
printf("Changing to read-only\n");
amode = S_IREAD;
}
else
{
printf("Changing to read-write\n");
amode = S_IREAD|S_IWRITE;
}
if (chmod(filename, amode) != 0)
{
perror("Unable to change file mode");
exit(1);
}
exit(0);
}
DDCHelp Hilfe zur Programmiersprache C Seite 548 von 606
/* chsize Beispiel */
#include <string.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
/* create text file containing 10 bytes */
handle = open("DUMMY.FIL", O_CREAT);
write(handle, buf, strlen(buf));
/* truncate the file to 5 bytes in size */
chsize(handle, 5);
/* close the file */
close(handle);
return 0;
}
/* _clear87 and _status87 Beispiel */
#include <stdio.h>
#include <float.h>
int main(void)
{
float x;
double y = 1.5e-100;
printf("\nStatus 87 before error: %X\n", _status87());
x = y; /* create underflow and precision loss */
printf("Status 87 after error: %X\n", _status87());
_clear87();
printf("Status 87 after clear: %X\n", _status87());
y = x;
return 0;
}
/* clearerr Beispiel */
#include <stdio.h>
int main(void)
{
FILE *fp;
char ch;
/* open a file for writing */
fp = fopen("DUMMY.FIL", "w");
DDCHelp Hilfe zur Programmiersprache C Seite 549 von 606
/* force an error condition by attempting to read */
ch = fgetc(fp);
printf("%c\n",ch);
if (ferror(fp))
{
/* display an error message */
printf("Error reading from DUMMY.FIL\n");
/* reset the error and EOF indicators */
clearerr(fp);
}
fclose(fp);
return 0;
}
/* clock Beispiel */
#include <time.h>
#include <stdio.h>
#include <dos.h>
int main(void)
{
clock_t start, end;
start = clock();
delay(2000);
end = clock();
printf("The time was: %f\n", (end - start) / CLK_TCK);
return 0;
}
/* clreol Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
cprintf("The function CLREOL clears all characters from the\r\n");
cprintf("cursor position to the end of the line within the\r\n");
cprintf("current text window, without moving the cursor.\r\n");
cprintf("Press any key to continue . . .");
gotoxy(14, 4);
getch();
clreol();
getch();
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 550 von 606
/* clrscr Beispiel */
#include <conio.h>
int main(void)
{
int i;
clrscr();
for (i = 0; i < 20; i++)
cprintf("%d\r\n", i);
cprintf("\r\nPress any key to clear screen");
getch();
clrscr();
cprintf("The screen has been cleared!");
getch();
return 0;
}
/* complex Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = "<< z << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << " \n";
return 0;
}
/* conj Beispiel */
#include <iostream.h>
#include <complex.h>
int main(void)
{
double x = 3.1, y = 4.2;
complex z = complex(x,y);
cout << "z = "<< z << "\n";
cout << " and imaginary real part = " << imag(z) << "\n";
cout << "z has complex conjugate = " << conj(z) << " \n";
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 551 von 606
/* country Beispiel */
#include <dos.h>
#include <stdio.h>
#define USA 0
int main(void)
{
struct COUNTRY country_info;
country(USA, &country_info);
printf("The currency symbol for the USA is: %s\n",
country_info.co_curr);
return 0;
}
/* cputs Beispiel */
#include <conio.h>
int main(void)
{
/* clear the screen */
clrscr();
/* create a text window */
window(10, 10, 80, 25);
/* output some text in the window */
cputs("This is within the window\r\n");
/* wait for a key */
getch();
return 0;
}
/* creattemp Beispiel */
#include <string.h>
#include <stdio.h>
#include <io.h>
int main(void)
{
int handle;
char pathname[128];
strcpy(pathname, "\\");
/* create a unique file in the root directory */
handle = creattemp(pathname, 0);
printf("%s was the unique file created.\n", pathname);
close(handle);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 552 von 606
/* ctrlbrk Beispiel */
#include <stdio.h>
#include <dos.h>
#define ABORT 0
int c_break(void)
{
printf("Control-Break pressed. Program aborting ...\n");
return (ABORT);
}
void main(void)
{
ctrlbrk(c_break);
for(;;)
{
printf("Looping... Press <Ctrl-Break> to quit:\n");
}
}
/* delline Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
cprintf("The function DELLINE deletes the line containing the\r\n");
cprintf("cursor and moves all lines below it one line up.\r\n");
cprintf("DELLINE operates within the currently active text\r\n");
cprintf("window. Press any key to continue . . .");
gotoxy(1,2); /* Move the cursor to the second line and first column
*/
getch();
delline();
getch();
return 0;
}
/* difftime Beispiel */
#include <time.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
int main(void)
{
time_t first, second;
clrscr();
first = time(NULL); /* Gets system
DDCHelp Hilfe zur Programmiersprache C Seite 553 von 606
time */
delay(2000); /* Waits 2 secs */
second = time(NULL); /* Gets system time
again */
printf("The difference is: %f seconds\n",difftime(second,first));
getch();
return 0;
}
/* dosexterr Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
FILE *fp;
struct DOSERROR info;
fp = fopen("perror.dat","r");
if (!fp) perror("Unable to open file for reading");
dosexterr(&info);
printf("Extended DOS error information:\n");
printf(" Extended error: %d\n",info.de_exterror);
printf(" Class: %x\n",info.de_class);
printf(" Action: %x\n",info.de_action);
printf(" Error Locus: %x\n",info.de_locus);
return 0;
}
/* dostounix Beispiel */
#include <time.h>
#include <stddef.h>
#include <dos.h>
#include <stdio.h>
int main(void)
{
time_t t;
struct time d_time;
struct date d_date;
struct tm *local;
getdate(&d_date);
gettime(&d_time);
t = dostounix(&d_date, &d_time);
local = localtime(&t);
printf("Time and Date: %s\n", asctime(local));
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 554 von 606
/* __emit__ Beispiel */
#include <dos.h>
int main(void)
{
/* Emit code that will generate a print screen via int 5 */
__emit__(0xcd,0x05);
return 0;
}
/* eof Beispiel */
#include <sys\stat.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "This is a test";
char ch;
/* create a file */
handle = open("DUMMY.FIL",
O_CREAT | O_RDWR,
S_IREAD | S_IWRITE);
/* write some data to the file */
write(handle, msg, strlen(msg));
/* seek to the beginning of the file */
lseek(handle, 0L, SEEK_SET);
/* reads chars from the file until it reaches EOF */
do
{
read(handle, &ch, 1);
printf("%c", ch);
} while (!eof(handle));
close(handle);
return 0;
}
/* exp and expl Beispiel */
#include <stdio.h>
#include <math.h>
DDCHelp Hilfe zur Programmiersprache C Seite 555 von 606
int main(void)
{
double result;
double x = 4.0;
result = exp(x);
printf("'e' raised to the power \
of %lf (e ^ %lf) = %lf\n",
x, x, result);
return 0;
}
/* farcalloc Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
int main(void)
{
char far *fptr;
char *str = "Hello";
/* allocate memory for the far pointer */
fptr = (char far *) farcalloc(10, sizeof(char));
/* copy "Hello" into allocated memory */
/*
Note: movedata is used because you might be in a small data model,
in
which case a normal string copy routine can not be used since it
assumes the pointer size is near.
*/
movedata(FP_SEG(str), FP_OFF(str),
FP_SEG(fptr), FP_OFF(fptr),
strlen(str));
/* display string (note the F modifier) */
printf("Far string is: %Fs\n", fptr);
/* free the memory */
farfree(fptr);
return 0;
}
/* farmalloc Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <string.h>
#include <dos.h>
int main(void)
DDCHelp Hilfe zur Programmiersprache C Seite 556 von 606
{
char far *fptr;
char *str = "Hello";
/* allocate memory for the far pointer */
fptr = (char far *) farmalloc(10);
/* copy "Hello" into allocated memory */
/*
Note: movedata is used because we might be in a small data model,
in which case a normal string copy routine can not be used since it
assumes the pointer size is near.
*/
movedata(FP_SEG(str), FP_OFF(str),
FP_SEG(fptr), FP_OFF(fptr),
strlen(str) + 1);
/* display string (note the F modifier)
*/
printf("Far string is: %Fs\n", fptr);
/* free the memory */
farfree(fptr);
return 0;
}
/* fclose Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *fp;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
fp = fopen("DUMMY.FIL", "w");
fwrite(&buf, strlen(buf), 1, fp);
/* close the file */
fclose(fp);
return 0;
}
/* fcloseall Beispiel */
#include <stdio.h>
int main(void)
{
int streams_closed;
/* open two streams */
fopen("DUMMY.ONE", "w");
fopen("DUMMY.TWO", "w");
DDCHelp Hilfe zur Programmiersprache C Seite 557 von 606
/* close the open streams */
streams_closed = fcloseall();
if (streams_closed == EOF)
/* issue an error message */
perror("Error");
else
/* print result of fcloseall() function */
printf("%d streams were closed.\n", streams_closed);
return 0;
}
/* feof Beispiel */
#include <stdio.h>
int main(void)
{
FILE *stream;
/* open a file for reading */
stream = fopen("DUMMY.FIL", "r");
/* read a character from the file */
fgetc(stream);
/* check for EOF */
if (feof(stream))
printf("We have reached end-of-file\n");
/* close the file */
fclose(stream);
return 0;
}
/* ferror Beispiel */
#include <stdio.h>
int main(void)
{
FILE *stream;
/* open a file for writing */
stream = fopen("DUMMY.FIL", "w");
/* force an error condition by attempting to read */
(void) getc(stream);
if (ferror(stream)) /* test for an error on the stream */
{
/* display an error message */
printf("Error reading from DUMMY.FIL\n");
/* reset the error and EOF indicators */
DDCHelp Hilfe zur Programmiersprache C Seite 558 von 606
clearerr(stream);
}
fclose(stream);
return 0;
}
/* fflush Beispiel */
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without closing it */
flush(stream);
printf("\nFile was flushed, Press any key to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
/* fgetpos and fsetpos Beispiel */
#include <stdlib.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 559 von 606
void showpos(FILE *stream);
int main(void)
{
FILE *stream;
fpos_t filepos;
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* save the file pointer position */
fgetpos(stream, &filepos);
/* write some data to the file */
fprintf(stream, "This is a test");
/* show the current file position */
showpos(stream);
/* set a new file position, display it */
if (fsetpos(stream, &filepos) == 0)
showpos(stream);
else
{
fprintf(stderr, "Error setting file pointer.\n");
exit(1);
}
/* close the file */
fclose(stream);
return 0;
}
void showpos(FILE *stream)
{
fpos_t pos;
/* display the current file pointer
position of a stream */
fgetpos(stream, &pos);
printf("File position: %ld\n", pos);
}
/* filelength Beispiel */
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
/* create a file containing 10 bytes */
handle = open("DUMMY.FIL", O_CREAT);
write(handle, buf, strlen(buf));
DDCHelp Hilfe zur Programmiersprache C Seite 560 von 606
/* display the size of the file */
printf("file length in bytes: %ld\n", filelength(handle));
/* close the file */
close(handle);
return 0;
}
/* fileno Beispiel */
#include <stdio.h>
int main(void)
{
FILE *stream;
int handle;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* obtain the file handle associated with the stream */
handle = fileno(stream);
/* display the handle number */
printf("handle number: %d\n", handle);
/* close the file */
fclose(stream);
return 0;
}
/* flushall Beispiel */
#include <stdio.h>
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n", flushall());
/* close the file */
fclose(stream);
return 0;
}
/* fmod and fmodl Beispiel */
#include <stdio.h>
#include <math.h>
DDCHelp Hilfe zur Programmiersprache C Seite 561 von 606
int main(void)
{
double x = 5.0, y = 2.0;
double result;
result = fmod(x,y);
printf("The remainder of (%lf / %lf) is %lf\n", x, y, result);
return 0;
}
/* FP_OFF, and FP_SEG Beispiel*/
#include <stdio.h>
#include <dos.h>
main()
{
char *str = "Hello\n";
printf("The address pointed to by str is %04X:%04X\n",
FP_SEG(str), FP_OFF(str));
printf("The address of str is %04X:%04X\n", FP_SEG(&str),
FP_OFF(&str));
return 0;
}
/* fread Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char msg[] = "this is a test";
char buf[20];
if ((stream = fopen("DUMMY.FIL", "w+"))
== NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);
/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);
/* read the data and display it */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
DDCHelp Hilfe zur Programmiersprache C Seite 562 von 606
fclose(stream);
return 0;
}
/* frexp and frexpl Beispiels */
#include <math.h>
#include <stdio.h>
int main(void)
{
double mantissa, number;
int exponent;
number = 8.0;
mantissa = frexp(number, &exponent);
printf("The number %lf is ", number);
printf("%lf times two to the ", mantissa);
printf("power of %d\n", exponent);
return 0;
}
/* fseek Beispiel */
#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
/* ftell Beispiel */
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 563 von 606
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("The file pointer is at byte %ld\n", ftell(stream));
fclose(stream);
return 0;
}
/* ftime Beispiel */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys\timeb.h>
/* pacific standard & daylight savings */
char *tzstr = "TZ=PST8PDT";
int main(void)
{
struct timeb t;
putenv(tzstr);
tzset();
ftime(&t);
printf("Seconds since 1/1/1970 GMT: %ld\n", t.time);
printf("Thousandths of a second: %d\n", t.millitm);
printf("Difference between local time and GMT: %d\n", t._timezone);
printf("Daylight savings in effect (1) not (0): %d\n", t.dstflag);
return 0;
}
/* _fullpath Beispiel */
#include <stdio.h>
#include <stdlib.h>
char buf[_MAX_PATH];
void main(int argc, char *argv[])
{
for ( ; argc; argv++, argc--)
{
if (_fullpath(buf, argv[0], _MAX_PATH) == NULL)
printf("Unable to obtain full path of %s\n",argv[0]);
else
printf("Full path of %s is %s\n",argv[0],buf);
}
}
/* fwrite Beispiel */
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 564 von 606
struct mystruct
{
int i;
char ch;
};
int main(void)
{
FILE *stream;
struct mystruct s;
if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$
*/
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
fclose(stream); /* close file */
return 0;
}
/* gcvt Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char str[25];
double num;
int sig = 5; /* significant digits */
/* a regular number */
num = 9.876;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* a negative number */
num = -123.4567;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* scientific notation */
num = 0.678e5;
gcvt(num, sig, str);
printf("string = %s\n", str);
return(0);
}
/* geninterrupt Beispiel */
#include <conio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 565 von 606
#include <dos.h>
/* function prototype */
void writechar(char ch);
int main(void)
{
clrscr();
gotoxy(80,25);
writechar('*');
getch();
return 0;
}
/*
outputs a character at the current cursor
position using the video BIOS to avoid
the scrolling of the screen when writing
to location (80,25).
*/
void writechar(char ch)
{
struct text_info ti;
/* grab current text settings */
gettextinfo(&ti);
/* interrupt 0x10 sub-function 9 */
_AH = 9;
/* character to be output */
_AL = ch;
_BH = 0; /* video page */
_BL = ti.attribute; /* video attribute */
_CX = 1; /* repetition factor */
geninterrupt(0x10); /* output the char */
}
/* getcbrk and setcbrk Beispiel */
#include <dos.h>
#include <conio.h>
#include <stdio.h>
int main(void)
{
int break_flag;
printf("Enter 0 to turn control break off\n");
printf("Enter 1 to turn control break on\n");
break_flag = getch() - 0;
setcbrk(break_flag);
if (getcbrk())
printf("Cntrl-brk flag is on\n");
else
printf("Cntrl-brk flag is off\n");
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 566 von 606
/* segread Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
struct SREGS segs;
segread(&segs);
printf("Current segment register settings\n\n");
printf("CS: %X DS: %X\n", segs.cs, segs.ds);
printf("ES: %X SS: %X\n", segs.es, segs.ss);
return 0;
}
/* setmem Beispiel */
#include <stdio.h>
#include <alloc.h>
#include <mem.h>
int main(void)
{
char *dest;
dest = (char *) calloc(21, sizeof(char));
setmem(dest, 20, 'c');
printf("%s\n", dest);
return 0;
}
/* setmode Beispiel */
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
int main (int argc, char ** argv )
(
FILE *fp;
int newmode;
long where;
char buf[256];
fp = fopen( argv[1], "r+" );
if ( !fp )
{
printf( "Couldn't open %s\n", argv[1] );
return -1;
}
newmode = setmode( fileno( fp ), O_BINARY );
if ( newmode == -1 )
DDCHelp Hilfe zur Programmiersprache C Seite 567 von 606
{
printf( "Coudn't set mode of %s\n", argv[1] );
return -2
}
fp->flags |= _F_BIN;
where = ftell( fp );
printf ("file position: %d\n", where );
fread( buf, 1, 1, fp );
where = ftell ( fp );
printf( "read %c, file position: %ld\n", *buf, where );
fclose ( fp );
return 0;
}
/* signal Beispiel */
/* signal example */
/*
This example installs a signal handler routine for SIGFPE,
catches an integer overflow condition, makes an adjustment to AX
register, and returns. This example program MAY cause your computer
to crash, and will produce runtime errors depending on which memory
model is used.
*/
#pragma inline
#include <stdio.h>
#include <signal.h>
#ifdef __cplusplus
typedef void (*fptr)(int);
#else
typedef void (*fptr)();
#endif
void Catcher(int *reglist)
{
signal(SIGFPE, (fptr)Catcher); // ******reinstall signal handler
printf("Caught it!\n"); *(reglist + 8) = 3; /* make return AX = 3 */
}
int main(void)
{
signal(SIGFPE, (fptr)Catcher); /* cast Catcher to appropriate type */
asm mov ax,07FFFH /* AX = 32767 */
asm inc ax /* cause overflow */
asm into /* activate handler */
/* The handler set AX to 3 on return. If that had not happened,
there would have been another exception when the next 'into'
executed after the 'dec' instruction. */
asm dec ax /* no overflow now */
asm into /* doesn't activate */
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 568 von 606
/* sleep Beispiel */
#include <dos.h>
#include <stdio.h>
int main(void)
{
int i;
for (i=1; i<5; i++)
{
printf("Sleeping for %d seconds\n", i);
sleep(i);
}
return 0;
}
/* sqrt Beispiel */
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 4.0, result;
result = sqrt(x);
printf("The square root of %lf is %lf\n", x, result);
return 0;
}
/* srand Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
/* stpcpy Beispiel */
#include <stdio.h>
#include <string.h>
DDCHelp Hilfe zur Programmiersprache C Seite 569 von 606
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
stpcpy(string, str1);
printf("%s\n", string);
return 0;
}
/*strcat Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char destination[25];
char *blank = " ", *c = "C++", *FH = " FH Heilbronn ";
strcpy(destination, FH);
strcat(destination, blank);
strcat(destination, c);
printf("%s\n", destination);
return 0;
}
/* strchr Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = strchr(string, c);
if (ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
else
printf("The character was not found\n");
return 0;
}
/* strcoll Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
DDCHelp Hilfe zur Programmiersprache C Seite 570 von 606
char *two = "Heilbronn";
char *one = "FH";
int check;
check = strcoll(one, two);
if (check == 0)
printf("The strings are equal\n");
if (check < 0)
printf("%s comes before %s\n", one, two);
if (check > 0)
printf("%s comes before %s\n", two, one);
return 0;
}
/* strcpy Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%s\n", string);
return 0;
}
/* _strdate Beispiel */
#include <time.h>
#include <stdio.h>
void main(void)
{
char datebuf[9];
char timebuf[9];
_strdate(datebuf);
_strtime(timebuf);
printf("Date: %s Time: %s\n",datebuf,timebuf);
}
/* strdup Beispiel */
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *dup_str, *string = "abcde";
dup_str = strdup(string);
printf("%s\n", dup_str);
DDCHelp Hilfe zur Programmiersprache C Seite 571 von 606
free(dup_str);
return 0;
}
/* strftime Beispiel */
#include <stdio.h>
#include <time.h>
#include <dos.h>
int main(void)
{
struct tm *time_now;
time_t secs_now;
char str[80];
tzset();
time(&secs_now);
time_now = localtime(&secs_now);
strftime(str, 80,
"It is %M minutes after %I o'clock (%Z) %A, %B %d 19%y",
time_now);
printf("%s\n",str);
return 0;
}
/*strlen Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "FH Heilbronn";
printf("%d\n", strlen(string));
return 0;
}
/*strncat Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char destination[25];
char *source = " States";
strcpy(destination, "United");
strncat(destination, source, 7);
printf("%s\n", destination);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 572 von 606
/* strncpy Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
strncpy(string, str1, 3);
string[3] = '\0';
printf("%s\n", string);
return 0;
}
/* strnset Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz";
char letter = 'x';
printf("string before strnset: %s\n", string);
strnset(string, letter, 13);
printf("string after strnset: %s\n", string);
return 0;
}
/* strpbrk Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string1 = "abcdefghijklmnopqrstuvwxyz";
char *string2 = "onm";
char *ptr;
ptr = strpbrk(string1, string2);
if (ptr)
printf("strpbrk found first character: %c\n", *ptr);
else
printf("strpbrk didn't find character in set\n");
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 573 von 606
/* strrchr Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[15];
char *ptr, c = 'r';
strcpy(string, "This is a string");
ptr = strrchr(string, c);
if (ptr)
printf("The character %c is at position: %d\n", c, ptr-string);
else
printf("The character was not found\n");
return 0;
}
/* strrev Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char *forward = "string";
printf("Before strrev(): %s\n", forward);
strrev(forward);
printf("After strrev(): %s\n", forward);
return 0;
}
/* strset Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10] = "123456789";
char symbol = 'c';
printf("Before strset(): %s\n", string);
strset(string, symbol);
printf("After strset(): %s\n", string);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 574 von 606
/* strstr Beispiel */
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "FH Heilbronn", *str2 = "eil", *ptr;
ptr = strstr(str1, str2);
printf("The substring is: %s\n", ptr);
return 0;
}
/* _strtime Beispiel */
#include <time.h>
#include <stdio.h>
void main(void)
{
char datebuf[9];
char timebuf[9];
_strdate(datebuf);
_strtime(timebuf);
printf("Date: %s Time: %s\n",datebuf,timebuf);
}
/* strtok Beispiel */
#include <string.h>
#include <stdio.h>
int main(void)
{
char input[16] = "abc,d";
char *p;
/* strtok places a NULL terminator
in front of the token, if found */
p = strtok(input, ",");
if (p) printf("%s\n", p);
/* A second call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token */
p = strtok(NULL, ",");
if (p) printf("%s\n", p);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 575 von 606
/* strxfrm Beispiel */
#include <stdio.h>
#include <string.h>
#include <alloc.h>
int main(void)
{
char *target;
char *source = "FH Heilbronn";
int length;
/* allocate space for the target string */
target = (char *) calloc(80, sizeof(char));
/* copy the source over to the target and get the length */
length = strxfrm(target, source, 80);
/* print out the results */
printf("%s has the length %d\n", target, length);
return 0;
}
/* swab Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char source[15] = "rFna koBlrna d";
char target[15];
int main(void)
{
swab(source, target, strlen(source));
printf("This is target: %s\n", target);
return 0;
}
/* system Beispiel */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("About to spawn command.com and run a DOS command\n");
system("dir");
return 0;
}
/* tell Beispiel */
#include <string.h>
#include <stdio.h>
DDCHelp Hilfe zur Programmiersprache C Seite 576 von 606
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "Hello world";
if ((handle = open("TEST.$$$", O_CREAT | O_TEXT | O_APPEND)) == -1)
{
perror("Error:");
return 1;
}
write(handle, msg, strlen(msg));
printf("The file pointer is at byte %ld\n", tell(handle));
close(handle);
return 0;
}
/* tempnam Beispiel */
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream;
int i;
char *name;
for (i = 1; i <= 10; i++) {
if ((name = tempnam("\\tmp","wow")) == NULL)
perror("tempnam couldn't create name");
else {
printf("Creating %s\n",name);
if ((stream = fopen(name,"wb")) == NULL)
perror("Could not open temporary file\n");
else
fclose(stream);
}
free(name);
}
printf("Warning: temp files not deleted.\n");
}
/* textmode Beispiel */
#include <conio.h>
int main(void)
{
textmode(BW40);
cprintf("ABC");
getch();
textmode(C40);
cprintf("ABC");
DDCHelp Hilfe zur Programmiersprache C Seite 577 von 606
getch();
textmode(BW80);
cprintf("ABC");
getch();
textmode(C80);
cprintf("ABC");
getch();
textmode(MONO);
cprintf("ABC");
getch();
return 0;
}
/* tmpfile Beispiel */
#include <stdio.h>
#include <process.h>
int main(void)
{
FILE *tempfp;
tempfp = tmpfile();
if (tempfp)
printf("Temporary file created\n");
else
{
printf("Unable to create temporary file\n");
exit(1);
}
return 0;
}
/* tmpnam Beispiel */
#include <stdio.h>
int main(void)
{
char name[13];
tmpnam(name);
printf("Temporary name: %s\n", name);
return 0;
}
/* toascii Beispiel */
#include <stdio.h>
#include <ctype.h>
DDCHelp Hilfe zur Programmiersprache C Seite 578 von 606
int main(void)
{
int number, result;
number = 511;
result = toascii(number);
printf("%d %d\n", number, result);
return 0;
}
/* tzset Beispiel */
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
time_t td;
putenv("TZ=PST8PDT");
tzset();
time(&td);
printf("Current time = %s\n", asctime(localtime(&td)));
return 0;
}
/* ungetc Beispiel */
#include <stdio.h>
#include <ctype.h>
int main( void )
{
int i=0;
char ch;
puts("Input an integer followed by a char:");
/* read chars until non digit or EOF */
while((ch = getchar()) != EOF && isdigit(ch))
i = 10 * i + ch - 48; /* convert ASCII into int value */
/* if non digit char was read, push it back into input buffer */
if (ch != EOF)
ungetc(ch, stdin);
printf("i = %d, next char in buffer = %c\n", i, getchar());
return 0;
}
/* ungetch Beispiel */
#include <stdio.h>
#include <ctype.h>
DDCHelp Hilfe zur Programmiersprache C Seite 579 von 606
#include <conio.h>
int main( void )
{
int i=0;
char ch;
puts("Input an integer followed by a char:");
/* read chars until non digit or EOF */
while((ch = getche()) != EOF && isdigit(ch))
i = 10 * i + ch - 48; /* convert ASCII into int value */
/* if non digit char was read, push it back into input buffer */
if (ch != EOF)
ungetch(ch);
printf("\n\ni = %d, next char in buffer = %c\n", i, getch());
return 0;
}
/* unixtodos Beispiel */
#include <stdio.h>
#include <dos.h>
char *month[] = {"---", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
#define SECONDS_PER_DAY 86400L /* the number of seconds in one day */
struct date dt;
struct time tm;
int main(void)
{
unsigned long val;
/* get today's date and time */
getdate(&dt);
gettime(&tm);
printf("today is %d %s %d\n", dt.da_day, month[dt.da_mon],
dt.da_year);
/*convert date and time to unix format (num of seconds since Jan 1,
1970*/
val = dostounix(&dt, &tm);
/* subtract 42 days worth of seconds */
val -= (SECONDS_PER_DAY * 42);
/* convert back to dos time and date */
unixtodos(val, &dt, &tm);
printf("42 days ago it was %d %s %d\n",
dt.da_day, month[dt.da_mon], dt.da_year);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 580 von 606
/* unlink Beispiel */
#include <stdio.h>
#include <io.h>
int main(void)
{
FILE *fp = fopen("junk.jnk","w");
int status;
fprintf(fp,"junk");
status = access("junk.jnk",0);
if (status == 0)
printf("File exists\n");
else
printf("File doesn't exist\n");
fclose(fp);
unlink("junk.jnk");
status = access("junk.jnk",0);
if (status == 0)
printf("File exists\n");
else
printf("File doesn't exist\n");
return 0;
}
/* umask Beispiel */
#include <io.h>
#include <stdio.h>
#include <sys\stat.h>
#define FILENAME "TEST.$$$"
int main(void)
{
unsigned oldmask;
FILE *f;
struct stat statbuf;
/* Cause subsequent files to be created as read-only */
oldmask = umask(S_IWRITE);
printf("Old mask = 0x%x\n",oldmask);
/* Create a zero-length file */
if ((f = fopen(FILENAME,"w+")) == NULL)
{
perror("Unable to create output file");
return (1);
}
fclose(f);
/* Verify that the file is read-only */
if (stat(FILENAME,&statbuf) != 0)
{
perror("Unable to get information about output file");
DDCHelp Hilfe zur Programmiersprache C Seite 581 von 606
return (1);
}
if (statbuf.st_mode & S_IWRITE)
printf("Error! %s is writable!\n",FILENAME);
else
printf("Success! %s is not writable.\n",FILENAME);
return (0);
}
/* utime Beispiel */
/* Copy timestamp from one file to another */
#include <sys\stat.h>
#include <utime.h>
#include <stdio.h>
int main( int argc, char *argv[] )
{
struct stat src_stat;
struct utimbuf times;
if(argc != 3) {
printf( "Usage: copytime <source file> <dest file>\n" );
return 1;
}
if (stat(argv[1],&src_stat) != 0) {
perror("Unable to get status of source file");
return 1;
}
times.modtime = times.actime = src_stat.st_mtime;
if (utime(argv[2],×) != 0) {
perror("Unable to set time of destination file");
return 1;
}
return 0;
}
/* va_arg Beispiel */
#include <stdio.h>
#include <stdarg.h>
/* calculate sum of a 0 terminated list */
void sum(char *msg, ...)
{
int total = 0;
va_list ap;
int arg;
va_start(ap, msg);
while ((arg = va_arg(ap,int)) != 0) {
total += arg;
}
printf(msg, total);
va_end(ap);
DDCHelp Hilfe zur Programmiersprache C Seite 582 von 606
}
int main(void) {
sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0);
return 0;
}
/* wherex and wherey Beispiel */
#include <conio.h>
int main(void)
{
clrscr();
gotoxy(10,10);
cprintf("Current location is X: %d Y: %d\r\n", wherex(), wherey());
getch();
return 0;
}
/* window Beispiel */
#include <conio.h>
int main(void)
{
window(10,10,40,11);
textcolor(BLACK);
textbackground(WHITE);
cprintf("This is a test\r\n");
return 0;
}
/* getpsp Beispiel */
#include <stdio.h>
#include <dos.h>
int main(void)
{
static char command[128];
char far *cp;
int len, i;
printf("The program segment prefix is: %u\n", getpsp());
/*
_psp is preset to segment of the PSP. Command line is located at offset
0x81 from start of PSP
*/
cp = (char *) MK_FP(_psp, 0x80);
len = *cp;
DDCHelp Hilfe zur Programmiersprache C Seite 583 von 606
for (i = 0; i < len; i++)
command[i] = cp[i+1];
printf("Command line: %s\n", command);
return 0;
}
/* stackavail Beispiel */
#include <malloc.h>
#include <stdio.h>
int main(void)
{
char *buf;
printf("\nThe stack: %u\tstack pointer: %u", stackavail(), _SP);
buf = (char *) alloca(100 * sizeof(char));
printf("\nNow, the stack: %u\tstack pointer: %u", stackavail(), _SP);
return 0;
}
/* ************************************************
Program output
The stack: 64046 stack pointer: 65524
Now, the stack: 63946 stack pointer: 65424
************************************************ */
/* set_new_handler Beispiel */
#include <iostream.h>
#include <new.h>
#include <stdlib.h>
void mem_warn() {
cerr << "\nCan't allocate!";
exit(1);
}
void main(void) {
set_new_handler(mem_warn);
char *ptr = new char[100];
cout << "\nFirst allocation: ptr = " << hex << long(ptr);
ptr = new char[64000U];
cout << "\nFinal allocation: ptr = " << hex << long(ptr);
set_new_handler(0); // Reset to default.
}
DDCHelp Hilfe zur Programmiersprache C Seite 584 von 606
/* isalpha Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isalpha(c))
printf("%c is alphabetical\n",c);
else printf("%c is not alphabetical\n",c);
return 0;
}
/* isalnum Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isalnum(c))
printf("%c is alphanumeric\n",c);
else printf("%c is not alphanumeric\n",c);
return 0;
}
/* isascii Beispiel */
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
int main(void)
{
char c = 'C';
if (isascii(c))
printf("%c is ascii\n",c);
else printf("%c is not ascii\n",c);
return 0;
}
/* iscntrl Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (iscntrl(c))
printf("%c is a control character\n",c);
else printf("%c is not a control character\n",c);
return 0;
DDCHelp Hilfe zur Programmiersprache C Seite 585 von 606
}
/* isdigit Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isdigit(c))
printf("%c is a digit\n",c);
else printf("%c is not a digit\n",c);
return 0;
}
/* isgraph Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isgraph(c))
printf("%c is a graphic character\n",c);
else printf("%c is not a graphic character\n",c);
return 0;
}
/* islower Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (islower(c))
printf("%c is a lowercase character\n",c);
else printf("%c is not a lowercase character\n",c);
return 0;
}
/* isprint Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
DDCHelp Hilfe zur Programmiersprache C Seite 586 von 606
if (isprint(c))
printf("%c is a printable character\n",c);
else printf("%c is not a printable character\n",c);
return 0;
}
/* ispunct Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (ispunct(c))
printf("%c is a punctuation character\n",c);
else printf("%c is not a punctuation character\n",c);
return 0;
}
/* isspace Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isspace(c))
printf("%c is white space\n",c);
else printf("%c is not white space\n",c);
return 0;
}
/* isupper Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isupper(c))
printf("%c is an uppercase character\n",c);
else printf("%c is not an uppercase character\n",c);
return 0;
}
DDCHelp Hilfe zur Programmiersprache C Seite 587 von 606
/* isxdigit Beispiel */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c = 'C';
if (isxdigit(c))
printf("%c is a hexidecimal digit\n",c);
else printf("%c is not a hexidecimal digit\n",c);
return 0;
}
/* mblen Beispiel */
#include <stdlib.h>
#include <stdio.h>
void main (void)
{
int i ;
char *mulbc = (char *)malloc( sizeof( char) );
wchar_t widec = L'a';
printf (" convert a wide character to multibyte character:\n" );
i = wctomb (mulbc, widec);
printf( "\tCharacters converted: %u\n", i);
printf( "\tMultibyte character: %x\n\n", mulbc);
printf( " Find length--in byte-- of multibyte character:\n");
i = mblen( mulbc, MB_CUR_MAX);
printf("\tLenght--in bytes--if multiple character: %u\n",i);
printf("\tWide character: %x\n\n", mulbc);
printf( " Attempt to find length of a Wide character Null:\n");
widec = L'\0';
wctomb(mulbc, widec);
i = mblen( mulbc, MB_CUR_MAX);
printf("\tLenght--in bytes--if multiple character: %u\n",i);
printf("\tWide character: %x\n\n", mulbc);
}
/* mbstowcs Beispiel */
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int x;
char *mbst = (char *)malloc(MB_CUR_MAX);
wchar_t *pwst = L"Hi";
wchar_t *pwc = (wchar_t *)malloc(sizeof( wchar_t));
printf ("Convert to multibyte string:\n");
x = wcstombs (mbst, pwst, MB_CUR_MAX);
DDCHelp Hilfe zur Programmiersprache C Seite 588 von 606
printf ("\tCharacters converted %u\n",x);
printf ("\tHEx value of first");
printf (" multibyte character: %#.4x\n\n", mbst);
printf ("Convert back to wide character string:\n");
x = mbstowcs(pwc, mbst, MB_CUR_MAX);
printf( "\tCharacters converted: %u\n",x);
printf( "\tHex value of first");
printf( "wide character: %#.4x\n\n", pwc);
}
/* mbtowc Beispiel */
#include <stdlib.h>
#include<stdio.h>
void main(void)
{
int x;
char *mbchar = (char *)calloc(1, sizeof( char));
wchar_t wchar = L'a';
wchar_t *pwcnull = NULL;
wchar_t *pwchar = (wchar_t *)calloc(1, sizeof( wchar_t ));
printf ("Convert a wide character to multibyte character:\n");
x = wctomb( mbchar, wchar);
printf( "\tCharacters converted: %u\n", x);
printf( "\tMultibyte character: %x\n\n", mbchar);
printf ("Convert multibyte character back to a wide character:\n");
x = mbtowc( pwchar, mbchar, MB_CUR_MAX );
printf( "\tBytes converted: %u\n", x);
printf( "\tWide character: %x\n\n", pwchar);
printf ("Atempt to convert when target is NULL\n" );
printf (" returns the length of the multibyte character:\n" );
x = mbtowc (pwcnull, mbchar, MB_CUR_MAX );
printf ( "\tlength of multibyte character:%u\n\n", x );
printf ("Attempt to convert a NULL pointer to a" );
printf (" wide character:\n" );
mbchar = NULL;
x = mbtowc (pwchar, mbchar, MB_CUR_MAX);
printf( "\tBytes converted: %u\n", x );
}
/* MK_FP Beispiel */
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <dos.h>
#include <malloc.h>
main()
{
char *str = "hello\n";
char far *farstr;
DDCHelp Hilfe zur Programmiersprache C Seite 589 von 606
printf ("the address pointed to by str is %04X:%04X\n",
FP_SEG(str), FP_OFF(str));
farstr = (char far *)MK_FP( FP_SEG(str), FP_OFF(str));
printf ("the string pointed by far pointer is %s\n", farstr);
return 0;
}
/* _msize Beispiel */
/* _msize works as a 32-bit command, not as a 16-bit command */
#include <malloc.h> /* malloc() _msize() */
#include <stdio.h> /* printf() */
int main( )
{
int size;
int *buffer;
buffer = malloc(100 * sizeof(int));
size = _msize(buffer);
printf("Allocated %d bytes for 100 integers\n", size);
return(0);
}
/* offsetof Beispiel */
/*
This program uses the offsetof command to show the effect
of changing alignment boundaries within a structure.
It produces this output:
In STRUCT1, two_bytes begins at byte 1.
In STRUCT2, two_bytes begins at byte 2.
By default, the 16-bit compiler aligns structure members
at 1-byte boundaries. With the -a2 flag set, the compiler
aligns fields on even boundaries.
The CPU often processes structure elements more quickly
when they align on even boundaries.
*/
#include <stddef.h> // offsetof()
#include <stdio.h> // printf()
#pragma option -a1 // align on bytes (default)
typedef struct {
char one_byte;
int two_bytes;
} STRUCT1;
#pragma option -a2 // align on even bytes
typedef struct {
DDCHelp Hilfe zur Programmiersprache C Seite 590 von 606
char one_byte;
int two_bytes;
} STRUCT2;
#pragma option -a. // restore command-line option
void main()
{
printf( "In STRUCT1, two_bytes begins at byte %d.\n",
offsetof(STRUCT1, two_bytes) );
printf( "In STRUCT2, two_bytes begins at byte %d.\n",
offsetof(STRUCT2, two_bytes) );
}
/* _pipe Beispiel */
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
void main(int argc, char *argv[])
{
int handles[2];
int retcode, stat, pid;
char asc_handle[10];
if (argc > 1) /* this is the child */
{
/* Get the read pipe handle from command line,
* and set the handle to binary.
*/
handles[0] = atoi(argv[1]);
setmode(handles[0],O_BINARY);
/* Read the desired return code from pipe
*/
if (read(handles[0], &.retcode, sizeof(retcode)) < 0)
{
perror("Child&colon. unable to read pipe");
retcode = 255;
}
printf("Child&colon. returning %d to parent\n",retcode);
exit(retcode);
}
else /* this is the parent */
{
/* Open a pipe, convert read handle number to ASCII.
* Write a value to the pipe that the child process
* will use as its return code.
*/
if (_pipe(handles,256,O_BINARY) == -1)
{
perror("Parent&colon. unable to create pipe");
exit(1);
}
sprintf(asc_handle,"%d",handles[0]);
DDCHelp Hilfe zur Programmiersprache C Seite 591 von 606
retcode = 10;
if (write(handles[1],&.retcode,sizeof(retcode)) < 0)
{
perror("Parent&colon. unable to write to pipe");
exit(1);
}
/* Call ourself with read handle as argument.
*/
if ((pid = spawnl(P_NOWAIT, argv[0], argv[0],
asc_handle, NULL)) == -1)
perror("Parent&colon. spawnl failed");
else
{
printf("Parent&colon. spawned child process %d\n",pid);
if (wait(&.stat) != pid)
perror("Parent&colon. wait failure");
else
{
if ((stat &. 0xff) == 0)
printf("Parent&colon. child returned %d\n", stat >>
8);
else
printf("Parent&colon. child terminated
abnormally\n");
}
}
close(handles[0]);
close(handles[1]);
exit(0);
}
}
/* send Beispiel */
/*
There are two short programs here. SEND spawns a child
process, RECEIVE. Each process holds one end of a
pipe. The parent transmits its command-line argument
to the child, which prints the string and exits.
IMPORTANT: The parent process must be linked with
the \32bit\fileinfo.obj file. The code in fileinfo
enables a parent to share handles with a child.
Without this extra information, the child cannot use
the handle it receives.
*/
/* SEND */
#include <fcntl.h> // _pipe()
#include <io.h> // write()
#include <process.h> // spawnl() cwait()
#include <stdio.h> // puts() perror()
#include <stdlib.h> // itoa()
#include <string.h> // strlen()
#define DECIMAL_RADIX 10 // for atoi()
enum PIPE_HANDLES { IN, OUT }; // to index the array of handles
int main(int argc, char *argv[])
DDCHelp Hilfe zur Programmiersprache C Seite 592 von 606
{
int handles[2]; // in- and
//outbound pipe handles
char handleStr[10]; // a handle
//stored as a string
int pid;
// system's ID for child process
if (argc <= 1)
{
puts("No message to send.");
return(1);
}
if (_pipe(handles, 256, O_TEXT) != 0)
{
perror("Cannot create the pipe");
return(1);
}
// store handle as a string for passing on the command line
itoa(handles[IN], handleStr, DECIMAL_RADIX);
// create the child process, passing it the inbound pipe handle
spawnl(P_NOWAIT, "receive.exe", "receive.exe", handleStr, NULL);
// transmit the message
write(handles[OUT], argv[1], strlen(argv[1])+1);
// when done with the pipe, close both handles
close(handles[IN]);
close(handles[OUT]);
// wait for the child to finish
wait(NULL);
return(0);
}
/* _setcursortype Beispiel */
#include <conio.h>
int main( )
{
// tell the user what to do
clrscr();
cputs("Press any key three times.\n\r");
cputs("Each time the cursor will change shape.\n\r");
gotoxy(1,5); // show a solid cursor
cputs("Now the cursor is solid.\n\r");
_setcursortype(_SOLIDCURSOR);
while(!kbhit()) {}; // wait to proceed
getch();
gotoxy(1,5); // remove the cursor
cputs("Now the cursor is gone.");
clreol();
gotoxy(1,6);
DDCHelp Hilfe zur Programmiersprache C Seite 593 von 606
_setcursortype(_NOCURSOR);
while(!kbhit()) {}; // wait to proceed
getch();
gotoxy(1,5); // show a normal cursor
cputs("Now the cursor is normal.");
clreol();
gotoxy(1,6);
_setcursortype(_NORMALCURSOR);
while(!kbhit()) {}; // wait to proceed
getch();
clrscr();
return(0);
}
/* _dos_commit Beispiel */
#include <dos.h>
#include <errno.h>
#include <conio.h>
void main(void)
{
char save[] = "to disk.",
prompt[] = " File exist,overwrite?[y/n]",
err[] = "Error occured. ",
newline[] = "\n\r";
int handle, ch;
unsigned count;
/* Open file and create and overwrite it */
if (_dos_createnew( "DUMMY.FIL",_A_NORMAL, &handle) !=0)
{
if (errno == EEXIST)
{
/* Use _dos_write to display prompts*/
_dos_write (1, prompt, sizeof( prompt ) -1, &count );
ch = bdos( 1, 0, 0) & 0x00ff;
if ( (ch == 'y') || (ch == 'Y') )
_dos_creat( "DUMMY.FIL", _A_NORMAL, &handle);
_dos_write( 1,newline, sizeof( newline) -1, &count);
}
}
/* Write to file; output passes through operating system's buffer*/
if ( _dos_write( handle, save, sizeof( save ),&count) != 0 )
{
_dos_write( 1, err, sizeof( err) - 1, &count );
_dos_write( 1, newline, sizeof( newline ) -1, &count );
}
/* Write directly to file with no intermediate buffering */
if ( _dos_commit( handle ) != 0 )
DDCHelp Hilfe zur Programmiersprache C Seite 594 von 606
{
_dos_write( 1, err, sizeof(err) -1, &count);
_dos_write( 1, newline, sizeof( newline ) - 1 , &count);
}
/* Close file */
if (_dos_close( handle ) != 0)
{
_dos_write( 1, err, sizeof(err) -1, &count );
_dos_write( 1, newline, sizeof(newline) -1, &count );
}
}
/* _expand Beispiel */
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void main(void)
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *) calloc(512, sizeof( char ) )) == NULL)
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize ( bufchar ), (void __far *)bufchar );
if ((bufchar = (char *) _expand (bufchar, 1024)) == NULL)
printf ("can not expand");
else
printf (" Expanded block to %d bytes at %Fp\n",
_msize( bufchar ) , (void __far *)bufchar );
/* free memory */
free( bufchar );
exit (0);
}
/* _get_osfhandle and _open_osfhandle Beispiel */
#include <windowsx.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
#ifndef __FLAT__
#error This example must be compiled using 32 bit compiler
#endif
//example for _get_osfhandle() and _open_osfhandle()
BOOL InitApplication(HINSTANCE hInstance);
HWND InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
example_get_osfhandle(HWND hWnd);
#pragma argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
DDCHelp Hilfe zur Programmiersprache C Seite 595 von 606
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; // message
if (!InitApplication(hInstance)) // Initialize shared things
return (FALSE); // Exits if unable to initialize
/* Perform initializations that apply to a specific instance */
if (!(InitInstance(hInstance, nCmdShow)))
return (FALSE);
/* Acquire and dispatch messages until a WM_QUIT message is received.
*/
while (GetMessage(&msg, // message structure
NULL, // handle of window receiving the message
NULL, // lowest message to examine
NULL)) // highest message to examine
{
TranslateMessage(&msg); // Translates virtual key codes
DispatchMessage(&msg); // Dispatches message to window
}
return (msg.wParam); // Returns the value from PostQuitMessage
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
// Fill in window class structure with parameters that describe the
// main window.
wc.style = CS_HREDRAW | CS_VREDRAW; // Class style(s).
wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int,
long ))MainWndProc; // Function to retrieve messages for
// windows of this class.
wc.cbClsExtra = 0; // No per-class extra data.
wc.cbWndExtra = 0; // No per-window extra data.
wc.hInstance = hInstance; // Application that owns the class.
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // Name of menu resource in .RC file.
wc.lpszClassName = "example"; // Name used in call to CreateWindow.
/* Register the window class and return success/failure code. */
return (RegisterClass(&wc));
}
HWND InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; // Main window handle.
/* Create a main window for this application instance. */
hWnd = CreateWindow(
"example", // See RegisterClass() call.
DDCHelp Hilfe zur Programmiersprache C Seite 596 von 606
"example _get_osfhandle _open_osfhandle (32 bit)", // Text for window
title bar.
WS_OVERLAPPEDWINDOW, // Window style.
CW_USEDEFAULT, // Default horizontal position.
CW_USEDEFAULT, // Default vertical position.
CW_USEDEFAULT, // Default width.
CW_USEDEFAULT, // Default height.
NULL, // Overlapped windows have no parent.
NULL, // Use the window class menu.
hInstance, // This instance owns this window.
NULL // Pointer not needed.
);
/* If window could not be created, return "failure" */
if (!hWnd)
return (FALSE);
/* Make the window visible; update its client area; and return
"success" */
ShowWindow(hWnd, nCmdShow); // Show the window
UpdateWindow(hWnd); // Sends WM_PAINT message
return (hWnd); // Returns the value from PostQuitMessage
}
#pragma argsused
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
example_get_osfhandle(hWnd);
return NULL;
}
case WM_QUIT:
case WM_DESTROY: // message: window being destroyed
PostQuitMessage(0);
break;
default: // Passes it on if unproccessed
return (DefWindowProc(hWnd, message, wParam, lParam));
}
}
example_get_osfhandle(HWND hWnd)
{
long osfHandle;
char str[128];
int fHandle = open("file1.c", O_CREAT|O_TEXT);
if(fHandle != -1)
{
osfHandle = _get_osfhandle(fHandle);
sprintf(str, "file handle = %lx OS file handle = %lx", fHandle,
osfHandle);
MessageBox(hWnd,str,"_get_osfhandle",MB_OK|MB_ICONINFORMATION);
close(fHandle);
fHandle = _open_osfhandle(osfHandle, O_TEXT );
DDCHelp Hilfe zur Programmiersprache C Seite 597 von 606
sprintf(str, "file handle = %lx OS file handle = %lx", fHandle,
osfHandle);
MessageBox(hWnd,str,"_open_osfhandle",MB_OK|MB_ICONINFORMATION);
close(fHandle);
}
else
MessageBox(hWnd,"File Open Error","WARNING",MB_OK|MB_ICONSTOP);
close(fHandle);
return 0;
}
/* _heapset Beispiel */
#include <windowsx.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#ifndef __FLAT__
#error This example must be compiled using 32 bit compiler
#endif
BOOL InitApplication(HINSTANCE hInstance);
HWND InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void ExampleHeapSet(HWND hWnd);
#pragma argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; // message
if (!InitApplication(hInstance)) // Initialize shared things
return (FALSE); // Exits if unable to initialize
/* Perform initializations that apply to a specific instance */
if (!(InitInstance(hInstance, nCmdShow)))
return (FALSE);
/* Acquire and dispatch messages until a WM_QUIT message is received.
*/
while (GetMessage(&msg, // message structure
NULL, // handle of window receiving the message
NULL, // lowest message to examine
NULL)) // highest message to examine
{
TranslateMessage(&msg); // Translates virtual key codes
DispatchMessage(&msg); // Dispatches message to window
}
return (msg.wParam); // Returns the value from PostQuitMessage
}
BOOL InitApplication(HINSTANCE hInstance)
{
DDCHelp Hilfe zur Programmiersprache C Seite 598 von 606
WNDCLASS wc;
// Fill in window class structure with parameters that describe the
// main window.
wc.style = CS_HREDRAW | CS_VREDRAW; // Class style(s).
wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int,
long ))MainWndProc; // Function to retrieve messages for
// windows of this class.
wc.cbClsExtra = 0; // No per-class extra data.
wc.cbWndExtra = 0; // No per-window extra data.
wc.hInstance = hInstance; // Application that owns the class.
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // Name of menu resource in .RC file.
wc.lpszClassName = "Example"; // Name used in call to CreateWindow.
/* Register the window class and return success/failure code. */
return (RegisterClass(&wc));
}
HWND InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; // Main window handle.
/* Create a main window for this application instance. */
hWnd = CreateWindow(
"Example", // See RegisterClass() call.
"Example _heapset 32 bit only", // Text for window title bar.
WS_OVERLAPPEDWINDOW, // Window style.
CW_USEDEFAULT, // Default horizontal position.
CW_USEDEFAULT, // Default vertical position.
CW_USEDEFAULT, // Default width.
CW_USEDEFAULT, // Default height.
NULL, // Overlapped windows have no parent.
NULL, // Use the window class menu.
hInstance, // This instance owns this window.
NULL // Pointer not needed.
);
/* If window could not be created, return "failure" */
if (!hWnd)
return (FALSE);
/* Make the window visible; update its client area; and return
"success" */
ShowWindow(hWnd, nCmdShow); // Show the window
UpdateWindow(hWnd); // Sends WM_PAINT message
return (hWnd); // Returns the value from PostQuitMessage
}
void ExampleHeapSet(HWND hWnd)
{
int hsts;
char *buffer;
if ( (buffer = (char *)malloc( 1 )) == NULL )
DDCHelp Hilfe zur Programmiersprache C Seite 599 von 606
exit(0);
hsts = _heapset( 'Z' );
switch (hsts)
{
case _HEAPOK:
MessageBox(hWnd,"Heap is OK","Heap",MB_OK|MB_ICONINFORMATION);
break;
case _HEAPEMPTY:
MessageBox(hWnd,"Heap is empty","Heap",MB_OK|MB_ICONINFORMATION);
break;
case _HEAPBADNODE:
MessageBox(hWnd,"Bad node in
heap","Heap",MB_OK|MB_ICONINFORMATION);
break;
default:
break;
}
free (buffer);
}
#pragma argsused
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_CREATE:
{
//Example _heapset
ExampleHeapSet(hWnd);
return NULL;
}
case WM_QUIT:
case WM_DESTROY: // message: window being destroyed
PostQuitMessage(0);
break;
default: // Passes it on if unproccessed
return (DefWindowProc(hWnd, message, wParam, lParam));
}
}
/* _searchstr Beispiel */
#include <stdio.h>
#include <stdlib.h>
char buf[_MAX_PATH];
int main(void)
{
/* look for TLINK.EXE */
_searchstr("TLINK.EXE", "PATH", buf);
if (buf[0] == '\0')
printf ("TLINK.EXE not found\n");
else
printf ("TLINK.EXE found in %s\n", buf);
DDCHelp Hilfe zur Programmiersprache C Seite 600 von 606
return 0;
}
/* _popen and _pclose Beispiel */
/* this program initiates a child process to run the dir command
and pipes the directory listing from the child to the parent.
*/
#include <stdio.h> // popen() pclose() feof() fgets() puts()
#include <string.h> // strlen()
int main( )
{
FILE* handle; // handle to one end of pipe
char message[256]; // buffer for text passed through pipe
int status; // function return value
// open a pipe to receive text from a process running "DIR"
handle = _popen("dir /b", "rt");
if (handle == NULL)
{
perror("_popen error");
}
// read and display input received from the child process
while (fgets(message, sizeof(message), handle))
{
fprintf(stdout, message);
}
// close the pipe and check the return status
status = _pclose(handle);
if (status == -1)
{
perror("_pclose error");
}
return(0);
}
/* wctomb Beispiel */
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int x;
wchar_t wc = L'a';
char *pmbNULL = NULL;
char *pmb = (char *)malloc(sizeof( char ));
printf (" Convert a wchar_t array into a multibyte string:\n");
x = wctomb( pmb, wc);
printf ("Character converted: %u\n", x);
printf ("Multibyte string: %1s\n\n",pmb);
printf (" Convert when target is NULL\n");
DDCHelp Hilfe zur Programmiersprache C Seite 601 von 606
x = wctomb( pmbNULL, wc);
printf ("Character converted: %u\n",x);
printf ("Multibyte stri ng: %1s\n\n",pmbNULL);
}
/* wcstombs Beispiel */
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int x;
char *pbuf = (char*)malloc( MB_CUR_MAX);
wchar_t *pwcsEOL = L'\0';
char *pwchi= L"Hi there!";
printf (" Convert entire wchar string into a multibyte string:\n");
x = wcstombs( pbuf, pwchi,MB_CUR_MAX);
printf ("Character converted: %u\n", x);
printf ("Multibyte string character: %1s\n\n",pbuf);
printf (" Convert when target is NULL\n");
x = wcstombs( pbuf, pwcsEOL, MB_CUR_MAX);
printf ("Character converted: %u\n",x);
printf ("Multibyte string: %1s\n\n",pbuf);
}
DDCHelp Hilfe zur Programmiersprache C Seite 602 von 606
Stichwortverzeichnis
—a—
- 105
——
-- 103
—#—
## 34 #define 24, 34 #error 25 #include 27 #pragma 28, 29, 30, 31, 32 #undef 33
—%—
%= 96
—&—
&= 96
—(—
( ) 99 () 101
—*—
*= 96
—,—
, 98
—.—
. 99, 102
—/—
/= 96
—:—
: 107
—[—
[ ] 99
—^—
^= 96
—_—
__throwExceptionName 45 _= 96 _bios_equiplist 160 _crotl 180 _crotr 180 _daylight 38 _defs.h 132 _disable 184 _dos_findfirst 188 _dos_findnext 189 _dos_getdate 190 _dos_getdiskfree 191 _dos_getftime 193 _dos_setdate 190 _dos_setftime 193 _environ 38 _exit 205 _expand 207 _EXPCLASS 132 _EXPDATA 132 _EXPFUNC 132 _fmemchr 290 _fmemcmp 291 _fmemcpy 291 _fmemicmp 292 _fmemset 293 _fmode 42 _fstrchr 372 _fstrcspn 375 _fstrdup 376 _fstrlwr 381 _fstrncat 381 _fstrncmp 382 _fstrnicmp 383 _fstrnset 384 _fstrrchr 384 _fstrrev 385 _fstrset 385 _fstrspn 386 _fstrtok 388 _fstrupr 390 _heapmin 259 _heapset 259
DDCHelp Hilfe zur Programmiersprache C Seite 603 von 606
_IS_CTL 68 _IS_DIG 68 _IS_HEX 68 _IS_LOW 68 _IS_PUN 68 _IS_SP 68 _IS_UPP 68 _osversion 44 _popen 309 _RTLENTRY 132 _searchenv 348 _searchstr 349 _setcursortype 351 _strdate 375 _strerror 376 _strtime 386 _sys_nerr 41 _threadid 46 _toupper 401 _tzname 46 _USERENTRY 132
—{—
{ } 99
—+—
+ 105 ++ 103 += 96
—<—
<<= 96
—=—
= 96, 108
—>—
-> 99, 102 >>= 96
—8—
8086 139 8086-spezifische Aufrufe 114
—A—
Ablaufsteuerung 78, 79, 82, 87 alloc.h 110 Alphazeichen 136, 142 Anweisung mit Label 82 Argumente 146 Aufrufkonventionen 132 Ausgabe (formatiert) 176
Ausgabe auf Bildschirm (String) 176
—B—
beenden: Programm 205 Berechnungen 142 Betriebssystem 44 Bezeichner 61 Bibliotheksroutinen 136, 139, 142, 146 Bibliotheksroutinen-Fehler 41 Binärmodus 42 BIOS 139 biostime 161 BITSPERBYTE 73
—C—
char 85 codeseg 29 conio.h 111 continue 78 country 175 cprintf 176 cputs 176 creat 177 creatnew 178 creattemp 179 cscanf 180 ctime 181 ctrlbrk 182 cwait 182
—D—
Datei (Datumseintrag) 193 Datei (Zeiteintrag) 193 Datei erzeugen 129, 177, 178 Datei öffnen 129 Datei überschreiben 177 Dateidatum 247 Datei-Information 135 Dateimodus 42 Dateisteuerblock 49 Dateizeit 247 Datentypen 126 Datum 181, 190 Datum (Datei) 193, 247 Datumformat 175 Datumsvariable 38 daylight 38 default 78 define 34 defines 24 delline 183 difftime 184 dir.h 113 directives 29 Direktiven 24, 25, 27, 28, 30, 32, 33 disable 184 Disk Transfer Address 245 do...while-Schleife 79 DOS 114, 139 dos.h 114 double 79
DDCHelp Hilfe zur Programmiersprache C Seite 604 von 606
DTA 245
—E—
Ein-/Ausgabe 119 Ein-/Ausgabe-Manipulatoren 119 Ein-/Ausgabe-Routinen 111 Ein-/Ausgaberoutinen des Betriebssystems 111 eindeutige Dateien (erzeugen) 179 Eingaben aus Streams 230 enable _enable 184 environ 38 Environment 246 errno 74 error 25 erzeugen: Datei 177, 178, 179 Exception 45 Exception-Name 45 execl 123 exit 205 Exit-Funktionen 84 exp 206 expl 206 Exponentialfunktion 206 extern 81 Externe Funktionen 81
—F—
FA_ARCH 66 FA_DIREC 66 FA_HIDDEN 66 FA_LABEL 66 FA_RDONLY 66 FA_SYSTEM 66 farcalloc 208 FAR-Heap (Speicher reservieren) 208 FAT 246, 247 Fehler 41 FILE 49 File Allocation Table 246, 247 float 81 float.h 118 flushall 220 fnmerge 221 fnsplit 65 formatieren: Tastatureingaben 180 formatierte Eingabe aus Stream 230 freier Platz auf Diskette/Festplatte 191 fscanf 230 ftime 38 Funktionen 136, 139, 142, 146 Funktionsparameter 131
—G—
getdate 190 getdta 245 getenv 246 getfat 246 getfatd 247 getftime 247 Gleitkomma 136, 142 Gleitkommadaten 81
Gleitkomma-Routinen 118 Globale Datenstrukturen 48 Globale Variablen 36, 38, 41, 42, 44, 45, 46 goto 82 Größe von Speicherobjekten 50
—H—
Hauptspeicher 122 hdrfile 30 Heap-Block (Größe) 207 heapcheckfree 257 heapwalk 259
—I—
include 27 int 83, 85 Integers 136 Integerwerte 142 Internationalisierung 120 Interpunktionszeichen 106 Interrupts 184 intrinsic 31 intrinsic-Ffunktionen 31 iomanip.h 119 isalnum 268 isatty 269 isgraph 270 ispunct 271 isxdigit 272
—K—
Kindprozesse 182 konvertieren: Datum in String 181 konvertieren: Zeit in String 181 Konvertierung 136 Konvertierungen 142
—L—
L_ctermid 72 Länder 120 Landesspezifische Daten 175 Lange Zahlentypen 136, 142 Laufzeitbibliotheken 136, 139, 142, 146 lesen: Stream-Eingaben 230 lesen: Tastatureingaben 180 links rotieren (char) 180 locale.h 120 localtime 38 long 79, 85 LONG_MAX 70 LONG_MIN 70 löschen: Zeile 183
—M—
M_E 71 M_LN10 71
DDCHelp Hilfe zur Programmiersprache C Seite 605 von 606
M_LN2 71 M_LOG10E 71 M_LOG2E 71 main 133, 135 Makros 34, 126 Manipulatoren 119 Math 142 mem.h 122 memchr 290 memcmp 291 memcpy 291 memicmp 292 memmove 292 memset 293 min 293 MK_FP 294 mkdir 294 mktemp 295
—N—
NDEBUG 70
—O—
OPEN_MAX 72 Operatoren 96, 98, 99
—P—
Parameter 34 Parametertypen 91 Parameterübergabe 91 Parametrisierte Manipulatoren 119 Pfad (aus Komponenten) 221 Pfadangaben 113 Pfadnamen erzeugen 221 Postfix-Operatoren 99 pow 310 pow10 311 pow10l 311 powl 310 pragma 28, 29, 30, 31, 32 Präprozessor-Direktiven 88 printf 311, 312, 314, 317 process.h 123 Programm beenden 205 Programmstartfunktionen 133, 135 Prozeßablaufsteuerung 78, 79, 82, 87 Prozeßende (warten auf) 182 Pseudovariablen 92 putc 320
—R—
rechts rotieren (char) 180 Register 91, 92 return 84 Rücksprunganweisungen 84
—S—
saveregs 32 scanf 341, 343, 345, 346, 347 Schleifen 78, 79, 82 Schnittstelle 139 searchpath 348 segread 350 setbuf 350 setcbrk 351 setdate 190 setftime 247 share.h 125 short 85 SIG_DFL 63 SIG_ERR 63 SIG_IGN 63 signed 85 size_t 50 sizeof 86 Sommerzeit 38 Sortierungsroutinen 127 spawnl 123 Speicher 110 Speicher (FAR-Heap) 208 Speicherbearbeitungsfunktionen 122 Speicherblock (Heap) 207 Speicherverwaltung 110 Sprachen 120 static 86 stdaux 64 stddef.h 126 stderr 64 stdin 64 stdlib.h 127 stdout 64 stdprn 64 strchr 372 strcmp 373 strcmpi 373 strcoll 374 strcpy 374 strcspn 375 strdup 376 Stream-Eingaben lesen 230 Stream-Klassen 119 Stream-Puffer schreiben 220 Streams (alle Puffer leeren) 220 strerror 377 strftime 377, 378, 379 Strg-Untbr-Handler 182 String 181 String aus Environment lesen 246 strlwr 381 strncat 381 strncmp 382 strncmpi 382 strnicmp 383 strnset 384 strrchr 384 strrev 385 strset 385 strspn 386 strtok 388 strtol 388 strtoul 389 struct 86 Strukturen 48, 86
DDCHelp Hilfe zur Programmiersprache C Seite 606 von 606
strupr 390 strxfrm 390 suchen: im Verzeichnis 188, 189 Suchroutinen 127 swab 391 switch 87 sys.h 129 sys_errlist 41 SYS_MAX 72 sys_nerr 41 Systemausrüstung 160 Systemdatum 190 Systemuhr 161
—T—
tan 392 tanh 393 tanhl 393 tanl 392 Tastatureingaben 180 tell 393 tempnam 394 textattr 395 textbackground 396 Textbildschirmein- bzw. -ausgaberoutinen 111 textcolor 397 Textfenster-Zeile löschen 183 textmode 398 Textmodus 42 Thread-ID 46 Threads 46 time 399 time.h 130 time_t 51 tmpfile 399 tmpnam 400 toascii 400 Token 35 Token verschmelzen 34, 35 Trennzeichen 106 Typ für Wide-Character-Konstanten 51 Typ für Zeitwerte 51 typedef 88 tzname 46 tzset 38
—Ü—
Übergabe von Datei-Information 135 Übersetzungsmodus 42
—U—
UCHAR_MAX 69 UINT_MAX 69 ULONG_MAX 69 Umgebungsvariable 246 Umgebungsvariablen 38 Umwandlungsroutinen 127 undef 33 unsigned char-Wert rotieren 180 untergeordnete Prozesse 135 USHRT_MAX 69
—V—
varargs.h 131 Variablen 36, 38, 41, 42, 44, 45, 46, 86, 146 Variablendeklarationen 86, 92 vergößern: Heap-Block 207 verkleinern: Heap-Block 207 Verzeichnisse 113 Verzeichnissuche 188, 189 Verzweigungen 78, 87 Vordefinierte Bezeichner 61, 63, 64, 66, 68, 69, 70,
71, 72, 73, 74
—W—
Währungsformat 175 warten: auf Prozeßende 182 wchar_t 51 wctomb 414 Wiederholungszähler 50 winmain 133, 135
—Z—
Zeile löschen 183 Zeit 181, 184 Zeit (Datei) 193, 247 Zeit lesen 161 Zeit setzen 161 Zeitdifferenz 184 Zeitformat 175 Zeitumwandlung 130 Zeitvariable 38 Zeitzone 46 Zugriff auf Dateien 125 Zuweisungsoperatoren 96