ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 5

                                      - 214 -
               
               
                
               Если  pathname не имеет расширения для имени файла или если
         оно не заканчивается точкой (.), тогда функция spawn устанавлива-
         ет расширение .EXE. Если pathname имеет расширение, то  использу-
         ется  только  это расширение. Если pathname заканчивается точкой,
         spawn  осуществляет  поиск  pathname  без  расширения.  Процедуры
         execlp, execlpe, execvpe осуществляют поиск для pathname (исполь-
         зуя те же процедуры) в директориях, определенных переменной окру-
         жения PATH.
               Аргументы  для  нового  процесса передаются как аргументы в
         вызове spawn, задавая один или  более  указателей  на  символьные
         строки.  Эти  символьные  строки  образуют  список аргументов для
         child-процесса. Общая длина строк, образующих  список  аргументов
         для  нового процесса, не может превышать 128 байтов. Нулевой сим-
         вол окончания '\0'для каждой строки в эту длину не засчитывается,
         а символы пробела (автоматически вставляемые для аргументов)-зас-
         читываются.
               Указатели аргументов могут передаваться как отдельные аргу-
         менты (в execl, execle, execlp, execlpe) или как массив  указате-
         лей  (в execv, execve, execvp, execvpe). По крайней мере один ар-
         гумент - arg0 или argv[0] - может передаваться к  child-процессу.
         По  условию  этот  аргумент  является  копией аргумента pathname.
         (Другое значение ошибки не вырабатывается).  В  версиях  MS  DOS,
         ранних от 3.0, передаваемое значение arg0 или argv[0] не доступно
         для использования в child-процессе. Однако, для версий MS DOS 3.0
         и старше pathname доступно через arg0 или argv[0].
               Вызовы  execl,  execle, execlp, execlpe обычно используются
         тогда, когда количество  аргументов  известно  заранее.  Аргумент
         arg0 обычно является указателем на pathname. Аргументы от arg1 до
         argn  являются указателями на символьные строки, образующие новый
         список аргументов. NULL-указатель, идущий за аргументом argn, оп-
         ределяет конец списка аргументов.
               Вызовы execv, execve, execvp, execvpe  используются,  когда
         число  аргументов для нового процесса является переменным. Указа-
         тели на аргументы пересылаются как массив argv. Аргумент  argv[0]
         обычно  является  указателем на pathname. Аргументы от argv[1] до
         argv[n] являются указателями на символьные строки, образующие но-
         вый список аргументов. Аргумент argv[n+1] может быть  NULL-указа-
         телем для определения конца списка аргументов.
               Файлы,  открытые при вызове spawn, остаются открытыми в но-
         вом процессе. В вызовах execl, execlp, execv, execvp,  child-про-
         цесс наследует окружение parent-процесса. Вызовы execle, execlpe,
         execve,  execvpe  позволяют  пользователю  изменять окружение для
         child-процесса, передавая список установленного  окружения  через
         аргумент envp.
               Аргумент envp является массивом символьных указателей, каж-
         дый  элемент  которого  (исключая последний элемент) указывает на
         строку, заканчивающуюся нулем и определяющую  переменную  окруже-
         ния. Обычно эта строка имеет форму:
               NAME = value,
               где NAME - имя переменной окружения, value - значение стро-
         ки, в которой устанавливается эта переменная. (Заметим, что value
         не заключается в кавычки "..."). Последним элементом массива envp
         должен быть NULL.
               Child-процесс наследует установленное окружение parent-про-
         цесса, когда envp является NULL.

                                      - 215 -
         
         

      
               Возвращаемое значение.
            
               Возвращаемое   значение   является   статусом   выхода   из
         child-процесса. Статус выхода равен 0, если процесс нормально за-
         вершен. Статус выхода устанавливается в ненулевое значение,  если
         child-процесс особым образом вызывает процедуру exit вместе с не-
         нулевым  аргументом.  Если статус не установлен, то положительный
         статус выхода указывает на непредвиденный выход из программы пос-
         редством abort или прерывания.
               Возвращаемое  значение   -1   свидетельствует   об   ошибке
         (child-процесс  не  стартовал), и errno устанавливается в одно из
         следующих значений:
         
         ЗНАЧЕНИЕ                         ЕГО СМЫСЛ
                           
         E2BIG                Список аргументов  превышает  128  байт
                              или    простраство,    требуемое    для
                              информации окружения,  превышает 32К.
                           
         EINVAL               Аргумент modeflag неверный.
                           
         ENOENT               Файл или path-имя не найдено.
                           
         ENOEXEC              Определенный файл не является выполимым
                              или имеет неверный формат.
                           
         ENOMEN               Достаточная  память  не  доступна   для
                              выполнения child-процесса.
            
               Замечание! Вызовы spawn не сохраняют  режим  преобразования
         для открытых файлов. Если child-процесс использует файлы, унасле-
         дованные  от parent-процесса, тогда процедура setmode применяется
         для установки требуемого режима преобразования для этих файлов.
               В child-процессе, созданном вызовами процедур  spawn,  сиг-
         нальные  установки не сохраняются. В child-процессе они переуста-
         навливаются по умолчанию.
            
               Cм. также abort, execl,  execle,  execlp,  execlpe,  execv,
         execve, execvp, execvpe, exit, _exit, onexit, system.
      
               Пример.
            
               #include 
               #include 
            
               extern char **environ;
            
               char *args[4];
               int result;
            
               args[0]="child";
               args[1]="one";
               args[2]="two";

                                      - 216 -
         
         
               args[3]=NULL;
               .
               .
               .
               /*  все  следующие  операторы  позволяют порождать процесс,
         названный "child.exe", и передавать ему три аргумента. Первые три
         аргумента приостанавливают parent-процесс, а последние три - свя-
         зывают parent-процесс с child */.
            
               result=spawnl(P_WAIT,"child.exe","child","one","two",
                   NULL);
               result=spawnle(P_WAIT,"child.exe","child","one",
                   "two", NULL, environ);
               result=spawnlp(P_WAIT, "child.exe","child","one",
                   "two", NULL);
               result=spawnv(P_OVERLAY, "child.exe", args);
               result=spawnve(P_OVERLAY, "child.exe", args, environ);
               result=spawnvp(P_OVERLAY, "child.exe", args);
      
            
               SPRINTF
            
               #include 
            
               int sprintf(buffer, format-string[, argument...]);
               char *buffer;              память для  хранения вывода
               char *format-string;       строка  управления форматом
            
               Описание.
            
               Функция sprintf форматирует и запоминает наборы символов  и
         значений  в buffer. Каждый аргумент argument (если он есть), пре-
         образуется и выводится согласно соответствующей спецификации фор-
         мата в format-string.
               Format-string состоит из порядковых символов и имеет ту  же
         самую  форму  и  функцию,  что аргумент format-string для функции
         printf. Смотрите функцию printf для описания format-string и  ар-
         гументов.
            
               Возвращаемое значение.
            
               Функция  sprintf возвращает количество символов, записанных
         в buffer.
               См. также fprintf, printf, sscanf.
            
               Пример.
            
               #include 
            
               char buffer[200];
               int i, j;
               double fp;
               char *s = "computer";
               char c;
               .

                                      - 217 -
         
         
               .
               .
            
               /*  форматирует и печатает различные данные */
            
               j = sprintf(buffer, "%s\n", s);
               j + = sprintf(buffer+j, "%c\n", c);
               j + = sprintf(buffer+j, "%d\n",i);
               j + = sprintf(buffer+j, "%f\n",fp);.
      
            
               SQRT
            
               #include 
            
               double sqrt(x);
               double x;         неотрицательное значение с плавающей
                                 точкой
            
               Описание.
            
               Функция sqrt вычисляет квадратный корень x.
            
               Возвращаемое значение.
            
               Функция sqrt возвращает  результат  вычисления  квадратного
         корня.  Если  x  -  отрицательное,  функция печатает сообщение об
         ошибке DOMAIN в stderr, устанавливает errno в EDOM  и  возвращает
         0.
               Обрaботкa  ошибок  может  быть модифицировaнa при изменении
         процедуры matherr.
               См. также exp, log, matherr, pow.
            
               Пример.
           
               #include 
               #include 
               double x,y,z;
                .
               .
               .
               if ((z = sqrt(x+y))==o.0)
               if((x+y) < 0.0)
                  perror("sqrt of a negative number");
      
            
               SRAND
            
               #include              требуется только   для
                                               объявления функции
            
               void srand(seed);
               unsigned seed;                  начальное   число  для
                                               генерации    случайных
                                               чисел.

                                      - 218 -
         
         
            
               Описание.
            
               Функция srand устанавливает начальную точку  для  генерации
         множества  псевдослучайных  целых.  В качестве аргумента seed для
         переустановки генератора используется 1.  Любое  другое  значение
         seed устанавливает генератор в начальную случайную точку.
               Функция  rand  используется для поиска сгенерированных слу-
         чайных чисел.
            
               Возвращаемое значение.
            
               Возвращаемого значения нет.
               См. также rand.
            
            
               Пример.
           
               #include 
               #include 
             
               int x, ranvals [20];
            
               /* устанавливает генератор случайных чисел в начальное сос-
         тояние и сохраняет в массиве 20 первых сгенерированных  случайных
         чисел. */
            
               srand(17);
               for (x = 0; x < 20; ranvals[x++] = rand())
                         ;.
      

               SSCANF
            
               #include 
            
               int sscanf(buffer, format-string[, argument...]);
               char *buffer;               хранимые данные
               char *format-string;        строка управления форматом
            
               Описание.
            
               Функция  sscanf читает данные из buffer в расположение, за-
         даваемое arguments. Каждый argument должен быть указателем на пе-
         ременную такого типа, которая соответствует типу, определннному в
         format-string.
               Format-string интерпретирует поля ввода и имеет ту же самую
         форму и функцию, что аргумент format-string  для  функции  scanf.
         Смотрите функцию scanf для описания format-string.
            
               Возвращаемое значение.
        
               Функция  sscanf возвращает количество успешно преобразован-
         ных и назначенных полей. В возвращаемом  значении  не  содержатся
         прочитанные но не назначенные поля. Значение EOF возвращается при

                                      - 219 -
         
         
         попытке считывания конца строки.Возвращаемое значение 0 означает,
         что нет назначенных полей.
               См. также fscanf, scanf, sprintf.
            
               Пример.
            
               #include 
               char *tokenstring = "15 12 14...";
               int i;
               float fp;
               char s[81];
               char c;
               .
                .
               .
               /* ввод различных данных */
            
               sscanf(tokenstring, "%s", s);
               sscanf(tokenstring, " %c", &c);
               sscanf(tokenstring, "%d", &i);
               sscanf(tokenstring, "%f", fp);.
            
               STACKAVAIL
            
               #include     требуется только для объявления
                                      функции
               unsigned int stackavail();
            
            
               Описание.
            
               Функция  stackavail возвращает приблизительный размер стека
         в байтах, доступного для динамического размещения памяти посредс-
         твом функции alloca.
            
               Возвращаемое значение.
            
               Функция stackavail возвращает размер в байтах как беззнако-
         вое целое.
               См. также alloca, freect, memavl.
            
               Пример.
            
               #include 
               
               main()
               {
               char * ptr;

               printf("Stack memory available before alloca=%u\n",
                     stackavail());
               ptr=alloca(100*sizeof(char));
               printf("Stack memory available after alloca=%u\n",
                     stackavail());
               }

                                      - 220 -
         
         
      
            
               STAT
            
               #include 
               #include 
            
               int stat(pathname, buffer);
               char *pathname;       path-имя существующего файла
               struct stat *buffer;  указатель на строку, принимающую
                                     результаты
            
               Описание.
            
               Функция stat получает информацию о  файле  или  директории,
         определенном по pathname, и запоминает ее в структуре, на которую
         указывает  buffer.  Структура stat, объявленная в   ,
         содержит следующие поля.

               Поле                              Значение
                                 
               st_mode              Битовая  маска  для информации о режиме
                                    файла.  Бит   S_IFDIR  устанавливается,
                                    если  pathname  определяет  директорий;
                                    бит   S_IFREG   устанавливается,   если
                                    pathname  ссылается  на  обычный  файл.
                                    Биты   чтения/записи    устанавливаются
                                    пользователем в соответствии с  режимом
                                    доступа к файлу. Пользователь выполняет
                                    установку битов, используемых для  рас-
                                    ширения имени файла.
            
               st_dev               Номер   устройства  диска,  содержащего
                                    файл.
                 
               st_rdev              Номер   устройства  диска,  содержащего
                                    файл.
                                    (аналогично st_dev).
                           
               st_nlink             Всегда 1.
                           
               st_size              Размер файла  в байтах.
                           
               st_atime             Время последней модификации файла.
                           
               st_mtime             Время последней модификации файла
                                    (аналогично st_atime).
                           
               st_ctime             Время последней модификации файла
                                    (аналогично st_atime и st_mtime).
                           
                           
               В структуре типа stat существуют три  дополнительных  поля,
         которые для MS DOS не имеют смысла.
      

                                      - 221 -
         
         
               Возвращаемое значение.
            
               Функция  stat возвращает значение 0, если получена информа-
         ция о статусе файла. Возвращаемое значение -1 свидетельствует  об
         ошибке,  и  errno  устанавливается  в  ENOENT, т.е. имя файла или
         path-имя не найдено.
            
               См. также access, fstat.
            
               Замечание. Если заданный pathname ссылается на  устройство,
         поля  размера  и  времени  в структуре stat не имеют осмысленного
         значения.
            
               Пример.
           
               #include 
               #include 
               #include 
            
               struct stat buf;
               int result;
               char *args[4];
               .
               .
               .
               result = stat("child.exe", &buf);
            
               if (result == 0)
               if (buf.st_mode & S_IEXEC)
                  execv("child.exe", args);
            
               _STATUS87
            
               #include 
            
               unsigned int _status87();       получает слово статуса
                                               плавающей точки
                                       
               Описание.
            
               Функция _status87 получает слово статуса  плавающей  точки.
         Слово  статуса  плавающей  точки  является комбинацией 8087/80287
         слова  статуса  и  других  состояний,  обнаруживаемых  8087/80287
         handler-ом, таких как переполнение и потеря значимости стека пла-
         вающей точки.
            
                Возвращаемое значение.
            
               Биты  в  возвращаемом  значении обозначают статус плавающей
         точки. Смотрите include-файл  для полного  описания  би-
         тов, возвращаемых функций _status87.
            
               Замечание! Большинство из математических библиотечных функ-
         ций  модифицируют слово статуса 8087/80287 с непредсказуемыми ре-
         зультатами. Возвращаемые значения функций  _clear87  и  _status87

                                      - 222 -
         
         
         становятся  более достоверными после выполнения нескольких опера-
         ций с плавающей точкой с  известными  сообщениями  слова  статуса
         плавающей точки.
               См. также _clear87, _control87.
            
               Пример.
            
               #include 
               #include 
            
               double a = 1e-40, b;
               float x,y;
               
               main()
               {
               printf("status=%.4x-clear\n",_status87());
            
               /*  запомненное в y является неточным и с потерянной значи-
         мостью */
               y = a;
               printf("status=%.4x-inexect,underflow\n",
                      _status87());
            
               /* y неверно */
               b = y;
               printf("status=%.4x-inexect,underflow,denormal\n",
                      _status87());
            
               /* очистка пользователем 8087 статуса */
               _clear87();
               }

                                     
               STRCAT-STRDUP
            
               #include            требуется только для объявления
                                             функции
            
               char *strcat(string1,string2);
                                             добавляет string2 к string1
               char *string1;                строка-приемник
               char *string2;                строка-источник
            
               char *strchr(string,c);       находит первое вхождение
                                             c в string
               char *string;                 строка-источник
               int c;                        поисковый символ
            
               int strsmp(string1,string2);  сравнивает строки
               char *string1;
               char *string2;
            
               int strcmpi(string1,string2); сравнивает   строки  вне
                                             зависимости    от   типа
                                             регистра

                                      - 223 -
         
         
               char *string1;
               char *string2;
            
               char strcpy(string1,string2); копирует    string2    в
                                             string1
               char *string1;                строка-приемник
               char *string2;                строка-источник
            
               int strcspn(string1,string2); находит первую подстроку
                                             символов  в  string1, не
                                             входящую в string2
               char *string1;                строка-источник
               char *string2;                множество символов
            
               char *strdup(string);         дублирует строку
               char *string;                 строка-источник
            
               int stricmp(string1,string2); сравнивает   строки  вне
                                             зависимости    от   типа
                                             регистра
               char *string1;
               char *string2;
            
               Описание.
            
               Функции strcat, strchr, strcmp,  strcmpi,  strcpy,  strspn,
         strdup,  stricmp  работают со строками, оканчивающимися '\0' симво-
         лом. Аргументы строк для этих функций предполагают наличие  нуле-
         вого символа ('\0'), отмечающего конец строки.
               При копировании или добавлении строк проверка на переполне-
         ние не выполняется.
               Функция strcat добавляет string2 к string1, заканчивает ре-
         зультирующую  строку  нулевым  символом и возвращает указатель на
         строку-приемник (string1).
               Функция strchr возвращет указатель на первое вхождение c  в
         string. Символ c может быть нулевым символом ('\0'); нулевой символ
         окончания string включается в поиск. Функция возвращает NULL, ес-
         ли символ не найден.
               Функция  strcmp лексикографически сравнивает строки string1
         и string2 и возвращает значение, обозначающее их соотношение так,
         как показано ниже.
            
               Значение                 Его смысл
           
               меньше 0           string 1 меньше string 2
                
               0                  string 1 равна string 2
            
               больше 0           string 1 больше string 2
                
               Функции strcmpi и stricmp являются  причинно-нечувствитель-
         ными версиями strcmp. Два аргумента string1 и string2 сравнивают-
         ся  вне  зависимости  от типа регистра; это обозначает, что формы
         букв верхнего и нижнего регистров рассматриваются эквивалентными.
               Функция strcpy копирует  string2  (включая  нулевой  символ

                                      - 224 -
         
         
         окончания)  в  расположение,  которое  определяется по string1, и
         возвращает string1.
               Функция  strcspn  возвращает  индекс  первого   символа   в
         string1, который принадлежит множеству символов srting2. Это зна-
         чение  эквивалентно длине начальной подстроки строки string1, ко-
         торая содержит все символы, не входящие в строку string2. При по-
         иске нулевые символы окончания не рассматриваются.  Если  string1
         начинается  с  символа,  содержащегося  в строке string2, strcspn
         возвращает 0.
               Функция strdup захватывает память (с возвратом malloc)  для
         копирования  string  и  возвращает указатель на память, содежащую
         скопированную строку. Функция возвращает NULL, если память не мо-
         жет быть захвачена.
            
               Возвращаемые значения для этих функций описаны выше.
               См. также strncat,  strncmp,  strncpy,  ctrnic,p,  strrchr,
         strspn.
            
               Пример.
            
               #include 
            
               char string[100], template[100], *result;
               int numresult;
               .
               .
               .
               /*  создает строку "computer program" посредством использо-
         вания strcpy и strcat */
               strcpy(string, "computer");
               result = strcat(string," program");
               /* находит строку, в которой первый раз обнаружено 'a' */
               result = strchr(string,'a');
               /* определяет, является ли строка больше, меньше или равной
         другой */
               numresult = strcmp(string, template);
               /* сравнивает две строки вне зависимости от  типа  регистра
         */
               numresult = strcmpi("hello", "HELLO");
               /* создает копию строки */
               result = strcpy(template,string);
               /* находит "a","b","c" в строке */
               strcpy(string,"xyzabbc");
               result = strcspn(string,"abc");
               /* создает новый указатель на строку для дублирования стро-
         ки */
               result = strdup(string);
            
               STRERROR
            
               #include     требуется только для объявления
                                      функции
                                       
               char *strerror(string);
               char *string;           сообщение,        поставляемое

                                      - 225 -
         
         
                                       пользователем
            
               int errno;              счетчик ошибок
               int sys_nerr;           счетчик сообщений системы
               char sys_errlist[sys_nerr];
                                       массив сообщений об ошибках
                  
               Описание.
                
               Если  string равна NULL, функция strerror возвращает указа-
         тель на строку, содержащую системное сообщение об ошибке для пос-
         леднего библиотечного вызова, в котором  выработана  ошибка;  эта
         строка оканчивается символом новой строки ('\n').
               Если string не равна NULL, strerror возвращает указатель на
         строку,  содержащую сообщение об ошибке, поставляемое пользовате-
         лем; двоеточие; пробел; системное сообщение об ошибке для послед-
         него библиотечного вызова, выработавшего ошибку; и  символ  новой
         строки ('\n'). Сообщение пользователя может иметь максимальную дли-
         ну до 94 байта.
               В  отличии  от perror, strerror не печатает никаких сообще-
         ний. Для печати сообщения,  возращаемого  strerror  в  stderr,  в
         программе должен быть оператор printf, например:
               if((access("datafile",2))++-1)
                printf(strerror(NULL));
            
               Номер ошибки хранится в переменной errno, которая объявлена
         на  внешнем уровне. Системные сообщения об ошибках доступны через
         переменную sys_errlist, которая является массивом  сообщений  для
         ошибок  из  счетчика  ошибок. По функции strerror посредством ис-
         пользования значения errno как индекса к sys_errlist можно  уста-
         новить  приблизительные сообщения об ошибках. Значение переменной
         sys_nerr определяется как максимальное число элементов в  массиве
         sys_errlist.
               Чтобы  выработать  правильный  результат,  функция strerror
         должна быть вызвана сразу после библиотечной процедуры, возвраща-
         ющей ошибку. Иначе значение errno  может  быть  перезаписано  для
         последующих вызовов.
            
               Возвращаемое значение.
                
               Функция strerror не возвращает никакого значения.
               См. также clearerr, ferror, perror.
      
            
               Замечание. В MS DOS некоторые значения errno, приведенные в
         ,  не используются. См. приложение А "Сообщения об ошиб-
         ках", где приведен список значений errno и соответствующие  сооб-
         щения  об ошибках, которые применяются в MS DOS . Для любого зна-
         чения errno, не используемого в MS DOS, функция strerror печатает
         пустую строку.
            
               Пример.
          
               #include 
               #include 

                                      - 226 -
         
         
               #include 
               #include 
               #include 
            
               int fh1, fh2;
            
               fh1 = open("data1", O_RDONLY);
               if (fh1==-1)
                   strerror("open failed on input file");
            
               fh2 = open("data2", O_WRONLY : O_CREAT,
                              S_IREAD : S_IWRITE);
               if (fh2==-1)
                   srterror("open failed on output file");
            
               STRLEN
            
               #include     требуется только для объявления
                                      функции
            
               int strlen(string);
               char *string;          строка, заканчивающаяся нулевым
                                      символом
            
               Описание.
            
               Функция strlen возвращает в  байтах  длину  строки  string,
         причем нулевой символ окончания ('\0') в длину не засчитывается.
           
               Возвращаемое значение.
            
               Функция  возвращает  длину string. Возвращаемого значения в
         случае возврата нет.
            
               Пример.
            
               #include 
           
               char *string="some space";
               int result;
               .
               .
               .
               /* определяет длину строки */
               result=strlen(string);  /* result = 10 */
            
            
               STRLWR
            
               #include     требуется только для объявления
                                      функции

               char strlwr(string);
               char *string;          преобразуемая строка
            

                                      - 227 -
         
         
               Описание.
            
               Функция strlwr преобразовывает любые буквы верхнего регист-
         ра из заданной строки string, заканчивающейся нулевым символом, в
         буквы нижнего регистра. Другие символы не рассматриваются.
            
               Возвращаемое значение.
            
               Функция strlwr возвращает указатель на преобразуемую строку
         string. Возвращаемого значения в случае ошибки нет.
               См. также strupr.
            
               Пример.
            
               #include 
            
               char string[100], *copy;
               .
               .
               .
               /* создает копию строки в символах нижнего регистра */
            
               copy=strlwr(strdup(string));
            
      
            
               STRNCAT-STRNSET
      
               #include     требуется только для объявления
                                      функции
                                  
               char *strncat(string1,string2,n);
                                      добавляет n символов  string2 к
                                      string1
               char *string1;         строка-приемник
               char *string2;         строка-источник
               unsigned int n;        количество добавляемых символов
            
               char *strncmp(string1,string2,n);
                                      сравнивает  первые  n  символов
                                      строк
               char *string1;
               char string2;
               unsigned int n;        количество  сравниваемых симво-
                                      лов
            
               int strnicmp(string1,string2,n);
                                      сравнивает  первые  n  символов
                                      строки
            
               char *string1;
               char string2;
               unsigned int n;        количество сравниваемых  симво-
                                      лов
            

                                      - 228 -
         
         
            
               char *strncpy(string1,string2,n);
                                      копирует n символов  string2  в
                                      string1
               char *string1;         строка-приемник
               char *string2;         строка-источник
               unsigned int n;        количество добавляемых символов
            
               char *strnset(string,c,n,);
                                      инициализирует  n первых симво-
                                      лов строки string
               char *string;          инициализируемая строка
               int c;                 символ-приемник
               unsigned int n;        количество принимаемых символов
            
      
               Описание.
            
               Функции strncat, strnsmp, stricmp, strncpy, strnset работа-
         ют с первыми n символами строк, оканчивающимися нулевым символом.
               Функция  strncat добавляет n первых символов строки string2
         к строке string1, заканчивает результирующую строку нулевым  сим-
         волом ('\0') и возвращает указатель на строку-приемник (string1).
         Если n больше, чем длина строки string2, тогда вместо n использу-
         ется длина строки.
               Функция strncmp лексикографически сравнивает первые n  сим-
         волов строк string1 и string2 и возвращает значение, которое ука-
         зывает на отношение между подстроками, как приведено ниже:
            
               Значение                 Его смысл
            
               меньше 0           substring 1 меньше substring 2
                
               0                  substring 1 равна substring 2
                
               больше 0           substring 1 больше substring 2
            
               Функция  stricmp является причинно-нечувствительной версией
         strncmp; функция stricmp сравнивает две строки string1 и  string2
         вне  зависимости от чувствительности к регистрам; это обозначает,
         что формы букв верхнего и нижнего регистров  рассматриваются  как
         эквивалентные.
               Функция  strncpy копирует точно n символов строки string2 к
         строке string1 и возвращает string1. Если  n  меньше,  чем  длина
         string2, нулевой символ окончания ('\0') автоматически не добавля-
         ется к копируемой строке. Если n больше, чем длина  string2,  ре-
         зультат  string1 заполняется нулевыми символами, вплоть до дости-
         жения длины n.
               Функция strnset устанавливает первые n  символов  string  в
         символ  c  и  возвращает  указатель  на измененную строку. Если n
         больше, чем длина строки  string,  вместо  n  используется  длина
         string.
               См. также  strcat, strcmp, strcpy, strset.
            

                                      - 229 -
         
         
               Пример.
            
               #include 
            
               char string[30]={"12345678901234567890"};
            
               main()
               {
               char copy[100], suffix[100], *result;
               int numresult;
               unsigned int nresult;
               .
               .
               .
               /*  комбинирует  строку  со строкой suffix, не более чем 10
         символов (30 минус длина начальной строки). (Если в  примере  ис-
         пользуется  более 10 символов, в память будет записано любое дру-
         гое значение) */
             
               result = strncat(string,suffix,10);
            
               /* определяет порядок слов в строке, которая  содержится  в
         "program",  но рассматривает не более 7 символов. Если строка со-
         держит префикс "program", strncmp возвращает 0 */
            
               strcpy(string,"programmer");
               numresult = strncmp(string,"program",7);
            
               /* сравнивает 4 символа двух строк вне зависимости от  типа
         регистра */
            
               strcpy(string,"PROGRESS");
               nresult = stricmp(string,"program",4);
            
               /* копирует 99 символов строки */
            
               result = strncpy(copy,string,99);
            
               /* устанавливает первые 4 символа строки в символ 'x' */
            
               result = strnset("computer",'x',4);
               }
            
            
               STRPBRK
            
               #include     требуется только для объявления
                                      функции
            
               char *strpbrk(string1,string2);
                                      находит любой символ из string2
                                      в string1
               char *string1;         строка-источник
               char *string2;         множество символов
              

                                      - 230 -
         
         
               Описание.
            
               Функция  strpbrk  находит первое вхождение в string1 любого
         символа из string2. Нулевой символ окончания при поиске не  расс-
         матривается.
            
               Возвращаемое значение.
            
               Функция  strpbrk  возвращает  указатель на первое вхождение
         символа из string2 в string1.
               NULL-указатель  определяет  отсутствие  общих  символов   в
         string1 и в string2.
               См. также strchr, strrchr.
            
               Пример.
            
               #include 
            
               char string[10], *result;
               .
               .
               .
               /*  возвращает  указатель на первое вхождение в строке либо
         'a,' либо 'b' */
            
               result = strpbrk(string,"ab");
               
               STRRCHR
            
               #include     требуется только для объявления
                                      функции
            
               char *strrchr(string,c);
                                      находит последнее вхождение c в
                                      string
               char *string;          строка-источник
               int c;                 символ поиска
            
               Описание.
            
               Функция strrchr находит последнее  вхождение  символа  c  в
         строке  string. Нулевой символ окончания ('\0') строки string вклю-
         чается в поиск. (Используется strchr для поиска первого вхождения
         c в строке string).
            
               Возвращаемое значение.
            
               Функция strrchr возвращает указатель на последнее вхождение
         c в string. Указатель NULL возвращается, если заданный символ  не
         найден.
               См. также strchr, strpbrk.
            
               Пример.
            
               #include 
            

                                      - 231 -
         
         
               char string[100], *result;
               .
               .
               .
               /* находит последнее вхождение символа 'a' в строке */
               result = strrchr(string,'a');.

               STRREV
            
               #include     требуется только для объявления
                                      функции
           
               char *strrev(string);
               char *string;          сохраняемая строка
            
               Описание.
            
               Функция strrev сохраняет порядок символов в заданной строке
         string. Нулевой символ окончания ('\0') остается на месте.
            
               Возвращаемое значение.
            
               Функция  strrev  возвращает указатель на измененную string.
         Возвращаемого значения в случае ошибки нет.
               См. также strcpy, strset.
            
               Пример.
            
               #include 
            
               char string[100];
               int result;
               .
               .
               .
               /* определяет, является ли строка палиндромом, т.е. читает-
         ся одинаково в прямом и обратном порядке */
               result = strcmp(string,strrev(strdup(string)));
               /* если result == 0, строка является палиндромом */
            
            
               STRSET
            
               #include     требуется только для объявления
                                      функции
            
               char *strset(string,c);
               char *string;          устанавливаемая строка
               int c;                 символ-приемник
            
            
               Описание.
           
               Функция strset устанавливает в c все  символы  из  заданной
         строки string, исключая нулевой символ окончания ('\0').

                                      - 232 -
         
         
            
               Возвращаемое значение.
            
               Функция  strset  возвращает указатель на измененную строку.
         Возвращаемого значения нет.
               См. также strnset.
            
               Пример.
            
               #include 
            
               char string[100], *result;
               .
               .
               .
               /* устанавливает строку, состоящую из пробелов */
               result = strset(string, ' ');
            
            
               STRSPN
            
               #include     требуется только для объявления
                                      функции
            
               int strspn(string1,string2);
               char *string1;         поисковая строка
               char *string2;         множество символов
            
               Описание.
            
               Функция strspn возвращает индекс первого символа  в  строке
         string1,  который  не принадлежит множеству символов string2. Это
         значение эквивалентно длине начальной подстроки в строке string1,
         которая полностью состоит из  символов  строки  string2.  Нулевой
         символ  окончания строки string2 не рассматривается. Если string1
         начинается с символа, не входящего в string2,  strcpn  возвращает
         0.
            
               Возвращаемое значение.
            
               Функция  strspn возвращает целое значение, определяющее по-
         зицию первого символа в string1, и не содержащегося в string2.
               См. также strcspn.
            
               Пример.
            
               #include 
            
               char *string="cabbadge";
               int result;
               .
               .
               .
               /* определяет длину префикса, содержащего a,b и c */
               result = strspn(string,"abc"); /* result = 5 */

                                      - 233 -
         
         
            
               STRSTR
            
            
               #include     требуется только для объявления
                                      функции
            
               char *strstr(srting1,string2);
               char *string1;         поисковая строка
               char *string2;         строка-шаблон
            
               Описание.
            
               Функция strstr возвращает  указатель  на  первое  вхождение
         string1 в string2.
            
               Возвращаемое значение.
            
               Функция   strstr  возвращает  указатель  на  string1,  если
         string1 обнаружена, и NULL - если string1 нет.
               См. также strcspn.
            
               Пример.
            
               #include 
            
               main()
                 {
                 char *string1="needle in a haystack";
                 char *string2="hay";
                                           
                 printf("%s\n", strstr(string1,string2));
                 }
            
               На выходе:
               haystack
            
               STRTOD-STRTOL
                 
                #include 
                
                double strtod(nptr, endptr);  преобразует  строку,
                                              на которую указывает
                                              nptr, в double
                                        
                char *nptr;                   указатель  на строку
                char **endptr;                указатель  на  конец
                                              просмотра
                
                long strol(nptr,endptr,base); преобразует строку в
                                              long  десятичное це-
                                              лое,   эквивалентное
                                              числу с данным осно-
                                              ванием base
                char *nptr;

                                      - 234 -
         
         
                char **endptr;
                int  base;                    используемое основа-
                                              ние
                
                
               Описание.
                
               Функции strtod и strtol соответственно преобразуют символь-
         ную строку к значению с двойной точностью или к  длинному  целому
         значению.  Исходная  строка  string представляет собой последова-
         тельность символов, которые интерпретируются как числовое  значе-
         ние  специального  типа. Эти функции прекращают чтение строки как
         только встретится символ, который не может быть частью числа (это
         может быть нулевой символ '\0 в конце строки); для strtol символом
         прерывания может быть также первый цифровой символ, который боль-
         ше или равен base. Если endptr - не NULL,  *endptr  указывает  на
         тот символ, на котором останавливается просмотр.
               Функция  strtod предполагает, что nptr указывает на строку,
         имеющую следующую форму:
                
         [whitespace][sign][digiits][.digits][{d:D:e:E}[sign]digits]
                
               При появлении первого символа, не отвечающего  этой  форме,
         обработка прекращается.
               Функция  strtol  предполагает, что nptr указывает на строку
         следующей структуры:
                
               [whitespace][sign][0][x][digits]
                
               Если base лежит между 2 и 36, это значение используется как
         основание системы счисления данного числа.
               Если base = 0, начальные символы строки, на которые  указы-
         вает  nptr,  используются  для определения основания. Если первый
         символ - 0 и второй - одна из цифр от 1 до 7, то строка интерпре-
         тируется как восьмеричное целое; если первый символ 0, а второй x
         или X, тогда строка понимается как шестнадцатеричное целое;  если
         первый символ принадлежит последовательности 1-9, то строка пони-
         мается как десятичное целое.
                
               Возвращаемое значение.
                
               Функция  strtod  возвращает значение числа с плавающей точ-
         кой, исключая случаи переполнения или потери результата (т.е. аб-
         солютное значение результата меньше, чем это допустимо диапазоном
         представления числа). В случае переполнения или потери значимости
         результата возвращается соответственно +HUGE или -HUGE.
               Функция strtol возвращает значение преобразованной  строки,
         исключая случай переполнения или потери результата. В этом случае
         возвращается  соответственно  LONG_MAX  или LONG_MIN. Обе функции
         устанавливают errno в ERANGE.
               См. также atof, atol.
                
               Пример.
                
                #include 

                                      - 235 -
         
         
                
                main()
                 {
                 char *string, *stopstring;
                 double x;
                 long l;
                 int bs;
             
                 string="3.1415926This stopped it";
                 x=strtod (string, &stopstring);
                 printf ("string=%s\n",string);
                 printf (    strtod=%ld (base %d)\n", l, bs);
                 printf ("   Stopped scan at %s\n\n", stopstring);
                 string="10110134932";
                 printf ("string=%s\n", string);
                 for (bs=2; bs<=8; bs*=2)  {
                 l=strtol(string, &stopstring, bs);
                 printf (" strtol=%ld (base %d)\n",l,bs);
                 printf (" Stopped scan at %s\n\n",stopstring);
                  }
                }

               На выходе:
            
               string = 3.1415926This stopped it
                 strtod = 3.141593
                 Stopped scan at This stopped it
            
               string = 10110134932
                 strtol = 45 (base 2)
           
            
                 Stopped scan at 34932
      
                 strtol = 4423 (base 4)
                 Stopped scan at 4932
            
                 strtol = 2134108 (base 8)
                 Stopped scan at 932
            
               STRTOK
            
               #include    требуется  только для объявления
                                     функции
            
               char *strtor(string1,string2);
                                     находит символ в string1
               char *string1;        строка, содержащая символы
               char *string2;        множество символов-ограничителей
            
               Описание.
            
               Функция strtok читает строку string1 как множество нуль или
         более знаков, служащих в качестве ограничителей  для  символов  в
         string1. Символы в string1 могут отделяться одним или более огра-

                                      - 236 -
         
         
         ничителем  от string2. Символы в string1 разрываются столько раз,
         сколько вызывается strtok. При первом вызове strtok для  заданной
         строки string1, strtok находит первый символ в string1, пропуская
         предыдущие  ограничители.  Указатель возвращается на первый знак.
         Для того, чтобы прочитать следующий символ  из  string1,  функция
         strtok  вызывается вместе с NULL значением для аргумента string1.
         Аргумент NULL строки string1 вызывает strtok для поиска следующе-
         го знака в предыдущей строке  символов.  Множество  ограничителей
         может  быть  различным  от вызова к вызову, так как string2 может
         принимать любые значения.
               Замечание. String1 можно  модифицировать  вызовами  strtok,
         так  как после вызова strtok в string1 вставляется нулевое значе-
         ние ('\0').
            
               Возвращаемое значение.
            
               При вызове strtok первый раз, она возвращает  указатель  на
         первый  символ в string1. При последующих вызовах в этой же самой
         строке символов, strtok возвращает указатель на следующий  символ
         в строке. Указатель NULL возвращается, когда нет больше символов.
         Все символы оканчиваются нулем.
               См. также strcspn, strspn.
            
               Пример.
            
               #include 
               #include 
            
               char *string = "a string, of , ,tokens";
               .
               .
               .
               /*  в следующем цикле собираются символы (отделенные пробе-
         лами или запятыми) из строки до тех пор, пока в ней ничего не ос-
         танется */
               token = strtok(string,",");
            
               while  (token  !=NULL)   {
               /* вставляет код для обработки символа в цикле */
                      .
                      .
                      .
               token = strtok(NULL,",");
               /* берет следующий символ */
                    }
            
               /* возвращаемыми  символами  являются  "a","string",  "of",
         "tokens". Следующий вызов strtok возвратит NULL и цикл завершает-
         ся */
            
            
               STRUPR
            
               #include     требуется только для объявления
                                      функции

                                      - 237 -
         
         
            
               char *strupr(string);
               char *string;          строка,       преобразуемая   к
                                      верхнему  регистру
            
               Описание.
            
               Функция  strupr преобразует любые буквы нижнего регистра из
         заданной string к буквам верхнего  регистра.  Другие  символы  не
         рассматриваются.
            
               Возвращаемое значение.
            
               Функция strupr возвращает указатель на преобразуемую строку
         string. Возвращаемого значения в случае ошибки нет.
               См. также strlwr.
            
               Пример.
            
               #include
                                
               char string[100], *copy;
               .
               .
               .
               /* следующий оператор делает копию строки в верхнем регист-
         ре */
               copy = strupr(strdup(string));
 
               
               SWAB
            
            #include              требуется  только  для
                                            объявления функции
            
            void swab(source, destination, n);
            char *source;                   копируемые и перестав-
                                            ляемые  (обмениваемые)
                                            данные
            char *destination;              хранение  переставлен-
                                            ных данных
            int n;                          число       копируемых
                                            байтов
            
               Описание.
            
               Функция swab копирует n байтов из source, переставляет (об-
         менивает)  каждую  пару  смежных  байтов  и  хранит  результат  в
         destination. Целые n могут быть одинаковыми числами,  подлежащими
         перестановке (обмену).
               Функция  swab  обычно  используется для подготовки двоичных
         данных при пересылке их к вычислительной машине, которая  исполь-
         зует различный порядок байтов.
            
               Возвращаемое значение.
            
               Возвращаемого значения нет.
               См. также fgets, fputs.




Яндекс цитирования