Utility API
Oasis에서 쓰이는 유용한 함수들입니다.
헤더 파일
OasisNet.h
OasisUtil.h
네트워크
기기에 설치된 네트워크 인터페이스 이름 목록을 얻습니다.
ifnames[][IFNAMSIZ]
OUT
네트워크 인터페이스 이름 목록을 리턴합니다.
ifnames_size
네트워크 인터페이스 이름 목록 최대 크기입니다.
flags
검색 시 적용 될 플래그 값입니다.
네트워크 인터페이스 개수를 리턴합니다. 실패할 경우 -1을 리턴합니다.
플래그 값은 아래 값을 OR'ing 합니다.
#define NETIF_LIST_F_LOOPBACK_INCLUDED 0x0001
#define NETIF_LIST_F_MULTICAST_SUPPORTED 0x0002
NETIF_LIST_F_LOOPBACK_INCLUDED 검색 시 루프백 장치도 포함시킵니다.
NETIF_LIST_F_MULTICAST_SUPPORTED 검색 시 멀티캐스트를 지원하는 네트워크 인터페이스만 포함시킵니다.
기기에 설치된 네트워크 인터페이스 이름 목록과 인덱스 목록을 얻습니다.
ifnames[][IFNAMSIZ]
OUT
네트워크 인터페이스 이름 목록을 리턴합니다.
ifindices[]
OUT
네트워크 인터페이스 인덱스 목록을 리턴합니다.
ifnames_size
네트워크 인터페이스 이름과 인덱스 목록 최대 크기입니다.
flags
검색 시 적용 될 플래그 값입니다.
네트워크 인터페이스 개수를 리턴합니다. 실패할 경우 -1을 리턴합니다.
현재 동작 중인 네트워크 인터페이스 이름과 하드웨어 주소를 얻습니다.
ifname
OUT
네트워크 이름을 리턴합니다.
ifname_size
네트워크 이름 버퍼의 크기입니다. 바이트 단위입니다.
macaddr
OUT
하드웨어 주소를 리턴합니다.
maclen
하드웨어 주소 버퍼의 크기입니다. 바이트 단위입니다.
소켓에 연결된 하드웨어 주소를 얻습니다.
s
소켓 핸들 번호입니다.
macaddr
OUT
하드웨어 주소를 리턴합니다.
maclen
하드웨어 주소 버퍼의 크기입니다. 바이트 단위입니다.
네트워크 인터페이스 이름에 해당하는 하드웨어 주소를 얻습니다.
ifname
네트워크 인터페이스 이름입니다.
macaddr
OUT
하드웨어 주소를 리턴합니다.
maclen
하드웨어 주소 버퍼의 크기입니다. 바이트 단위입니다.
네트워크 인터페이스 이름의 네트워크 환경 설정을 얻습니다.
if_name
네트워크 인터페이스 이름입니다.
netaddr
OUT
IPv4 주소를 리턴합니다.
netmask
OUT
Netmask를 리턴합니다.
gateway
OUT
게이트웨이 주소를 리턴합니다.
주소가 같은 로컬 네트워크에 있는지 확인합니다.
-
true: 같은 로컬 네트워크에 있습니다.
-
false: 다른 네트워크에 있습니다.
주소가 내 기기의 IPv4 주소인지 확인합니다.
-
true: 내 네트워크 주소입니다.
-
false: 내 네트워크 주소가 아닙니다.
네트워크 주소를 문자열로 변환합니다. 변환된 문자열은 <IPv4 주소>/<포트번호> 형식입니다.
소켓에 연결된 네트워크 인터페이스의 인덱스를 얻습니다.
성공하면 네트워크 인터페이스 인덱스 번호를 리턴하고, 실패하면 -1을 리턴합니다.
로컬 주소에 연결된 네트워크 인터페이스의 인덱스를 얻습니다.
성공하면 네트워크 인터페이스 인덱스 번호를 리턴하고, 실패하면 -1을 리턴합니다.
네트워크 인터페이스 이름이 유효한지 확인합니다.
netif_name
네트워크 인터페이스 이름입니다.
-
true: 유효합니다.
-
false: 유효하지 않습니다.
네트워크 인터페이스 이름 목록이 모두 유효한지 확인합니다.
network_interfaces
콤마(,)로 구분되는 네트워크 인터페이스 이름 목록입니다. 예를들어 "eth0,wlan0"와 같은 형식입니다.
모두 유효한 경우 "true"를 리턴합니다. 하나라도 유효하지 않으면 "false"를 리턴합니다.
네트워크 인터페이스 이름 목록을 얻습니다.
network_interfaces
콤마(,)로 구분되는 네트워크 인터페이스 이름 목록입니다. nullptr이 아니면, 이 목록에 있는 네트워크 인터페이스 이름이 유효한지 확인하고, 하나라도 유효하지 않다면 -1을 리턴합니다. 모두 유효하면 이 목록 이름을 리턴합니다. nullptr이면 기기에 있는 네트워크 인터페이스 이름 목록을 flags 값에 따라 찾아서 리턴합니다.
ifnames[][IFNAMSIZ]
OUT
네트워크 인터페이스 이름 목록을 리턴합니다.
ifnames_size
네트워크 인터페이스 이름 목록 최대 크기입니다.
flags
검색 시 적용 될 플래그 값입니다.
성공할 경우 목록 크기를 리턴합니다. 실패할 경우 -1을 리턴합니다.
네트워크 인터페이스에 연결된 네트워크가 다운되었는지 확인합니다.
-
true: 네트워크 다운 상태입니다.
-
false: 네트워크 업 상태입니다.
Oasis DNS 클라이언트 컴포넌트를 활성화합니다.
enable
true이면 활성화하고, false이면 비활성화합니다.
Oasis DNS 클라이언트 컴포넌트가 사용할 네트워크 트랜스포트 유형을 지정합니다.
transport
"0" 값은 TCP를 사용하며, "1" 값은 UDP를 사용합니다.
Oasis DNS 클라이언트 컴포넌트가 FQDN를 얻기까지 기다리는 최대 시간을 설정합니다.
timeout
최대 대기 시간입니다. 밀리초 단위입니다.
FQDN를 DNS 서비스를 이용하여 IPv4 주소로 변환합니다.
netaddr
FQDN 입니다. 예를 들어 "www.mediastek.com"과 같이 정규화된 이름입니다.
addr4_ptr
OUT
변환된 주소 문자열을 리턴합니다.
use_systemd
true이면 시스템의 DNS 서비스를 사용합니다. false이면 Oasis DNS 서비스를 사용합니다.
FQDN에서 DNS 서비스를 이용하여 IPv4 주소 목록을 얻습니다. 하나의 FQDN이 여러 IPv4 주소를 갖을 경우에 유용합니다.
netaddr
FQDN 입니다. 예를 들어 "www.mediastek.com"과 같이 정규화된 이름입니다.
addrs
OUT
변환된 IPv4 주소 목록을 리턴합니다.
인코딩된 URL을 디코딩합니다.
url
인코딩된 URL 문자열입니다.
len
문자열 길이입니다.
decoded_url
OUT
디코딩된 URL 문자열을 리턴합니다.
성공할 경우 디코딩된 URL 문자열의 길이를 리턴합니다. 실패할 경우 -1을 리턴합니다.
URL을 인코딩합니다.
url
인코딩할 URL입니다.
encoded_url
OUT
인코딩된 URL 문자열을 리턴합니다.
성공할 경우 인코딩된 URL 문자열의 길이를 리턴합니다. 실패할 경우 -1을 리턴합니다.
파일 확장자를 MIME 타입으로 변환합니다. 지원되는 확장자는 Oasis 초기화 시에 사전에 등록되어 있거나 API를 통하여 동적으로 등록해야 합니다. 대소문자를 구분하지 않습니다.
extension
확장자를 가리키는 문자열 포인터입니다.
파일 확장자를 지원하는 경우, 그 파일에 해당되는 MIME 타입을 리턴합니다. 모르는 확장자의 경우, "application/octet-stream"를 리턴합니다.
일반적인 파일 확장자가 있는 파일 이름에서 MIME 타입을 리턴합니다.
지원하는 확장자에 대해서 MIME 타입을 리턴하고, 지원하지 않는 확장자에 대해서는 "application/octet-stream"을 리턴합니다.
아래는 Oasis가 인식하는 파일 확장자별 MIME 타입 표입니다.
| 확장자 |
MIME 타입 |
| html, htm, osp |
text/html |
| png |
image/png |
| gif |
image/gif |
| bmp |
image/bmp |
| jpeg, jpg |
image/jpeg |
| css |
text/css |
| js |
application/x-javascript |
| mp4 |
video/mp4 |
| avi |
video/x-msvideo |
| cgi |
text/html |
| pdf |
application/pdf |
| 그외 |
application/octet-stream |
문자열
바이트 배열 데이터를 16진수 문자열로 변환합니다. 한 바이트는 2개의 16진수로 변환됩니다. 리턴된 문자열의 길이는 데이터 길이의 2배입니다.
data
바이트 배열 데이터 포인터입니다.
length
배열 길이입니다.
lowercase
"true"이면 소문자 16진수(abcdef)를 사용합니다. "false"이면 대문자 16진수(ABCDEF)를 사용합니다.
16진수로 구성된 문자열입니다. 예를 들어, lowercase 값이 "true"연 경우, 5f1bc26509002142b6f2와 같이 변환됩니다. lowercase 값이 "false"이면 5F1BC26509002142B6F2와 같이 변환됩니다.
바이트 배열 데이터를 한 줄이 16바이트로 이루어지고, 각 줄은 16진수와 ASCII로 구성된 Hex Dump 양식의 문자열을 리턴합니다.
data
바이트 배열 데이터 포인터입니다.
length
배열 길이입니다.
lowercase
"true"이면 소문자 16진수(abcdef)를 사용합니다. "false"이면 대문자 16진수(ABCDEF)를 사용합니다.
아래는 toHexDumpString 예입니다.
" 00000000 33 59 c6 dd 97 07 1d d4 3b d3 5c 40 b3 b0 c9 a4 3Y......;.\@....\n 00000010 f1 0b 36 39 59 5c ed e8 dd 63 42 ce f9 d0 88 2c ..69Y...cB....,\n 00000020 29 4e 09 c0 \n"
이 문자열을 콘솔에 출력하면 아래와 같이 보입니다.
00000000 33 59 c6 dd 97 07 1d d4 3b d3 5c 40 b3 b0 c9 a4 3Y......;.\@....
00000010 f1 0b 36 39 59 5c ed e8 dd 63 42 ce f9 d0 88 2c ..69Y\...cB....,
00000020 29 4e 09 c0 )N..
바이트 배열 데이터를 각각 ASCII 값으로 변환된 문자열을 리턴합니다. 출력되지 않는 문자의 경우는 "." 로 변환됩니다. 예를 들어, .p.j..#...Pp...[.av.r.H...o'.Z.D.. 이런 형식으로 리턴합니다.
data
바이트 배열 데이터 포인터입니다.
length
배열 길이입니다.
32비트 배열 데이터를 "."로 구분된 문자열로 변환합니다. 예를 들어 561719494.513318045.664304121.498333846 이런 형식으로 리턴합니다.
data
32비트 배열 데이터 포인터입니다.
length
배열 길이 입니다.
바이트 배열 데이터를 "."로 구분된 문자열로 변환합니다. 예를 들어 70.230.47.188.127.96 이런 형식으로 리턴합니다.
data
바이트 배열 데이터 포인터입니다.
length
배열 길이입니다.
문자열이 숫자(0123456789)로만 구성되어있는지 확인합니다.
-
true: 숫자로만 구성되어 있습니다.
-
false: 숫자 외에 다른 문자로 구성되어 있습니다.
문자열이 16진수(0123456789abcdefABCDEF)로만 구성되어있는지 확인합니다.
-
true: 16진수로만 구성되어 있습니다.
-
false: 16진수 외에 다른 문자로 구성되어 있습니다.
서식화된 문자열을 리턴합니다. 서식은 printf와 동일합니다.
format
서식 포맷 문자열입니다.
...
인수 리스트입니다.
인자로 va_list를 받아서 서식화된 문자열을 리턴합니다. 서식은 printf와 동일합니다.
format
서식 포맷 문자열입니다.
args
인수 리스트입니다.
문자열에서 from 문자열을 to 문자열로 변경합니다.
str
IN
OUT
문자열입니다.
from
찾을 문자열입니다.
to
대체될 문자열입니다.
문자열을 숫자로 변환합니다. 문자열이 "0x" 또는 "0X"로 시작되면 16진수 문자열로 간주하여 16진수를 숫자로 변환됩니다. 그렇치 않은 경우, 10진수로 간주됩니다. 10진수 문자열 도중에 \xNN 같은 16진수 표기가 있으면 이 부분만 16진수를 숫자로 변환됩니다. 숫자 기호로 인식이 되는 부분까지만 숫자로 변환됩니다.
문자열을 배열로 변환합니다. 문자열이 "0b" 또는 "0B"로 시작되면 이진수로 간주되어, 8비트씩 묶어서 한 바이트 값으로 변환됩니다. 마지막 바이트가 완전한 8비트가 아니면 채우지 못한 비트 수가 padding_bits_ptr에 리턴됩니다. 예를 들어 "110" 으로 3비트만 채우면, 5 값이 리턴되고, 배열의 마지막 요소 값은 "192" (이진수로는 "1100 0000") 이 됩니다. 문자열이 "0x" 또는 "0X"로 시작되면 16진수 문자열로 간주하여 2개의 16진수 문자를 한 바이트 숫자 값으로 변환되어 저장됩니다. 그외의 경우, 문자열 한 글자를 그대로 배열에 한 바이트씩 저장되며, 이 문자열 도중에 "\xNN"이 있으면 NN을 16진수 문자로 간주하여 변환된 숫자값이 저장되고, "\0"이 있으면 "0"이 저장되고, "\"이 있으면 "\"이 저장됩니다.
string
문자열 포인터입니다.
buffer
변환될 버퍼 포인터입니다.
size
버퍼 크기입니다. 바이트 단위입니다. 최소 문자열 길이 만큼 지정합니다.
padding_bits_ptr
OUT
이진수 변환일 경우, 마지막 채우지 못 한 비트 수를 리턴합니다.
바이트 배열 크기를 리턴합니다. 실패할 경우, -22 (EINVAL) 값을 리턴합니다.
Base64
BASE64 인코딩된 문자열을 디코딩한 데이터를 얻습니다.
out
OUT
디코딩 결과를 저장할 버퍼 포인터입니다.
in
BASE64 인코딩된 문자열입니다.
out_length
디코딩 결과가 저장될 버퍼의 길이입니다. 바이트 단위입니다. 인코딩된 문자열 길이보다 작습니다.
성공하면 디코딩된 데이터 길이를 리턴합니다. 실패하면 -1을 리턴합니다.
데이터를 BASE64 인코딩한 문자열을 얻습니다.
buf
인코딩된 문자열을 저장할 버퍼 포인터입니다.
buf_len
인코딩된 문자열을 저장할 버퍼 길이입니다. 바이트 단위입니다.
src
인코딩할 데이터 포인터입니다.
len
인코딩할 데이터 길이입니다. 바이트 단위입니다.
line_length
0이 아닐 경우, 인코딩 문자열을 line_length 길이만큼 한줄씩 끊어서 리턴합니다. 각 줄 구분은 "\a"으로 합니다.
성공하면 인코딩된 문자열 길이를 리턴합니다. 만일 여러줄로 이루어진 경우, 줄 구분자인 "\a" 개수도 포함됩니다. 3줄이면, 실제 인코딩된 길이보다 2가 더 큽니다. 실패하면 -1을 리턴합니다.
아래는 line_length 가 0 인 경우, BASE64 인코딩한 문자열입니다.
BN+faS4nrqxihBlI7FrA/ouSVhdvYqNNWzVdZxkMPB3r24YZAjTFZLnerKU4bKTE/vrbbV1+u7i0GB/NJFvqDzZwKDik7Zxdy0gDBLSnyLKhox/+Idq21fPVohcwjCdm/E+eoT06/giCAQw2qNToSncISJni/27V1BHtBZ0=
아래는 line_length 가 32 인 경우, BASE64 인코딩한 문자열입니다.
BN+faS4nrqxihBlI7FrA/ouSVhdvYqNN<0x0a>
WzVdZxkMPB3r24YZAjTFZLnerKU4bKTE<0x0a>
/vrbbV1+u7i0GB/NJFvqDzZwKDik7Zxd<0x0a>
y0gDBLSnyLKhox/+Idq21fPVohcwjCdm<0x0a>
/E+eoT06/giCAQw2qNToSncISJni/27V<0x0a>
1BHtBZ0=
Random 데이터와 UUID
랜덤 바이트 배열을 얻습니다.
buf
랜덤 바이트 배열을 저장할 버퍼 포인터입니다.
length
버퍼 크기입니다. 바이트 단위입니다.
UUID 문자열을 얻습니다. 예를 들어 1c7ffde7-ae42-1ce9-ae55-8000206779f2 와 같은 양식의 문자열입니다.
시간
timeval 구조체를 "yyyy/mm/dd hh:mm:ss" 양식으로 변환된 문자열로 얻습니다. UTC+0 기준입니다. 예를 들어 2000/06/07 21:34:39 이런 양식으로 변환됩니다.
tv
변환될 timeval 구조체 포인터입니다.
두 timeval 구조체의 차이를 리턴합니다.
x
timeval 구조체 포인터입니다.
y
timeval 구조체 포인터입니다.
x-y 값을 리턴합니다. 단위는 마이크로초 입니다.
CLOCK_MONOTONIC 값을 얻습니다. 시스템 부팅 후 단순 증가하는 타이머 값입니다.
tv
OUT
저장될 timeval 구조체 포인터입니다.
시스템 부팅 후 단순 증가하는 타이머 값을 얻습니다. 마이크로 초 단위입니다.
timespec 값을 마이크로초 값으로 변환된 값을 얻습니다. timespec은 nano 초 값을 표현할 수 있습니다.
timespec 값을 마이크로초 값으로 변환된 값을 얻습니다. timespec은 nano 초 값을 표현할 수 있습니다.
마이크로초를 시,분,초,마이크로초로 분해합니다.
usec
마이크로 초 값입니다.
h
OUT
시간을 리턴합니다. 시간 값은 24(하루)를 넘을 수 있습니다.
m
OUT
분을 리턴합니다.
s
OUT
초를 리턴합니다.
u
OUT
마이크로 초를 리턴합니다.
패러미터 맵
두 개의 key-value map을 합칩니다. prefix_string이 주어지면 이 문자열을 접두어로 갖는 키는 이 접두어를 제거한 키 이름으로 변경된 후 합쳐집니다.
tag_string
로그 출력 등에 단순 참조용으로 사용될 TAG 문자열입니다.
to_parameters
IN
OUT
합체한 결과물이 리턴되는 패러미터 맵입니다.
from_parameters
합체할 key-value 요소를 찾을 패러미터 맵입니다.
prefix_string
nullptr이 아니면 이 인수에 지정된 문자열을 접두어로 한 키를 from_parameters에서 찾아서 접두어를 제거한 키를 사용합니다. 예를 들어 prefix_string이 channel1- 이고, from_parameters에 channel1-fps 라는 키가 있다면, 머지될 키는 fps가 됩니다.
copy_prefixed_pair_only
"true"이면 channel1- 등과 같이 키의 접두어가 매치되는 key-value 요소만 합칩니다. "false"이면, prefix_string가 지정된 경우는 이 접두어를 뺀 키의 요소를 합치고, 다른 키는 수정없이 합쳐집니다.
두 개의 key-value map을 합칩니다. prefix_string이 주어지면 이 문자열을 접두어로 갖는 키는 이 접두어를 제거한 키 이름으로 변경된 후 합쳐집니다. excluded_prefix_string이 주어질 경우, 이 접두어로 갖는 키는 합체에서 제외됩니다.
tag_string
로그 출력 등에 단순 참조용으로 사용될 TAG 문자열입니다.
to_parameters
IN
OUT
합체한 결과물이 리턴되는 패러미터 맵입니다.
from_parameters
합체할 key-value 요소를 찾을 패러미터 맵입니다.
prefix_string
nullptr이 아니면 이 인수에 지정된 문자열을 접두어로 한 키를 from_parameters에서 찾아서 접두어를 제거한 키를 사용합니다. 예를 들어 prefix_string이 channel1- 이고, from_parameters에 channel1-fps 라는 키가 있다면, 머지될 키는 fps가 됩니다.
excluded_prefix_string
nullptr이 아니면 이 인수에 지정된 문자열을 접두어로 한 키를 from_parameters에서 찾아서 합체에서 제외시킵니다.
copy_prefixed_pair_only
두 개의 key-value map을 합칩니다. exclude_regex 로 주어진 정규식 문자열에 매치되는 키 이름은 합체에서 제외됩니다.
tag_string
로그 출력 등에 단순 참조용으로 사용될 TAG 문자열입니다.
IN
OUT
합체한 결과물이 리턴되는 패러미터 맵입니다.
from_parameters
합체할 key-value 요소를 찾을 패러미터 맵입니다.
exclude_regex
합체에서 제외할 요소의 키 이름을 찾을 정규식입니다.
key-value map을 로그 메세지로 출력합니다.
tag
로그 출력 시 TAG로 사용될 문자열 포인터입니다.
parameters
덤프할 key-value map입니다.
key
nullptr이 아니면 이 키값을 가지고 있는 요소만 출력합니다.
INI 파일
get_profile_section, get_profile_section_names, get_profile_string, write_profile_string 함수는 모두 확장자가 ini 타입인 파일의 내용을 다룹니다.
ini 파일은 여러 개의 섹션으로 구성되어 있으며, 각 섹션은 <키 이름>=<값> 줄로 이루어져 있습니다. # 나 ; 는 코멘트 구분 기호로 사용됩니다. <값> 에 공백을 포함하는 경우, 큰따옴표로 시작하여 큰따옴표로 끝납니다. 섹션 이름은 대소문자 구별됩니다.
; 코멘트
# 코멘트
[섹션1 이름]
키이름=값 # 코멘트
키이름=값 ; 코멘트
예로 아래와 같습니다.
[general]
key1=value1
key2="general value2" ; comment
[section1]
key1=section1_value1
key2="section1 value2" ; comment
[section2]
key1=section2_value1
key2="section2 value2" ; comment
file 에서 섹션을 찾아서, "키=값" 리스트를 얻습니다. 해당 줄에 코멘트가 있으면 코멘트도 포함됩니다. 리스트의 각줄은 공백문자('\0')로 끝납니다. 마지막에는 공백문자('\0')가 더 붙습니다.
section
찾고자 하는 섹션 이름을 가리키는 문자열 포인터입니다.
buf
OUT
"키=값" 목록을 저장할 버퍼의 포인터입니다.
buf_size
버퍼 크기입니다. 바이트 단위입니다.
file
ini 파일 경로입니다.
성공하면, "키=값" 리스트 크기를 리턴합니다. 바이트 단위입니다. 실패하면, -1을 리턴합니다.
:[general], __data=0xffffeafcf4c8, __size=47 of 47:
00000000 6b 65 79 31 3d 76 61 6c 75 65 31 00 6b 65 79 32 key1=value1.key2
00000010 3d 22 67 65 6e 65 72 61 6c 20 76 61 6c 75 65 32 ="general value2
00000020 22 20 20 3b 20 63 6f 6d 6d 65 6e 74 00 00 00 " ; comment...
file 에서 섹션 이름 목록을 얻습니다. 각 줄은 공백문자('\0')로 끝납니다. 마지막에는 공백문자('\0')가 더 붙습니다.
buf
섹션 이름 리스트가 저장될 버퍼 포인터입니다.
buf_size
버퍼 크기입니다. 바이트 단위입니다.
file
ini 파일 경로입니다.
성공하면, 섹션 이름 리스트 크기를 리턴합니다. 바이트 단위입니다. 실패하면, -1을 리턴합니다.
:section list, __data=0xffffeafcf4c8, __size=27 of 27:
00000000 67 65 6e 65 72 61 6c 00 73 65 63 74 69 6f 6e 31 general.section1
00000010 00 73 65 63 74 69 6f 6e 32 00 00 .section2..
file 에서 section 에 있는 key 키 이름을 갖는 엔트리의 값을 얻습니다.
section
찾고자 하는 섹션 이름을 가리키는 문자열 포인터입니다.
key
찾고자 하는 섹션 내 키 이름을 가리키는 문자열 포인터입니다.
default_str
key를 못 찾을 경우, 버퍼에 저장될 기본값입니다. nullptr 이고, key가 발견되지 않는 경우, -1을 리턴합니다. 빈 문자열도 가능합니다.
buf
OUT
값이 저장될 버퍼의 포인터입니다.
buf_size
버터 크기입니다. 바이트 단위입니다.
file
ini 파일 경로입니다.
성공하면, 값 문자열 길이를 리턴합니다. 빈 문자열일 경우 0을 리턴합니다. 실패하면 -1을 리턴합니다.
file 에서 section 에 있는 key 키 이름을 갖는 엔트리의 값을 str 문자열로 덮어씁니다. str 내에 공백문자(스페이니나 탭 문자)가 있으면 큰따옴표가 문자열의 앞과 뒤에 붙습니다. str이 nullptr이면, key 엔트리를 삭제합니다.
section
찾고자 하는 섹션 이름을 가리키는 문자열 포인터입니다.
key
찾고자 하는 섹션 내 키 이름을 가리키는 문자열 포인터입니다.
str
새 값으로 덮어쓸 문자열 포인터입니다.
file
ini 파일 경로입니다.
파일 경로
파일 경로에서 파일이름과 구분자(.)와 확장자로 구성된 Leaf 문자열을 얻습니다.
경로의 Leaf 문자열을 리턴합니다. Leaf가 없다면 비어있는 문자열을 리턴합니다.
파일 경로에서 확장자를 제외한 파일 이름을 얻습니다.
path
파일 경로입니다.
make_lower
"true"이면 소문자로 변환되어 리턴됩니다. "false"이면 대소문자 변환없이 리턴됩니다.
파일 이름을 리턴합니다. 파일이름이 없으면 비어있는 문자열을 리턴합니다.
파일 경로에서 파일의 확장자를 리턴합니다.
path
파일 경로입니다.
make_lower
"true"이면 소문자로 변환되어 리턴됩니다. "false"이면 대소문자 변환없이 리턴됩니다.
확장자 문자열입니다. 확장자가 없으면 비어있는 문자열을 리턴합니다.
아래는 몇 가지 경로에 대해 위 함수들을 적용한 예입니다.
path: /a/b/c/d/file.ext
get_path_dir: /a/b/c/d
get_path_leaf: file.ext
get_path_leaf_name: file
get_file_ext: ext
path: /a/b/c/d/
get_path_dir: /a/b/c/d
get_path_leaf:
get_path_leaf_name:
get_file_ext:
path: /a/b/c/d/file
get_path_dir: /a/b/c/d
get_path_leaf: file
get_path_leaf_name: file
get_file_ext:
path: /a/b/c/d/.ext
get_path_dir: /a/b/c/d
get_path_leaf: .ext
get_path_leaf_name:
get_file_ext: ext
path: /a/b/c/d/.
get_path_dir: /a/b/c/d
get_path_leaf: .
get_path_leaf_name:
get_file_ext:
절대 경로를 정식 절대 경로(canonical path)로 변경합니다.
path
절대 경로 입니다. '/'로 시작하지 않을 경우, path를 그대로 c_path에 리턴합니다.
c_path
OUT
정식 절대 경로를 리턴합니다.
정식 절대 경로 문자열의 시작 포인터를 리턴합니다.
절대 경로를 정식 절대 경로(canonical path)로 변경합니다.
path
절대 경로 입니다. '/'로 시작하지 않을 경우, path를 그대로 c_path에 리턴합니다.
c_path
OUT
정식 절대 경로를 리턴합니다.
정식 절대 경로 문자열의 시작 포인터를 리턴합니다.
파일 I/O
문자열을 파일에 씁니다. 기존에 파일이 있으면, 덮어 씁니다.
file_path
파일 경로입니다.
value
문자열 포인터입니다.
성공하면 쓴 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
문자열을 파일에 붙여씁니다. 파일이 없으면 새파일을 생성합니다.
file_path
파일 경로입니다.
value
문자열 포인터입니다.
성공하면 쓴 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
텍스트 파일에서 문자열을 읽어 옵니다.
file_path
파일 경로입니다.
value
OUT
문자열을 저장할 버퍼 포인터입니다.
size
버퍼 크기입니다. 바이트 단위입니다.
trim_trailing_lws
"true"이면 마지막 줄의 문자열 끝의 공백문자(0x20, 0x0d, 0x0a, 0x09) 등을 제거합니다.
성공하면 읽어온 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
여러 줄로 이루어진 텍스트 파일에서 모든 줄을 읽어 옵니다. 각 줄끝에 공백문자('\0')이 붙습니다. 마지막에는 공백문자('\0')가 더 붙습니다.
file_path
파일 경로입니다.
value
OUT
전체 문자열을 저장할 버퍼 포인터입니다.
size
버퍼 크기입니다. 바이트 단위입니다. 버퍼크기가 작을 경우, 읽어온 총 문자열 데이터가 짤립니다.
성공하면, 읽어온 총 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
아래는 읽어온 데이터 버퍼을 HEX DUMP한 예입니다.
readLinesFromFile, __data=0xfffff09f8d68, __size=206 of 206:
00000000 23 20 63 6f 6d 6d 65 6e 74 0a 00 0a 00 5b 67 65 # comment....[ge
00000010 6e 65 72 61 6c 5d 0a 00 6b 65 79 31 3d 76 61 6c neral]..key1=val
00000020 75 65 31 0a 00 6b 65 79 32 3d 22 67 65 6e 65 72 ue1..key2="gener
00000030 61 6c 20 76 61 6c 75 65 32 22 20 20 3b 20 63 6f al value2" ; co
00000040 6d 6d 65 6e 74 0a 00 0a 00 5b 73 65 63 74 69 6f mment....[sectio
00000050 6e 31 5d 0a 00 6b 65 79 32 3d 0a 00 6b 65 79 33 n1]..key2=..key3
00000060 3d 22 6e 65 77 20 6b 65 79 20 76 61 6c 75 65 22 ="new key value"
00000070 0a 00 6b 65 79 31 3d 22 73 68 6f 72 74 20 76 61 ..key1="short va
00000080 6c 75 65 22 0a 00 0a 00 5b 73 65 63 74 69 6f 6e lue"....[section
00000090 32 5d 0a 00 6b 65 79 31 3d 73 65 63 74 69 6f 6e 2]..key1=section
000000a0 32 5f 76 61 6c 75 65 31 0a 00 6b 65 79 32 3d 22 2_value1..key2="
000000b0 73 65 63 74 69 6f 6e 32 20 76 61 6c 75 65 32 22 section2 value2"
000000c0 20 20 3b 20 63 6f 6d 6d 65 6e 74 0a 00 00 ; comment...
여러 줄로 이루어진 텍스트 파일에서 끝에서 부터 tail_count 줄을 읽어 옵니다. 목록의 첫번째줄은 위 줄에서 부터 저장이 됩니다. 목록의 마지막 줄이 파일의 마지막 줄과 같습니다.
file_path
파일 경로입니다.
tail_count
끝줄 개수입니다. "0" 값이면 전체 줄을 읽어 옵니다.
lines
OUT
각줄이 저장될 문자열 리스트 레퍼런스입니다.
trim_trailing_lws
"true"이면 각 줄의 문자열 끝의 공백문자(0x20, 0x0d, 0x0a, 0x09) 등을 제거합니다. 줄의 시작에 있는 공백문자는 항상 제거됩니다.
skip_empty_lines
"true"이면 비어 있는 문자열을 제외합니다.
skip_bash_comment_lines
"true"이면 '#'로 시작하는 코멘트 줄은 제외합니다.
성공하면 lines 리스트의 크기를 리턴합니다. 실패하면 -1을 리턴합니다.
각 줄이 <키><delimiter><값> 으로 구성된 텍스트 파일을 읽어서 key-value map 을 얻습니다.
file_path
파일 경로입니다.
parameters
변환된 key-value map을 리턴합니다.
delimiter
"키" 와 "값" 사이에 있는 구분자입니다.
성공하면, key-value map 크기를 리턴합니다. 실패하면 0을 리턴합니다.
파일을 주어진 접근 권한 모드로 생성하고 데이터를 씁니다. 파일이 있다면 덮어 씁니다.
data
쓸 데이터 포인터입니다.
length
데이터 길이입니다. 바이트 단위입니다.
file_path
파일 경로 입니다.
mode
생성할 파일의 접근 권한 모드입니다. 8진수로 "0666" 의미는 "rw-rw-rw-" 입니다.
성공하면 쓴 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
파일에서 uint8_t 타입으로 데이터를 읽습니다.
file_path
파일 경로 입니다.
data
OUT
읽어올 데이터를 저장할 벡터 레퍼런스입니다.
성공하면 총 읽은 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
파일에서 char 타입으로 데이터를 읽습니다.
file_path
파일 경로 입니다.
data
OUT
읽어올 데이터를 저장할 벡터 레퍼런스입니다.
성공하면 총 읽은 바이트 수를 리턴합니다. 실패하면 -1을 리턴합니다.
Oasis 파일 시스템이 마운팅된 시스템 폴더 경로를 얻습니다.
offs_mounted_path
OUT
마운팅 경로를 저장할 버퍼 포인터입니다.
size
버퍼 크기입니다. 바이트 단위입니다.
마운팅된 경로를 찾으면 경로 문자열 포인터를 리턴합니다. 찾지 못하면 nullptr을 리턴합니다.
경로가 Oasis 파일 시스템에 마운팅된 경로에 있는지 확인합니다.
-
true: Oasis 파일 시스템에 위치한 경로입니다.
-
false: Oasis 파일 시스템에 위치하지 않은 경로입니다.
마운팅된 경로가 특정 파일시스템 타입인지 확인합니다.
path
마운팅 경로입니다.
type
파일 시스템 타입입니다. ext4, squashfs, devtmpfs, tmpfs, proc, sysfs, ubifs, fuse.ssfs, fuse.ntfs-3g, fuse.offs 등이 가능합니다. 파일 시스템 타입은 /proc/filesystems에서 확인할 수 있습니다.
-
true: 특정 파일 시스템 타입입니다.
-
false: 특정 파일 시스템 타입이 아닙니다.
자원 및 환경 변수
호출하는 프로세스의 CPU 점유율을 얻습니다.
irix_mode
"true"이면 Irix 모드로 모든 CPU 점유율의 합을 계산하며, "false"이면 Solaris모드로 프로세스 개수만큼 나눈 값을 계산합니다.
사용가능한 실제 물리적 메모리 크기를 얻습니다. 아직 할당 안 된 메모리와 버퍼링 되거나 캐쉬 되어 있는 메모리 합을 바이트 단위로 리턴합니다.
호출하는 프로세스에서 사용중인 실제 물리적 메모리 크기를 얻습니다.
사용 중인 메모리 크기 입니다. 바이트단위입니다.
호출하는 프로세스가 생성하여 사용 중인 쓰레드 개수를 얻습니다.
지정된 프로그램 이름의 모든 프로세스를 종료합니다. SIGTERM 신호를 보내어 프로세스가 모두 종료될 때가지 timeout_msec 만큼 대기합니다. 이후에도 여전히 실행 중인 프로세스가 발견되면 SIGKILL 신호를 보냅니다. SIGKILL 신호를 보낸 후에는 추가로 대기하지 않습니다.
쉘 환경변수가 저장된 파일을 읽어서 known_env_variables 목록에 지정된 환경변수 이름과 값을 얻습니다. 높은 권한(root 등)이 있는 사용자가 다른 사용자의 source 나 .profile 등의 파일에서 그 사용자의 환경변수를 읽어올 때 유용합니다. 파일 내의 쉘 스크립트문을 eval하지 않습니다.
home_dir
해당 사용자의 $HOME 값입니다.
env_file_path
환경 변수 파일 경로입니다.
known_env_variables[]
알려지 환경 변수 이름 목록입니다. 마지막 요소는 nullptr 이어야 합니다.
resolved_variables
OUT
환경변수 이름을 키이름으로 한 key-value map을 리턴합니다.
sources
env_file_path 내에 다른 환경변수 파일을 참조할 경우, 참조하는 다른 환경변수 파일 경로 목록입니다.
/etc/profile 파일 내용이 아래와 같은 경우,
export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then
export PS1='# '
else
export PS1='$ '
fi
fi
export EDITOR='/bin/vi'
# Source configuration files from /etc/profile.d
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
PATH 와 EDITOR 환경 변수 값을 알고자 할 때,
const char *known_env_variables[] = { "PATH", "EDITOR", nullptr };
key_value_map_t vars;
std::list<std::string> sources;
loadEnvironmentVariables("/" , "/etc/profile" , known_env_variables , vars , sources);
dumpParameters("loadEnvironmentVariables", vars);
실행 하면, 아래 같은 결과를 볼 수 있습니다.
loadEnvironmentVariables parameters[PATH] /bin:/sbin:/usr/bin:/usr/sbin
loadEnvironmentVariables parameters[EDITOR] /bin/vi