jsh@usenix.org (Jeffrey S. Haemer) (12/03/89)
From: Jeffrey S. Haemer <jsh@usenix.org> An Update on UNIX* and C Standards Activities December 1989 USENIX Standards Watchdog Committee Jeffrey S. Haemer, Report Editor IEEE 1003.1: System services interface Update Mark Doran <md@inset.co.uk> reports on the October 16-20, 1989 meeting in Brussels, Belgium: P1003.1 is now a full-use standard, so interest in attending the working group has wained somewhat. Attendance didn't get above fifteen or so all week and was nearer half a dozen most of the time. Even so, this was a bit low by comparison with recent meetings. So where was everyone? [Editor's note -- Notice that this is larger than the attendance at typical meetings of, for example, dot nine. "Low attendance" is relative. Author's additional note -- And that's the frightening thing; standards being established by as few as half a dozen _i_n_d_i_v_i_d_u_a_l_s. This cannot be representative or balanced. Scary stuff, "...as we take you on a journey, into the Standards Zone..."] We were all lead to believe that meeting in Brussels was going to further the cause of international participation in the POSIX process. Several people I would normally expect to see, didn't show; Europe must be too far from home for a lot of the regulars. Unfortunately, neither did I see more than two or three European types (whom I would not normally expect to see at POSIX) all week either. Oh well, I'm sure it was a good idea really... So what did those that showed get up to? Well, in chronological order: 1. ISO 9945 Status and Document Format 2. P1003.1a Balloting 3. Transparent File Access __________ * UNIX is a registered trademark of AT&T in the U.S. and other countries. December 1989 Standards Update IEEE 1003.1: System services interface - 2 - 4. Language-Independent Specification 5. Messaging 6. P1003.1b In detail: 1. ISO 9945 [Editor's note -- ISO 9945 is, roughly, the ISO standard engendered by and corresponding to the POSIX work.] It looks like 9945 is going to be split up into three major pieces, the first of which is founded upon the IEEE P1003.1-1988 standard. This piece is likely to include all the other system interfaces as well (notably, the real time stuff from P1003.4). The other two pieces will be based around utilities and system administration. The basic IS9945-1:1989 will be just the same as the regular, ugly-green, dot-one book -- well almost. ISO has yet another documentation format and the book will have to be squeezed to fit it. And before you ask, this one doesn't allow line numbers either. We are assured that making the changes is not a major problem, but the working group has still requested a new disclaimer telling readers that all mistakes are the fault of ISO! 2. P1003.1a [Editor's note -- This document (supplement A) is supposed to contain clarifications of and corrections to P1003.1-1988, but no substantive changes.] The meeting discussed resolution issues from the first ballot. Highlights included: - the decision to withdraw the cuserid() interface; its loss will not be sadly mourned since one can use other interfaces to do the same job better. - the addition of a new type name ssize_t (yes, two s's) to represent signed size_t values; this has all sorts of uses -- for example, in the prototype for read(). Currently, the parameter specifying the number of bytes to be read() is given as a size_t, but read() has been specified to December 1989 Standards Update IEEE 1003.1: System services interface - 3 - return an int, which this may not be large enough to hold a size_t character count. Moreover, read() may return -1 for failure, or the number of characters read if the call was successful. The recirculation ballot happened between November 10-20; if you care but didn't know that already, it doesn't matter because you (and many others, I suspect) have missed your chance. This all seems a bit fast but it does mean that P1003.1a will hit an ISO, six-month, letter-ballot window; standards must progress you know... 3. Transparent File Access Isn't this a P1003.8 problem? Yes, but the chair of the TFA committee came to talk about TFA semantics as they relate to P1003.1. The crux of the matter is that the TFA folks (all six of them...) seem to have decided that standardizing NFS will do nicely for TFA. Their chair wonders whether the rest of the world (or, more accurately, the balloting group for a TFA standard) will agree. The answer from the dot one folks appears to be definitely not (thank goodness)! There appear to be several arguments against NFS as the TFA standard from dot one. These include: - It is impossible to maintain full dot one semantics over a network using NFS. Consider the last-close semantics, for example, which can only be preserved over a network using a connection-oriented protocol, which NFS is not. - Transparent File Access should be _t_r_a_n_s_p_a_r_e_n_t; NFS isn't. It is possible for operations that are logically sound to fail because of network timeouts. - NFS is a _d_e _f_a_c_t_o standard; why should it get an official rubber stamp? This appears to be a hot topic that many groups may have an interest in, so there will be an "out-of-hours" meeting on TFA at the New Orleans POSIX -- If you care at all, I suggest you try to show up... [Editor's note -- If you do care but can't go to New Orleans, we suggest either writing directly to the TFA chair, Jason Zions <jason@hpcndr.cnd.hp.com>, or posting your opinions to comp.std.unix.] December 1989 Standards Update IEEE 1003.1: System services interface - 4 - 4. Language-Independent Specification It seems to have been decided that POSIX API standards should be written in a language-independent form, i.e. not expressed in C-language constructs. My initial reaction was one of horror, but then someone quietly pointed out to me that C is not the only programming language in the known universe. This I have to concede, along with the idea that bindings to POSIX APIs in other languages may not be such a bad idea after all. Indeed work is well underway to produce FORTRAN and ADA bindings. But now it seems we have to express POSIX in a language- independent way. "Why?" I ask... Well, this means that when you come to write the next set of actual language bindings, the semantics you'll need to implement won't be clouded with language-dependent stuff; the idea is that you won't have to understand C in all its "glory" to write new language bindings. So what will the language-independent specifications look like? Will I be able to understand those? The current proposal doesn't look like anything I recognize at all. Yes, that's right, we have to learn a whole NEW language (sigh). Why not use a more formal specification language that a few people know? (Like ASN.1 for example, which P1003.7 has decided to use.) Better yet, why not use constrained English -- lots of people can read that... Come to think of it, since the FORTRAN and ADA bindings folks have managed without the aid of language-independent specifications, why can't everyone else? Is there more to this than a glorified job creation scheme? ("Wanted: expert in POSIX 'language-independent' language...") If there is, do we have to invent a new wheel to get the job done? As you can tell, my opinion of this effort is somewhat jaundiced. Perhaps, you may say, I have missed the point. Maybe so; but if I have, I feel sure that some kind soul will be only too happy to correct me in "flaming" detail :-) 5. Messaging The UniForum internationalization (I18N) folks brought forward a proposal for a messaging facility to be included in P1003.1b. The working group decided that it needs some more work but will go into the next draft. [Editor's note -- The problem being solved here is that internationalized applications store all user-visible strings in external files, so that vendors and users can change the December 1989 Standards Update IEEE 1003.1: System services interface - 5 - language of an application without recompiling it. The UniForum I18N group is proposing a standard format for those files.] 6. P1003.1b Work on production of the second supplement is still at a formative stage. Indeed, the group is still accepting formal proposals for functionality to add to the document. Where P1003.1a has been drawn up as a purely corrective instrument, P1003.1b may add new functionality. Among the interesting things currently included are these: - The messaging proposal described above. - A set of interfaces to provide symbolic links. The basic idea is that lstat(), readlink() and symlink() operate on the link, and all other interfaces operate on the linked-to file. Rationale will be added to explain that '..' is a unique directory, which is the parent directory in the same physical file system. This means that cd does not go back across symlinks to the directory you came from. This is the same as the semantics on my Sun. For example: (sunset) 33 % pwd /usr/spare/ins.MC68020/md/train (sunset) 34 % ls -ld ./MR_C++ lrwxrwxrwx 1 root 32 Sep 30 1988 MR_C++ -> /usr/sunset/md/c++/trainset/c++/ (sunset) 35 % cd MR_C++ (sunset) 36 % pwd /usr/sunset/md/c++/trainset/c++ (sunset) 37 % cd .. (sunset) 38 % pwd /usr/sunset/md/c++/trainset The rationale is meant to help keep readers' eyes on what's really written in the standard and help them avoid misinterpreting it along lines of their own potential misconceptions. - P1003.1b used to have two descriptions of Data Interchange formats. Now it has only one. The working group picked the one that remains because it more closely existing December 1989 Standards Update IEEE 1003.1: System services interface - 6 - standards in the area, in particular the surviving proposal refers to X3.27. December 1989 Standards Update IEEE 1003.1: System services interface Volume-Number: Volume 17, Number 82
std-unix@longway.TIC.COM (Moderator, John S. Quarterman) (04/05/90)
From: Doug Gwyn <uunet!smoke.brl.mil!gwyn> >... the P1003.1 working group decided that split baud rates are not >important enough to require explicit support for them in the standard. In the original 1003.1 discussions, I recall that we did not want to MANDATE that different split baud rates be supported, since many existing systems could not do so, but that we did want to ALLOW them to be supported in environments that could do so. Thus a request to set differing split baud rates may fail (as many almost any I/O system call), if the hardware or port handler code is not up to it. If this decision has been changed I'd like to know why. Volume-Number: Volume 19, Number 72
guy@auspex.uucp (Guy Harris) (04/06/90)
From: guy@auspex.uucp (Guy Harris)
>(``What are split baud rates?'' the American reader is asking.
Which is kind of amusing; they were put into one of the "termios"
section drafts at the suggestion of a Canadian, and the person who
initially put them in there was a US citizen who was quite aware that
UNIX (a system most if not all of whose original creators were also US
citizens) used to support them....
UNIXes with a V7-flavored tty driver (V7 itself, BSD) supported them;
the people who did the S3 tty driver decided not to include support for
them.
It seems that much newer hardware doesn't support them - serial port
chips don't seem to allow the input and output baud rate to be set
separately - but older hardware did. Do systems sold in Europe have
serial port chips that support split baud rates?
Volume-Number: Volume 19, Number 54
henry@zoo.toronto.edu (04/07/90)
From: henry@zoo.toronto.edu >From: peter@ficc.uucp (Peter da Silva) >What about Eric Allman's "parseargs" (or my modified version), which have >finally fulfilled the promise of "getopt" to make argument parsing easy? What about it? I fear it's a bit late and not sufficiently widely used to make it into POSIX, which is (mostly) supposed to be standardizing existing practice. [I'm among those who takes a dim view of the explosive growth of POSIX committees working on standards for subjects we don't even understand yet.] I suspect it would also be controversial, since some of us think getopt() does most of what's really needed. Henry Spencer at U of Toronto Zoology uunet!attcan!utzoo!henry henry@zoo.toronto.edu Volume-Number: Volume 19, Number 70
jsh@usenix.org (06/29/90)
From: <jsh@usenix.org> An Update on UNIX*-Related Standards Activities June, 1990 USENIX Standards Watchdog Committee Jeffrey S. Haemer, Report Editor IEEE 1003.1: System services interface Paul Rabin <rabin@osf.org> reports on the April 23-27 meeting in Salt Lake City, UT: 1. Introduction The POSIX 1003.1 working group is the oldest POSIX group, responsible for specifying general-purpose operating system interfaces for portable applications. This group developed the original 1988 POSIX standard, and is now responsible for writing supplements and revisions to that standard. This work includes + corrections and clarifications to the 1988 POSIX standard + material that was too controversial to handle before + new interfaces requested by other POSIX working groups Like other working groups developing ``base standards,'' the 1003.1 working group is responsible for writing both C language and language-independent versions of the specifications that it develops. So far, the group has concentrated on the C language versions, but there is increasing pressure to make progress on the language- independent specifications. The working group recently completed a revision of the 1988 POSIX standard, and is currently working on a supplement to that revision. There has been a lot of turnover in the group since the 1988 POSIX standard was completed, but there are still a few old-timers to provide continuity. About 15 people attended the last two meetings. This seems to be a good size for getting work done. This is definitely a technical crowd; check your politics at the door. For more information about the group and how to participate, contact the chair, Donn Terry, at donn@hpfcla.fc.hp.com or hplabs!hpfcla!donn. __________ * UNIXTM is a Registered Trademark of UNIX System Laboratories in the United States and other countries. June, 1990 Standards Update IEEE 1003.1: System services interface - 2 - Send comments and proposals to the secretary, Keith Stuck, at keith@sp7040.uucp. I've made this report a bit more detailed than usual in order to give the technical details wider exposure. New proposals, and comments on any of the current active proposals or issues are welcome. 2. 1003.1a Status 1003.1a is the recently completed revision to the 1988 POSIX standard. No new interfaces or features were introduced, but the text was revised in several ways. The main reason for the revision was to prepare the text for balloting as an ISO standard, so the document had to be made to look like an ISO standard. This meant adding ISO boiler-plate, changing external document references to pretend that only standards exist, changing internal cross-references so that chapters are renamed sections, and sections are renamed clauses and subclauses, changing ``will'' to ``shall,'' etc., ad nauseam. While the working group was having fun with all that, they took the opportunity to do some cleaning up. They corrected errors, clarified unclear language, and changed the function synopses to use ANSI C prototypes. The group did make one normative change, which was to specify reserved namespaces. This will allow implementations and revisions to the standard to define extensions without breaking existing, conforming applications. It's messier than you might think. After four recirculation ballots, IEEE balloting was completed in April. Now it has to get through the ISO balloting process. See the recent snitch report on 1003.5 for a description of how IEEE and ISO balloting is synchronized, and what all of the acronyms mean. ISO has been balloting 1003.1a as ISO/IEC DIS 9945-1. After the first ISO ballot, JTC1 approved 9945-1 for promotion to full IS status. This approval was overruled by the ISO Central Secretariat on the grounds that the document format was still not satisfactory (still haven't caught all of those ``will''s). Rather than publish the current document and then immediately revise, ballot, and publish it again, it was decided to create a new DIS and to start a second round of ISO balloting. This will cause a delay in the publication of the international POSIX standard (and hence also the IEEE POSIX.1 standard). The U.S. Technical Advisory Group (TAG) is responsible for generating the U.S. ballot. Assuming that no normative changes are introduced by the ISO balloting process, the resulting document will be published by IEEE as IEEE Std 1003.1-1990. June, 1990 Standards Update IEEE 1003.1: System services interface - 3 - 3. 1003.1b Status Since 1003.1a is now out of IEEE's hands, the working group spent the Utah meeting working on 1003.1b, the first supplement to 1003.1a. This will include some corrections and clarifications that didn't make it into 1003.1a, but will mainly consist of new interfaces and features. 1003.1b has been in the works for several meetings, so the draft already contains a lot of material. The first day was devoted to revision of the draft, the rest of the week to considering new proposals. The previously announced schedule for 1003.1b specified the Utah meeting as the cutoff date for new proposals. Unfortunately, some expected proposals were not received, and some that were received were not ready for incorporation, so the cutoff was deferred until the next meeting, in Danvers, Massachusetts. Draft 2 of 1003.1b was distributed just before the meeting in Utah. Draft 3 should be available before the Danvers meeting. 1003.1b is expected to be approved sometime in early 1991, and to be published by IEEE as a separate supplement to the IEEE Std 1003.1-1990. 3.1 New Features in the Current Draft of 1003.1b Draft 2 of P1003.1b includes a new data interchange format, and new interface specifications for symbolic links, environment list access, and file-tree walking. These had been proposed and generally accepted at previous meetings. Many new issues were raised and discussed. 3.1.1 Symbolic_Links P1003.1b adds BSD symbolic links to the 1988 POSIX standard as a new required feature. New interfaces for symlink(), readlink(), and lstat() are specified, and the definition of pathname resolution is amended to include the handling of symbolic links. Implementations may optionally enforce a limit on the number of symbolic links that can be tolerated during the resolution of a single pathname, for instance to detect loops. The new symbol {_POSIX_SYMLOOP} is defined to be the minimum value of such a limit. A new error, [ELOOP], is returned if such a limit is exceeded. Symbolic links that are encountered in pathname prefixes are always resolved. Symbolic links named by the final component of a pathname will be resolved or not, depending on the particular interface. By default, such symbolic links will be resolved, unless specified otherwise. The interfaces that will not resolve symbolic links named by pathname arguments are: + readlink() If the pathname argument names a symbolic link, the contents of the link will be returned. + lstat() If the pathname argument names a symbolic link, a stat structure will be returned for the link itself. June, 1990 Standards Update IEEE 1003.1: System services interface - 4 - + unlink() If the pathname argument names a symbolic link, the link itself will be removed. + rmdir() If the pathname argument names a symbolic link, the link will not be followed and the call will fail. + open() Symbolic links are followed, unless both O_CREAT and O_EXCL are set. If both O_CREAT and O_EXCL are set, and the pathname argument names an existing symbolic link, the link will not be followed and the call will fail. + link() If the new pathname names a symbolic link, the link will not be followed and the call will fail. If the old pathname names a symbolic link, the link will be followed. This is the BSD behavior. SVR4.0 does not follow the link in this case, thus supporting hard links to symbolic links. The working group felt that the SVR4 behavior unnecessarily restricts implementations (for instance, those that do not implement symbolic links with inodes), and has much more complex semantics. + rename() If the old pathname names a symbolic link, the link will not be followed. Instead, the symbolic link itself will be renamed. If the new pathname names a symbolic link, it will not be followed. Instead, the symbolic link will be removed, and a new hard link will be created naming the file that was previously named by the old pathname. The 1988 POSIX standard specifies that if the new pathname names an existing file, rename() will fail if the new and old pathnames do not either both name directories or both name non-directory files. This rule needs to be expanded to include the case of the new pathname naming a symbolic link. Should the rename() call fail depending on whether or not the symbolic link named by the new pathname itself names a directory or a non-directory file? This will be resolved at the next meeting. Symbolic links are not required to have any attributes other than their file type and their contents. This is intended to provide the simplest semantics and to allow the greatest latitude for implementations. 3.1.2 Other_BSD_Interfaces P1003.1b also includes specifications for the following interfaces: June, 1990 Standards Update IEEE 1003.1: System services interface - 5 - + fchmod() + fchown() + fsync() + ftruncate() 3.1.3 Environment_List The ANSI-C standard defines the getenv() function to retrieve the value corresponding to a given name in a program's environment list, but does not specify the implementation or initialization of that list. The 1988 POSIX standard specified the traditional list implementation using the external variable environ, and specified the initialization of the list by the exec functions. In an attempt to extend the set of high-level interfaces to the environment list, and to pave the way for the possible eventual removal of environ, the working group has included putenv() and clearenv() interfaces in 1003.1b. Three problems have been identified with these high-level interfaces: + They cause static data to be shared between the application and the implementation. Neither the application nor the implementation can easily manage the storage for environment "name=value" strings. + They are not robust. The interactions between the high-level interfaces and access via environ is not specified. + They can't be easily extended to handle multiple lists. There is no way to copy a list, or to build a new list for execle() or execve(). The putenv() and clearenv() interfaces may be removed from 1003.1b at the next meeting if a revised proposal does not appear. 3.1.4 File_Tree_Walk The 1003.1 working group promised the 1003.2 group (Shell and Utilities) that a mechanism would be provided for walking an directory tree of unbounded depth using any given (non- zero) number of free file descriptors. The Berkeley folks have implemented a set of high-level interfaces defined by David Korn of Bell Labs, and proposed them for inclusion in 1003.1b. These interfaces support every option and search order required by the 1003.2 commands. The 1003.1 group wants a simpler interface suitable for typical application programs, so Keith Bostic will put the proposal on a ``weight-reducing diet'' and resubmit it for the next draft. The high-level file-tree walk interfaces can be implemented using only the existing 1003.1 interfaces. Since 1003.1 does not define a portable way to save and restore file position for a directory and cannot hold a file descriptor open for each directory level, the June, 1990 Standards Update IEEE 1003.1: System services interface - 6 - implementation must read and save all directory entries each time a new directory is visited. This requires only a single file descriptor (or whatever resource is used by by opendir()). If the underlying system does provide a way to save and restore file position for directories, the file-tree walk implementation can use it to reduce memory consumption. There was a discussion about whether it is possible (and preferable) to improve the low-level directory interfaces instead of adding new, high-level interfaces. Do the high-level interfaces really add new functionality for portable applications? Do they belong with the low-level operating system interfaces specified in 1003.1? Walking an unbounded file tree requires an unbounded number of directory file positions to be supported using a bounded number of file descriptors. Either seekdir() and telldir() are needed, or an unbounded number of opendir()'s must use a bounded number of file descriptors. The working group has already rejected seekdir() and telldir() because they cannot easily be supported on implementations that use a non-linear directory format. A prohibition of simple implementations of opendir() using file descriptors is also likely to be rejected. The underlying problem is that the orderedness of directory entries was implicit in the traditional implementations, but was not made fully explicit in 1003.1, partly out of a desire to permit alternate implementations (for instance, b-trees). As a result, orderedness must now be imposed by the application. On a non-linear directory implementation, if positioning is not supported, even opendir() must read in the whole directory. 3.1.5 Data-Interchange_Format The 1988 POSIX standard specified two data-interchange formats based on existing utilities. These define the data-stream encoding of a sequence of files, together with their pathnames and other attributes. The first format is based on tar and encodes files as a stream of 512-byte blocks. The second format is based on cpio and encodes files as an unblocked byte stream. The ISO POSIX group (JTC1/SC22/WG15) pointed out that both of these formats are incompatible with accepted international and U.S. standards. After some arm twisting, the 1003.1 working group agreed to devise a new data interchange format based on IS 1001: 1986, which is more or less equivalent to ANS X3.27-1987, the familiar ANSI labeled tape format. The current draft of 1003.1b includes the framework for the new specification, but a lot more work is needed. Previous meetings discussed alternate proposals. The topic has been strangely quiet lately, considering the confusion that may be expected when it goes to ballot. It wasn't discussed at the Utah meeting at all. June, 1990 Standards Update IEEE 1003.1: System services interface - 7 - 3.2 {_POSIX_PATH_MAX}: A Clarification The 1988 POSIX standard included two conflicting statements regarding {PATH_MAX} and {_POSIX_PATH_MAX}: one said that the null was included in the count; the other said that the null was excluded. Traditional implementations have included the trailing null; some new implementations have excluded the null. One alternative or the other had to be endorsed. The working group decided that {_POSIX_PATH_MAX} should not include the trailing null, since specifying this will not break currently conforming applications. 3.3 Headers and Name-Space Control Since 1003.1b is adding many new identifiers to the standard, there was discussion about whether new identifiers should be declared in new headers, or whether existing headers could be used, with new feature- test-macros to control visibility of the additional identifiers. It was agreed that although both headers and feature-test macros control identifier visibility, their functions are complementary. Headers are appropriately used to divide name-spaces horizontally, by functionality. Feature-test macros are appropriately used to divide name-spaces vertically, by specification level. With this understanding, the group decided that new identifiers will be declared in the ``right place.'' A new header will be created only if no existing header is functionally appropriate. A new feature-test macro will be specified by 1003.1b and subsequent revisions: _POSIX_1_SOURCE. This macro takes ordinal values, starting with 2 for 1003.1b, and will be incremented by 1 for every subsequent revision. If the value is 1, the effect will be the same as if _POSIX_SOURCE were defined. There are two changes here. The new name was used to indicate that the macro only controls the visibility of identifiers defined in POSIX.1. The usage was changed to allow the value to indicate the particular revision or supplement to the standard, rather than having to create a new macro each time. This should simplify the construction and maintenance of header files. 3.4 Requests Two requests were made by vendors trying to support POSIX behavior on non-UNIX file systems: + that {_POSIX_LINK_MAX} be reduced from 6 to 2 + that {_POSIX_PATH_MAX} be reduced from 255 to 252 June, 1990 Standards Update IEEE 1003.1: System services interface - 8 - Both requests were rejected. Either of these changes could have made existing conforming applications non-conforming. Even where the risk of breaking applications seemed small, the working group was reluctant to set a precedent without a pretty good rationale to protect them against similar requests in the future. 3.5 New Proposals Five proposals for new interfaces were submitted for inclusion in 1003.1b, many of which provoked lively discussion. Some were accepted, some were rejected, and others were deferred to allow a revised proposal to be submitted or to allow more time for consideration. 3.5.1 seteuid(),_setegid() Bob Lenk and Mike Karels proposed a set of changes to the way the effective user and group id's are handled, in order to provide better support for setuid/setgid programs. + Require that all implementations support the functionality of the saved user ID and saved group ID. These process attributes are set by the exec functions and by privileged calls to setuid() and setgid(). + Add seteuid() and setegid() as new functions that change only the effective user ID and effective group ID, respectively. A change is allowed if the proposed new user/group ID is the same as either the real user/group ID or the saved user/group ID. + Redefine the {_POSIX_SAVED_IDS} option to apply only to non- privileged calls to setuid() and setgid(). This proposal has general support in the working group, and will be included in the next draft of 1003.1b. The discussion of this proposal led to a general lament about how unclear the group model is in the 1988 POSIX standard, perhaps the result of a hasty marriage between the System V and BSD models. At the next meeting, the working group intends to add new text to P1003.1b to clarify the relation between the effective group ID and the supplementary group list. 3.5.2 Magnetic_Tape_Support The 1003.10 working group (Supercomputing Profiles) proposed new interfaces to support basic controller functions for magnetic tape drives, based on the ioctl() commands supported in 4.3BSD. Although support for these interfaces would be optional in 1003.1b, the working group decided that the functions should be further specified according to whether they are: + required for all types of tape drives; June, 1990 Standards Update IEEE 1003.1: System services interface - 9 - + required only for 9-track tape drives; + required only for cartridge tape drives; or + optional on all types of tape drives. The proposal needed further revision, but was generally supported by the working group. The submitted proposal also included interfaces for mounting labeled tape volumes. These were considered to be inappropriate for inclusion at this time and will be deferred until a later revision of the standard. 3.5.3 Checkpoint/Restart The 1003.10 working group also proposed new (optional) interfaces for checkpointing and restarting processes. This proposal is based on two existing implementations. The interfaces are intended to protect very-long-running applications from both scheduled shutdowns and unexpected failures of the system. The 1003.1 working group was not happy to have to deal with this and had lots of questions. Were programming interfaces for portable applications really needed, or was a command interface sufficient? How much state needed to be saved in the checkpoint? What if the processes depended on additional state information that was not in the checkpoint, such as file data or the states of other communicating processes or devices? In this case, the restart would only be successful if this additional state had not changed since the checkpoint. How could such changes be detected or prevented? What is the set of interfaces that an application can use and be sure that it can be checkpointed and restarted successfully, without dependencies on additional state? Should applications have a mechanism for checkpointing themselves, or for blocking an external request that they be checkpointed? Because a checkpoint/restart mechanism will have a major impact on implementations, and the requirements are not yet clear, the working group was unwilling to endorse the current proposal. A task force made up of representatives of the 1003.1 and 1003.10 working groups will be created to clarify the requirements and revise the proposal. This proposal is going to need a lot more discussion, so checkpoint restart interfaces will almost certainly not be included in P1003.1b, but they may be adopted in a subsequent revision. 3.5.4 Messaging The UniForum proposal for new messaging interfaces has been before the 1003.1 working group for a couple of meetings now. The proposed interfaces are intended as replacements for the message catalog interfaces specified in XPG3, and differ from those in several ways (since the discussion was fairly contentious, I'll try to be objective): June, 1990 Standards Update IEEE 1003.1: System services interface - 10 - + The XPG3 interfaces identify a message by the triple: <catalog name, set ID, msg ID>, where catalog name is a file name, and set ID and msg ID are integers. The UniForum interfaces identify a message by the triple: <locale name, domain name, message name>, where locale name, domain name, and message name are all strings. The locale for messages is specified by the new LC_MESSAGES category of the locale. Advocates of the UniForum proposal claim that string identifiers are easier to use and are more robust against errors during application development and maintenance. + In the XPG3 scheme, each message catalog is an ordinary file. Message catalogs must be specified by filename and explicitly opened before messages can be retrieved. The NLSPATH environment variable provides a search path for message catalogs that can be parameterized by (among other things) the language, territory, and codeset fields of the LANG environment variable. In the UniForum scheme, groups of messages are specified by an abstract ``domain.'' A default domain can be set to control message accesses, or the domain can be explicitly specified for an individual message access. Advocates of the UniForum proposal claim that the binding of message catalogs to files unnecessarily restricts implementations and imposes a more complex interface on application developers. + The XPG3 interface includes an additional string argument that is returned in case no message specified by <set ID, msg ID> can be retrieved from the message catalog. In the UniForum proposal, the message name itself is returned if the message cannot be found. Advocates of the UniForum proposal point out that the message name string makes a separate, ``default'' message string unnecessary. In addition, the UniForum proposal includes a specification of the message source file format that differs from the format specified in XPG3. + In the XPG3 format, message strings are implicitly delimited: at the beginning by the preceding message ID followed by a single space or tab character, and at the end by an unescaped newline. In the UniForum format, all strings, including domain names, message ID's, and message strings, are explicitly delimited by double quotes ("). Adjacent strings separated by white-space characters are concatenated. Advocates of the UniForum proposal claim that the new format provides better support for multi-line strings and for leading and trailing white-space characters in strings. + In the XPG3 format, the message ID and its corresponding message string are implicitly determined by their position on a source line. In the UniForum format, explicit directives are provided for message ID's and message strings. Advocates of the UniForum June, 1990 Standards Update IEEE 1003.1: System services interface - 11 - proposal claim that the new format is extensible. New attributes may be added to message entries, such as screen coordinates or font size. + The XPG3 format includes directives for deleting individual messages and sets of messages, and the associated gencat utility takes no switches. In the UniForum proposal, all deletion semantics are provided by switches on the associated gentext utility. There was much discussion of the interfaces; less about the source file format. The most divisive issue was whether string message ID's are preferable to numeric message ID's. Among those who felt that the new interfaces are better, there was disagreement about whether the advantages outweighed the cost of conversion for applications and implementations based on the XPG3 interfaces. The rationale accompanying the UniForum proposal described several ways to convert applications from the XPG3 interfaces to the proposed new interfaces. The working group asked X/Open to submit the XPG3 messaging interfaces as an alternate proposal, since they represent existing practice, and X/Open has agreed to do so. X/Open has said that they will follow POSIX if POSIX endorses a different interface. The decision regarding which, if any, messaging proposal to include in 1003.1b will be made at the POSIX meeting in Danvers. It's hard to predict the fate of this proposal. The UniForum proposal represents the consensus of one of the leading internationalization working groups and is reported to have some support within X/Open. On the other hand, the POSIX working groups are obliged to respect existing practice. Watch this space. 3.5.5 /dev/stdin,_/dev/fd/n,_etc. There was an unofficial proposal from members of the 1003.2 working group that open() be extended to recognize the special strings "/dev/stdin", "/dev/stdout", "/dev/stderr", and "/dev/fd/n", and return a new file descriptor dup()'ed from STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO, or file descriptor n, respectively. This proposal was intended to allow simplified command line parsing, by eliminating special casing for ``-'' and ``--'' arguments. The proposal was rejected after a short exploration of the possible semantics of these pathnames when used with link(), rename(), etc.. 4. Conclusion As you can see, there's a lot going on. Even though most of the attention has shifted to other working groups, the 1003.1 group is busy revising and extending the 1988 standard. The group is small now, by POSIX standards, but their work is as important as ever. June, 1990 Standards Update IEEE 1003.1: System services interface Volume-Number: Volume 20, Number 56
gwyn@smoke.brl.mil (Doug Gwyn) (06/30/90)
From: Doug Gwyn <gwyn@smoke.brl.mil> >There was a discussion about whether it is possible (and preferable) >to improve the low-level directory interfaces instead of adding new, >high-level interfaces. Do the high-level interfaces really add new >functionality for portable applications? Do they belong with the >low-level operating system interfaces specified in 1003.1? No, definitely not. However, they would be appropriate at the 1003.2 level. Note that 1003.2 implementations are not constrained to use only 1003.1 facilities, so the fact that it's hard to implement tree walkers right using the existing 1003.1 directory access functions is no argument against defining tree walkers as part of a higher level. >The ISO POSIX group (JTC1/SC22/WG15) pointed out that both of these >[tar, cpio] formats are incompatible with accepted international and U.S. >standards. After some arm twisting, the 1003.1 working group agreed >to devise a new data interchange format based on IS 1001: 1986, which >is more or less equivalent to ANS X3.27-1987, the familiar ANSI >labeled tape format. The ANSI magtape format is simply inappropriate. UNIX archives were designed to be single files, making it simple to transport them by means other than magnetic tape. In this modern networked world, for the most part magnetic tape is an anachronism. Any archive format standard for UNIX should not depend on the archive supporting multiple files, tape marks, or any other non-UNIX concept. It is to the credit of UNIX's original designers that they did NOT blindly adopt existing standards when they were technically inferior. Let's not make the POSIX standards impose conventional-think upon UNIX environments.. Volume-Number: Volume 20, Number 69
ok@goanna.cs.rmit.OZ.AU (Richard A. O'Keefe) (06/30/90)
Moderator!: Delete most of these lines (begin): Return-Path: <uunet!goanna.cs.rmit.OZ.AU!ok> Submitted-From: uunet!goanna.cs.rmit.OZ.AU!ok (Richard A. O'Keefe) Moderator!: Delete most of these lines (end). From: ok@goanna.cs.rmit.OZ.AU (Richard A. O'Keefe) >In <385@usenix.ORG> From: jsh@usenix.org, Paul Rabin <rabin@osf.org> > reports on the April 23-27 meeting in Salt Lake City, UT: >... > There was a discussion about whether it is possible (and preferable) > to improve the low-level directory interfaces instead of adding new, > high-level interfaces. Do the high-level interfaces really add new > functionality for portable applications? Do they belong with the > low-level operating system interfaces specified in 1003.1? In article <754@longway.TIC.COM>, gwyn@smoke.brl.mil (Doug Gwyn) writes: > From: Doug Gwyn <gwyn@smoke.brl.mil> > No, definitely not. However, they would be appropriate at the 1003.2 > level. If I want file tree walking, what's wrong with something on the order of FILE *files_selected = popen("find ......"); Presumably popen() and 'find' have to be in 1003.2 anyway. There is precisely one reason why I can't use this right now, and that is that 'find' doesn't quote its output, so if there is a file name with an embedded \n things break. That might be addressed by any number of methods; one simple method would be to add a -length subcommand which would do the equivalent of printf("%d %s\n", strlen(pathname), pathname); where the existing -print subcommand does the equivalent of printf("%s\n", pathname); If I understand Doug Gwyn correctly, that's the kind of thing he has in mind. It is, after all, no more than the traditional UNIX Way. By the way, I don't quite understand the file tree walking problem. Unless one has some absolutely compelling reason for requiring a depth-first search and not using /tmp files, something like 'find' can be done using - one file descriptor to send file names to (used sequentially) - one file descriptor for a work file (random access) - one directory descriptor or whatever (each directory being opened once, scanned once, and never looked at again) Basically you do a breadth-first search of directories, using the work file to hold the queue. If you want some other order, sort the output. This is, of course, vulnerable to directories being renamed while the walk is in progress, but so is a depth-first walker that can't hang on to all the directories in the current branch. -- "private morality" is an oxymoron, like "peaceful war". Volume-Number: Volume 20, Number 76
peter@ficc.ferranti.com (peter da silva) (07/02/90)
From: peter@ficc.ferranti.com (peter da silva) In article <754@longway.TIC.COM> From: gwyn@smoke.brl.mil (Doug Gwyn) > The ANSI magtape format is simply inappropriate. UNIX archives were > designed to be single files, making it simple to transport them by > means other than magnetic tape. In this modern networked world, for > the most part magnetic tape is an anachronism. Any archive format > standard for UNIX should not depend on the archive supporting > multiple files, tape marks, or any other non-UNIX concept. I disagree. There are just too many organisations using ANSI format magtapes. Tar and CPIO should both be retained, but the ability to read and write standard ANSI magtapes... if the hardware is available... should be part of a portable operating system standard. So for that matter should such things as different receive and transmit baud rates (ever hear of V.23 modems?), but that's another point. -- Peter da Silva. `-_-' +1 713 274 5180. <peter@ficc.ferranti.com> Volume-Number: Volume 20, Number 82
gwyn@smoke.brl.mil (Doug Gwyn) (07/03/90)
From: Doug Gwyn <gwyn@smoke.brl.mil>
In article <767@longway.TIC.COM> peter@ficc.ferranti.com (Peter da Silva) writes:
-In article <754@longway.TIC.COM> From: gwyn@smoke.brl.mil (Doug Gwyn)
-> The ANSI magtape format is simply inappropriate. UNIX archives were
-> designed to be single files, making it simple to transport them by
-> means other than magnetic tape. In this modern networked world, for
-> the most part magnetic tape is an anachronism. Any archive format
-> standard for UNIX should not depend on the archive supporting
-> multiple files, tape marks, or any other non-UNIX concept.
-I disagree. There are just too many organisations using ANSI format magtapes.
-Tar and CPIO should both be retained, but the ability to read and write
-standard ANSI magtapes... if the hardware is available... should be part
-of a portable operating system standard.
We're apparently not talking about the same thing. I was talking about
the POSIX standard for archiving collections of files. There is no
particular reason why that should require use of magnetic tape. I'm not
proposing that ANSI (or ISO) magtape standards not be followed where
appropriate; you could for example put a tar or cpio archive within a
file on an ANSI-labeled magtape. However, you can also put a tar or cpio
archive within a file on a disk, and you can ship it across a network as
a single entity, something that is not possible for ANSI magtapes in
general.
Volume-Number: Volume 20, Number 87
eric@egsner.cirr.com (Eric Schnoebelen) (07/03/90)
From: eric@egsner.cirr.com (Eric Schnoebelen)
In article <767@longway.TIC.COM> Peter da Silva writes:
- In article <754@longway.TIC.COM> From: gwyn@smoke.brl.mil (Doug Gwyn)
- > The ANSI magtape format is simply inappropriate. UNIX archives were
- > designed to be single files, making it simple to transport them by
- > means other than magnetic tape.
-
- I disagree. There are just too many organisations using ANSI format magtapes.
- Tar and CPIO should both be retained, but the ability to read and write
- standard ANSI magtapes... if the hardware is available... should be part
- of a portable operating system standard.
ANSI tape can be supported via a set of programs over the
standard Unix system (ConvexOS 8.0 and above do so, along with many
other "mainframe" tape subsystem features) but ANSI labeled tapes are
inappropriate for file archival. With a properly designed ANSI tape
subsystem, it is easy enough to have tar, and cpio (and even
dump/restore) use ANSI labeled tapes, and it can be totally transparent
to the user.
Thus, we have the POSIX standard archive on the ANSI standard
magnetic tape format..
--
Eric Schnoebelen eric@cirr.com schnoebe@convex.com
Churchill's Commentary on Man: Man will occasionally stumble over the
truth, but most of the time he will pick himself up and continue on.
Volume-Number: Volume 20, Number 88
YZE6041@vx.acs.umn.edu (david paul hoyt) (07/04/90)
From: david paul hoyt <YZE6041@vx.acs.umn.edu> > With a properly designed ANSI tape > subsystem, it is easy enough to have tar, and cpio (and even > dump/restore) use ANSI labeled tapes, and it can be totally transparent > to the user. And better yet, we'll have a standard way of dealing with multi-volumne tapes. It's hard enough to backup your own multi-gigabyte disk system, let alone send large databases to other (potentially non-unix) systems. david | dhoyt@vx.acs.umn.edu | dhoyt@umnacvx Volume-Number: Volume 20, Number 89
henry@zoo.toronto.edu (07/04/90)
From: henry@zoo.toronto.edu >From: peter@ficc.ferranti.com (peter da silva) >I disagree. There are just too many organisations using ANSI format magtapes. >Tar and CPIO should both be retained, but the ability to read and write >standard ANSI magtapes... if the hardware is available... should be part... Uh, Peter, go back and look at what Doug wrote. He never said anything, either positive or negative, about the ability to use ANSI magtapes. The point is that the ANSI magtape format assumes a storage medium which has notions like block boundaries and tape marks, and it is grossly mismatched to the requirement for a Unix archiving format. >...So for that matter should such things >as different receive and transmit baud rates (ever hear of V.23 modems?), >but that's another point. Peter, would it be too much to ask whether you have *read* the standards you are criticizing? 1003.1 supports split baud rates. Henry Spencer at U of Toronto Zoology henry@zoo.toronto.edu utzoo!henry Volume-Number: Volume 20, Number 91
domo@tsa.co.uk (Dominic Dunlop) (07/04/90)
From: Dominic Dunlop <domo@tsa.co.uk> In article <754@longway.TIC.COM> gwyn@smoke.brl.mil (Doug Gwyn) fulminates > The ANSI magtape format is simply inappropriate. UNIX archives were > designed to be single files, making it simple to transport them by > means other than magnetic tape. In this modern networked world, for > the most part magnetic tape is an anachronism. Any archive format > standard for UNIX should not depend on the archive supporting > multiple files, tape marks, or any other non-UNIX concept. Er. As Jason Zions points out in <770@longway.TIC.COM>, > A significant branch of the UNIX(tm)-system and POSIX research community > believes "All the world's a file"; the Research Unix V.8 and Plan 9 folks > are among the leaders here. I feel only slightly squeamish about accusing > them of having only a hammer in their toolbelt; of *course* everything > looks like a nail! The network as a featureless data stream is another example of the same ``traditional'' thinking in the UNIX community. Actually, the datagram-based schemes favoured in the US (oversimplifying grossly, we Europeans have a preference for connection-based systems which do deliver streams) can provide nice record boundaries, which could in turn be used to delimit labels for the proposed tape archive format (after adding some reliability and sequencing). Just because the format is based on IS 1003 for labelled magnetic tapes does not mean to say that it cannot be used on other media, networks among tham. After all, tar's a format for blocked magnetic tapes, but that hasn't stopped us moving tar archives over networks. -- Dominic Dunlop Volume-Number: Volume 20, Number 96
peter@ficc.ferranti.com (peter da silva) (07/04/90)
From: peter@ficc.ferranti.com (peter da silva) In article <776@longway.TIC.COM> henry@zoo.toronto.edu writes: > Uh, Peter, go back and look at what Doug wrote.... > Peter, would it be too much to ask whether you have *read* the standards > you are criticizing? ... Um, yes. I do seem to have written that with my brain disengaged. Apologies all round. -- Peter da Silva. `-_-' +1 713 274 5180. <peter@ficc.ferranti.com> Volume-Number: Volume 20, Number 99
gwyn@smoke.brl.mil (Doug Gwyn) (07/05/90)
From: Doug Gwyn <gwyn@smoke.brl.mil> In article <781@longway.TIC.COM> uunet!tsa.co.uk!domo@usenix.ORG writes: >After all, tar's a format for blocked magnetic tapes, ... No, it is not. A "tar" archive is merely a stream of bytes, all of whose structure is contained internally. The designers of "tar" and (to a lesser extent) "cpio" archive formats did, however, take into account the blocked nature of such media, so that it would be convenient to use such media to hold the archive. This was entirely appropriate and does not require that such media be used. Volume-Number: Volume 20, Number 97
johnz@grapevine.EBay.Sun.COM (John Zolnowsky ext. 33230) (07/10/90)
From: johnz@grapevine.EBay.Sun.COM (John Zolnowsky ext. 33230) In article <385@usenix.ORG>, jsh@usenix.org writes: > Paul Rabin <rabin@osf.org> reports on the April 23-27 meeting in Salt > Lake City, UT: > > 3.3 Headers and Name-Space Control > > A new feature-test macro will be specified by 1003.1b and subsequent > revisions: _POSIX_1_SOURCE. This macro takes ordinal values, starting > with 2 for 1003.1b, and will be incremented by 1 for every subsequent > revision. If the value is 1, the effect will be the same as if > _POSIX_SOURCE were defined. > > There are two changes here. The new name was used to indicate that > the macro only controls the visibility of identifiers defined in > POSIX.1. The usage was changed to allow the value to indicate the > particular revision or supplement to the standard, rather than having > to create a new macro each time. This should simplify the > construction and maintenance of header files. I recognize that programs must have some way of freezing the ever-growing POSIX namespace, but I have reservations about the approach implicit in the name _POSIX_1_SOURCE. I suspect that the "1" in _POSIX_n_SOURCE refers to 1003.1, as a working group or a standard. This creates a strictly historical binding between a function name and the working group which first needed to define an interface, and this binding will be perpetuated in code. As an example, imagine the goobledeegook when multi-threaded network servers must tree-walk and want to be cognizant of symlinks. Since it is planned that all these standards will be unified under the umbrella of ISO 9945-1 (or whatever future number the C-binding appears unders) it would seem more prudent to have a single feature-test macro, such as _POSIX_C_SOURCE, for which for increasing values expose the entire POSIX function namespace in historical order. This would place no further requirements upon implementations. Applications would be affected only when being modified to use POSIX extensions: they would then have to honor not only the namespace reservation of the extension, but of all of POSIX at the time the extension was standardized. Note that this requirement already exists for any other interfaces added by the working group which added the extension. -John Zolnowsky johnz@EBay.Sun.COM (408)276-3230 Volume-Number: Volume 20, Number 117
jason@cnd.hp.com (Jason Zions) (07/10/90)
From: Jason Zions <jason@cnd.hp.com> > Since it is planned that all these standards will be unified under the > umbrella of ISO 9945-1 (or whatever future number the C-binding appears > unders) it would seem more prudent to have a single feature-test macro, > such as _POSIX_C_SOURCE, for which for increasing values expose the > entire POSIX function namespace in historical order. This would place > no further requirements upon implementations. Applications would be > affected only when being modified to use POSIX extensions: they would > then have to honor not only the namespace reservation of the extension, > but of all of POSIX at the time the extension was standardized. Note > that this requirement already exists for any other interfaces added by > the working group which added the extension. This makes the assumption that there is indeed a single POSIX name space, to which pieces are added by the various working groups. This assumption, while a reasonable one, is in fact not correct. The various 1003.* working groups are *not* developing separate components of an overall, integrated POSIX standard. Each POSIX standard stands alone from all other POSIX standards *except* where that standard deliberately requires dependencies. For example, 1003.2 is intended to be implementable on systems which do not offer a 1003.1-compliant interface. So, a strictly-compliant 1003.2 application *could not* assume the presence of 1003.1 symbols et al., and would be permitted to make use of names otherwise reserved to 1003.1. Hence, there needs to be a separate feature-test macro to activate the 1003.2 name space etc. Worse yet, it appears that one of the POSIX Real Time Profiles may very well require only a subset of 1003.1; how on earth does one represent *that* using the _POSIX_C_SOURCE scheme? Jason Zions Volume-Number: Volume 20, Number 119
decot@hpisod2.cup.hp.com (Dave Decot) (07/12/90)
From: decot@hpisod2.cup.hp.com (Dave Decot) > 2. 1003.1a Status > > 1003.1a is the recently completed revision to the 1988 POSIX standard. > No new interfaces or features were introduced, but the text was > revised in several ways. The main reason for the revision was to This is not technically true. The following new features were added by POSIX.1a: ssize_t - signed version of the size_t type SSIZE_MAX - constant representing maximum value of ssize_t TZNAME_MAX - constant representing maximum length of a timezone name _SC_TZNAME_MAX - sysconf() variable argument for TZNAME_MAX POSIX_TZNAME_MAX - minimum value of TZNAME_MAX on POSIX.1a systems (it's 3) The following features were deleted (but are still permitted): cuserid() - definition conflicted with most existing practice CLK_TCK - non-existent definition imported from ANSI C standard The following interfaces were changed: ssize_t read(int fildes, void *buf, size_t count); ssize_t write(int fildes, const void *buf, size_t count); > The discussion of [the setegid(), etc.] proposal led to a general > lament about how unclear the group model is in the 1988 POSIX standard, > perhaps the result of a hasty marriage between the System V and BSD models. > At the next meeting, the working group intends to add new text to > P1003.1b to clarify the relation between the effective group ID and > the supplementary group list. It seemed rather clear to me. "Whether the effective group ID is included in or omitted from the list of supplementary group IDs is implementation-defined." In all cases when checking permission to access something, both the effective group ID and the list of supplementary group IDs should be compared to the group of the object in question; if either matches, the access should be granted. What were the unclarities that were identified? Dave Decot Volume-Number: Volume 20, Number 122
gwyn@smoke.brl.mil (Doug Gwyn) (07/13/90)
From: Doug Gwyn <gwyn@smoke.brl.mil> In article <9951@cs.utexas.edu> std-unix@uunet.uu.net writes: >From: Jason Zions <jason@cnd.hp.com> >Worse yet, it appears that one of the POSIX Real Time Profiles may very >well require only a subset of 1003.1; how on earth does one represent >*that* using the _POSIX_C_SOURCE scheme? Shouldn't 1003.0 step in here and exert some coordination? 1003.1 was deliberately not split into "levels" a la COBOL, and we meant it. A Real-Time extension could very well exist (say, number 1003.123a) and not require that 1003.1 be specified, but be useless in the absence of some subset of 1003.1 or equivalent, just as a hosted C implementation on UNIX does not specify that open() exist, but secretly requires a function with similar properties in order to be implemented at all. If the problem is that the extension wants to contradict some of 1003.1, then it is an INCOMPATIBLE standard (i.e. one could not specify simultaneous conformance with 1003.1 and 1003.123a), and I thought that standards organizations prohibited that. Volume-Number: Volume 20, Number 126
gwyn@smoke.brl.mil (Doug Gwyn) (07/15/90)
From: Doug Gwyn <gwyn@smoke.brl.mil> In article <9998@cs.utexas.edu> std-unix@uunet.uu.net writes: >From: decot@hpisod2.cup.hp.com (Dave Decot) >The following features were deleted (but are still permitted): > CLK_TCK - non-existent definition imported from ANSI C standard ? Did you also get rid of the times() function? CLK_TCK was left to 1003.1 by X3J11 for their exclusive use in converting times() results to/from seconds. The only thing that SHOULD have been changed is that 1003.1 should not say that ANSI C <time.h> defines CLK_TCK, because it doesn't. CLK_TCK should be defined by a 1003.1 implementation, though. Volume-Number: Volume 20, Number 130