I've mentioned in a few threads that I'd believe a separate sub-board for POSIX.1 C99 programming here would be useful, and avoid newcomer frustration and confusion.
For those who are not familiar with POSIX.1, also known as IEEE standard 1003.1, I'd recommend taking a look at the Wikipedia POSIX article, and the POSIX.1-2008 specification at the Open Group web site.
In this forum, discussions involving POSIX.1 C have occurred in either the C programming sub-board or the Linux programming sub-board, but both are somewhat odd and incorrect. For one, POSIX.1 is a separate standard to C standards, and for another, POSIX.1 C99 works not only in Linux, but also in *BSDs (FreeBSD, OpenBSD, NetBSD, and so on), as well as in Mac OS X. The key point is that it is portable across several operating systems, and not just among free/libre ones. Furthermore, GNU tools are not the only implementation in Linux, either; even Intel provides a Linux C compiler suite that is widely used (in scientific computing in particular, which often leverages POSIX.1 plus MPI libraries, in my experience).
I am not aware of any discussion forum that has a dedicated sub-board for POSIX.1 C99.
The reasons why I think a separate sub-board would be useful, is that many tasks that beginner programmers start with, are both easier to solve, and solved in a more robust manner, when using the POSIX.1 interfaces. A few example cases:
- Reading standard input or a file line by line
Using getline() there are no line length limitations (other than available memory).
- Traversing directory trees, finding files, matching files using glob patterns
nftw(), glob(), fnmatch(), scandir()
- Searching for specific text in input
POSIX has regex built-in to the C library (no external libraries needed) that provides POSIX basic regular expressions, which are commonly used and very powerful, and very easy to implement.
- Basic TCP/IP networking and name resolution
POSIX sockets are extremely similar to BSD sockets (send(), recv(), but add functions like getaddrinfo() and getnameinfo() for easy name resolution for IPv4 and IPv6 addresses (basically letting the user handle both protocols with the same code).
Of course, POSIX provides other, more advanced stuff too, like signals and threads (although threads do have minor behavioural differences in e.g. Linux). Memory mapping techniques (mmap() et al) are only minimally described in POSIX.1-2008, but current implementations (across Linux, *BSDs, and Mac OS X at least) have already converged to a mostly compatible set, indicating likely standardization in future POSIX versions.
I've also emphasized C99 above, because it provides further features that make efficient portable code possible (in particular, standard integer types, variable argument lists, and flexible array members), compared to earlier C standards.
The reason these are useful, is that they are already widely used in practice. Many new developers learn the standard C I/O first, but then, in real life, they need to re-learn a better way when they start writing code used and/or developed by/with others, too. In my experience, they also express dismay at having had to learn "an archaic way of doing things", when an easier, more robust, and more efficient way was already at their fingertips, except that nobody talked about them -- or talked of them only as "GNU extensions" or "Linux stuff", which they aren't.
Although Microsoft did at one point provide a POSIX implementation, and cygwin does provide most of POSIX even on Windows, Microsoft Windows is the one OS that does not by default provide the POSIX.1 interfaces. Others do, however; and the situation might change at some point even on Windows, at least up to a point. In 2015, we know that C99 and POSIX.1-2008 is portable to basically all other widely-used desktop and server operating systems.
What I do not know, and would like to know, are the downsides of having such a board.
Because I do not personally use Windows, I obviously lack the view of a large fraction of desktop users. I don't even know the fraction of developers that work exclusively on the Windows platform, but as there is already a Windows programming forum, I don't think it should be an issue. I do not want to exclude anyone, or create an appearance of such; but as things stand, many programmers learn only inefficient ways to solve problems, using tools we already have (mostly) improved on.
I am personally afraid that some of the heated discussions I have had about these, in particular with members who do not use the interfaces, are actually lessening the value of the discussions to other members. That is wasteful, undesirable. I've already limited my participation for a duration once for that exact reason -- I am not here to cause discomfort/dissonance/conflict; my only reason for participating is helping others learn.
I'd also like to know if the experiences I've observed from new C developers using POSIX-y OSes are common in general, or for some reason limited to my narrow experience only. It is entirely possible that in the larger picture, not many of those developing on POSIX-y plaforms feel a separate POSIX C forum would even be useful here.
Finally, if there are extrinsic reasons why another sub-board is not feasible at this time, please let me know, webmaster, and I won't take it up again. Even so, I'd be interested to hear others' experiences and opinions.