ebook img

The tomes of Kylix--the Linux API PDF

561 Pages·2002·5.25 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview The tomes of Kylix--the Linux API

Y L F M A E T Team-Fly® The Tomes of Kylix ™ The Linux API ® Glenn Stephens Wordware Publishing, Inc. LibraryofCongressCataloging-in-PublicationData Stephens,Glenn ThetomesofKylix:theLinuxAPI/byGlennThomasStephens. p. cm. Includesbibliographicalreferencesandindex. ISBN 1-55622-823-6(pbk.) 1. Applicationsoftware. 2. Kylix. 3. Linux. I. Title. QA76.76.A65S762002 005.2’82--dc21 2001057353 CIP ©2002,WordwarePublishing,Inc. AllRightsReserved 2320LosRiosBoulevard Plano,Texas75074 Nopartofthisbookmaybereproducedinanyformorbyanymeans withoutpermissioninwritingfromWordwarePublishing,Inc. PrintedintheUnitedStatesofAmerica ISBN1-55622-823-6 10 9 8 7 6 5 4 3 2 1 0111 KylixisatrademarkofBorlandSoftwareCorporation. LinuxisaregisteredtrademarkofLinusTorvalds. Other product names mentioned are used for identification purposes only and may be trademarks of their respective companies. AllinquiriesforvolumepurchasesofthisbookshouldbeaddressedtoWordwarePublishing,Inc.,attheabove address.Telephoneinquiriesmaybemadebycalling: (972)423-0090 Contents Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv AbouttheAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Chapter1 ALinuxAPIPrimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 LinuxHistory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Applications—WhatDevelopersDo. . . . . . . . . . . . . . . . . . . . . . . . . . 2 IntroducingtheLinuxAPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 WhatisKylix?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 WhatWindowsHasThatLinuxDoesn’tandViceVersa. . . . . . . . . . . . . . . . 7 Chapter2 LinuxAPIErrors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 DealingwithLinuxAPIErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 SignalsasErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 LinuxAPIErrorFunctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 errno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 __errno_location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 perror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 strerror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 LinuxAPIErrorCodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ErrorsareNotExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Chapter3 LinuxInputandOutput . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 FileDescriptorsandStreams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 InputandOutputMethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 OpeningandClosingFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 ReadingandWritingFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 StandardInput,StandardOutput,andStandardError. . . . . . . . . . . . . . . . . 33 ConvertingFileDescriptorstoFileStreamsandViceVersa . . . . . . . . . . . . . 34 TransferringHandlesbetweenKylixandtheAPIReference. . . . . . . . . . . . . 35 ConvertingaFileDescriptorintoaStream . . . . . . . . . . . . . . . . . . . . . . 36 FilePermissionsandOwnership. . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 GettingInformationandAttributesaboutaFile. . . . . . . . . . . . . . . . . . . . 42 ScanningFilesinaDirectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 WorkingwithBuffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 FileOperations(Renaming,Copying). . . . . . . . . . . . . . . . . . . . . . . . . 46 TheioctlFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 CreatingLinks(ShortcutsforLinux) . . . . . . . . . . . . . . . . . . . . . . . . . 48 FileConventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 UnlockedFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 iii iv (cid:1) Contents varargs—ANewDeclarationforKylix . . . . . . . . . . . . . . . . . . . . . . . 49 FileErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 APIReference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 __chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 __close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 __mkdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 __read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 __rename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 __truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 __write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 alphasort,alphasort64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 chmod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 clearerr,clearerr_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 closedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 creat,creat64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 dirfd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 fchmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 fclean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 fclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 fcloseall. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 fcntl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 fdopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 feof,feof_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ferror,ferror_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 fflush,fflush_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 fgetc,fgetc_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 fgetpos,fgetpos64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 fgets,fgets_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 fileno,fileno_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 fopen,fopen64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 fprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 fputc,fputc_unlocked,putc . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 fputs,fputs_unlocked. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 fread,fread_unlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 freopen,freopen64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 fseek,fseeko,fseeko64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 fsetpos,fsetpos64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 fstat,fstat64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 ftell,ftello,ftello64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 fwrite,fwrite_unlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 get_current_dir_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 getc,getc_unlocked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 getcwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 getdelim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 getline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 getw. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 getwd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ioctl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 (cid:1) v Contents lseek,lseek64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 lstat,lstat64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 open,open64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 open_memstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 opendir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 pread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 putw. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 pwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 readdir,readdir64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 rewind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 rewinddir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 scandir,scandir64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 seekdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 setbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 setbuffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 setlinebuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 setvbuf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 stat,stat64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 telldir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 tempnam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 tmpfile,tmpfile64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 tmpnam,tmpnam_r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 ungetc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 versionsort,versionsort64. . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 PracticalExample—AdBaseIIIFileReader . . . . . . . . . . . . . . . . . . 122 WheretoGofromHere. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Chapter4 Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 WhatisaProcess? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 GatheringInformationaboutaProcessunderLinux. . . . . . . . . . . . . . . . . 134 ProcessesandLinuxEnvironmentVariables. . . . . . . . . . . . . . . . . . . . . 136 AnEnvironmentExample. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 ForkingProcesses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 MakingUseoftheForkedProcess . . . . . . . . . . . . . . . . . . . . . . . . 142 ProcessGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 WaitingonOtherProcesses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 TerminatingaProcess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 ExecutingLinuxCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 UsingtheexecFunctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 EnumeratingUsersandGroupsfromwithinCode. . . . . . . . . . . . . . . . . . 153 RunningNormalAppswithPermissionoftheApp’sOwner . . . . . . . . . . . . 156 CreatingDaemonsforLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 APIReference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 __secure_getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 clearenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 vi (cid:1) Contents endgrent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 endpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 execl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 execle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 execlp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 execv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 execve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 execvp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 fexecve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 getegid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 geteuid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 getgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 getgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 getgrgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 getgrnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 getgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 getpgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 getpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 getpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 getppid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 getpwent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 getpwnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 getpwuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 getuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 group_member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 putenv. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 setegid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 setenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 seteuid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 setgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 setgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 setpgid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 setpgrp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 setpwent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 setregid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 setreuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 setuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 system. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 unsetenv. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 vfork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 wait3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 wait4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 waitpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 APracticalLookatProcesses—AServerHealthCheck. . . . . . . . . . . . . . 205 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 (cid:1) vii Contents Chapter5 InterprocessCommunication(IPC) . . . . . . . . . . . . . . . . . . . . . 211 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 TheNeedtoCommunicatebetweenProcesses. . . . . . . . . . . . . . . . . . . . 211 WhatMethodsareAvailabletoUs? . . . . . . . . . . . . . . . . . . . . . . . . . 212 AnIn-depthLookattheCommunicationMethods . . . . . . . . . . . . . . . . . 215 Signals—WhatareThey? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 CatchingaSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 SendingaSignaltoAnotherProcess. . . . . . . . . . . . . . . . . . . . . . 217 UsingSignalSets—The“Reliable”Method . . . . . . . . . . . . . . . . . 218 BlockingSignals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 UsingSignalswithinKylixApplications. . . . . . . . . . . . . . . . . . . . 223 ProgrammingPipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 NamedPipes—ABetterAlternative. . . . . . . . . . . . . . . . . . . . . . . 229 MessageQueues—ABetterWay . . . . . . . . . . . . . . . . . . . . . . . . 233 Semaphores—CommunicatingOperationStatusBetweenProcesses . . . . . 240 ProgrammingSemaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 SharedMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 ProgrammingSharedMemory . . . . . . . . . . . . . . . . . . . . . . . . . 246 UsingSemaphoreswithSharedMemory. . . . . . . . . . . . . . . . . . . . 248 CreatingUniqueIPCKeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 WhichMethodsWorkBestforDifferentKindsofApplications . . . . . . . . . . 254 APIReference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 __raise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 kill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 killpg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 mkfifo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 msgctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 msgget. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 msgrcv. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 msgsnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 pclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 popen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 psignal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 semctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 semget. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 semop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 shmat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 shmctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 shmdt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 shmget. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 sigaction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 sigaddset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 sigandset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 sigdelset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 sigemptyset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 viii (cid:1) Contents sigfillset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 siggetmask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 sighold. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 sigignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 sigisemptyset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 sigismember. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 sigorset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 __sigpause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 sigpending. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 sigprocmask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 sigrelse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 sigset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 sigsuspend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 sigwait. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 strsignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 sigtimedwait. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 APracticalUse—AMessageQueueComponent . . . . . . . . . . . . . . . . . 295 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Chapter6 POSIXThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 WhatareThreads?—AnIntroduction. . . . . . . . . . . . . . . . . . . . . . . . 305 LinuxThreads—ThePOSIXStandardonLinux. . . . . . . . . . . . . . . . . 306 UnderstandingThreadswithinaKylixApplication . . . . . . . . . . . . . . . 306 ChoosingbetweenThreadsandProcesses . . . . . . . . . . . . . . . . . . . . . . 308 ErrorHandlingwiththePOSIXThreadFunctions . . . . . . . . . . . . . . . . . 309 ReentrantFunctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 CreatingThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 ThreadAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 WaitingforThreadstoFinish. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 KillingThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 SynchronizationMethodsUsingPOSIXThreads . . . . . . . . . . . . . . . . . . 319 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 ConditionVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 ListenCarefully,IShallSayThisOnlypthread_once . . . . . . . . . . . . . . 335 OtherSynchronizationMethods. . . . . . . . . . . . . . . . . . . . . . . . . . 336 Thread-SpecificData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 SignalsandThreads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 IntegratingwithCLX’sTThreadObject . . . . . . . . . . . . . . . . . . . . . . . 352 APIReference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 __pthread_initialize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 _pthread_cleanup_pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 _pthread_cleanup_pop_restore . . . . . . . . . . . . . . . . . . . . . . . . . 355 _pthread_cleanup_push. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 _pthread_cleanup_push_defer . . . . . . . . . . . . . . . . . . . . . . . . . 356 clone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 GetCurrentThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 (cid:1) ix Contents pthread_atfork. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 pthread_attr_destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 pthread_attr_getdetachstate. . . . . . . . . . . . . . . . . . . . . . . . . . . 361 pthread_attr_getguardsize. . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 pthread_attr_getinheritsched . . . . . . . . . . . . . . . . . . . . . . . . . . 362 pthread_attr_getschedparam . . . . . . . . . . . . . . . . . . . . . . . . . . 363 pthread_attr_getschedpolicy . . . . . . . . . . . . . . . . . . . . . . . . . . 364 pthread_attr_getscope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 pthread_attr_getstack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 pthread_attr_getstackaddr. . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 pthread_attr_getstacksize. . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 pthread_attr_init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 pthread_attr_setdetachstate. . . . . . . . . . . . . . . . . . . . . . . . . . . 368 pthread_attr_setguardsize. . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 pthread_attr_setinheritsched . . . . . . . . . . . . . . . . . . . . . . . . . . 369 pthread_attr_setschedparam . . . . . . . . . . . . . . . . . . . . . . . . . . 370 pthread_attr_setschedpolicy . . . . . . . . . . . . . . . . . . . . . . . . . . 371 pthread_attr_setscope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 pthread_attr_setstack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 pthread_attr_setstackaddr. . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 pthread_attr_setstacksize . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 pthread_barrier_destroy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 pthread_barrier_init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 pthread_barrier_wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 pthread_barrierattr_destroy. . . . . . . . . . . . . . . . . . . . . . . . . . . 376 pthread_barrierattr_getpshared . . . . . . . . . . . . . . . . . . . . . . . . . 377 pthread_barrierattr_init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 pthread_barrierattr_setpshared . . . . . . . . . . . . . . . . . . . . . . . . . 378 pthread_cancel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 pthread_cond_broadcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 pthread_cond_destroy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 pthread_cond_init. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 pthread_cond_signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 pthread_cond_timedwait . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 pthread_cond_wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 pthread_condattr_destroy. . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 pthread_condattr_getpshared . . . . . . . . . . . . . . . . . . . . . . . . . . 384 pthread_condattr_init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 pthread_condattr_setpshared . . . . . . . . . . . . . . . . . . . . . . . . . . 385 pthread_create. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 pthread_detach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 pthread_equal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 pthread_exit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 pthread_getschedparam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 pthread_getspecific . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 pthread_join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 pthread_key_create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 pthread_key_delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

Description:
From its simple beginnings, Linux has emerged as a powerful server operating system with a remarkable desktop environment and user interface. Now, with Kylix, Linux developers have a powerful rapid application development tool for generating client-side applications. The Tomes of Kylix: The Linux AP
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.