Inhalt · int86 257 int86x 258 intdos 259 intdosx 260 intr 260 ioctl 261 isalnum 262 isalpha 262...

606
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

Transcript of Inhalt · int86 257 int86x 258 intdos 259 intdosx 260 intr 260 ioctl 261 isalnum 262 isalpha 262...

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, &regs, &regs);

}

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(&regs, &regs);

/* 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(&regs, &regs, &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 = &ll;

/* 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, &reg);

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],&times) != 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], &amp.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],&amp.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(&amp.stat) != pid)

perror("Parent&colon. wait failure");

else

{

if ((stat &amp. 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