Issue #9842 has been updated by Usaku NAKAMURA.


Akira Tanaka wrote:
> I intend this feature (Etc.sysconf, etc.) as low level API.
> 
> One of the feature I want is `Etc.confstr(Etc::CS_GNU_LIBC_VERSION)`.
> I feel it is not a good idea to define a high level interface for it.

I see.


> I like functions over command invocation.
> Command invocation depends various fragile factors (PATH, etc.) and difficult to treat errors.

Almost I can agree it.


> Of course, I agree some feature may be appropriate to be defined as high level interface.
> People will find such feature more easily because 
> this feature makes low level features more visible.

I was convinced by this explanation.  Thank you.

----------------------------------------
Feature #9842: system configuration variables (sysconf(), confstr(), pathconf() and fpathconf())
https://bugs.ruby-lang.org/issues/9842#change-46801

* Author: Akira Tanaka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
----------------------------------------
How about providing methods to obtain system configuration variables?

POSIX defines sysconf(), confstr(), pathconf() and fpathconf().
I implemented following methods in ext/etc.

* Etc.sysconf(name)
* Etc.confstr(name)
* IO.pathconf(name)
* IO#pathconf(name)

POSIX defines some names.
Various operating sysmtems define additional names.

They can be used as follows:

```
Etc.sysconf(Etc::SC_ARG_MAX) #=> 2097152
Etc.sysconf(Etc::SC_NPROCESSORS_ONLN) #=> 4
Etc.confstr(Etc::CS_PATH) #=> "/bin:/usr/bin"
Etc.confstr(Etc::CS_GNU_LIBC_VERSION) #=> "glibc 2.18"
IO.pathconf("/", Etc::PC_NAME_MAX) #=> 255
open("/") {|f| p f.pathconf(Etc::PC_TIMESTAMP_RESOLUTION) } #=> 1
```

I implemented them in ext/etc because I interpreted "etc" as
system configuration.

Any idea?


---Files--------------------------------
sysconf-confstr-pathconf.patch (13 KB)
sysconf-confstr-fpathconf.patch (12.1 KB)


-- 
https://bugs.ruby-lang.org/