레이블이 datetime인 게시물을 표시합니다. 모든 게시물 표시
레이블이 datetime인 게시물을 표시합니다. 모든 게시물 표시

g++ warning missing initializer for member

다음과 같이 time struct(tm) 생성시 초기화를 하지 않은 상태의 c++코드가 있을때

#include <iostream>
#include <sys/time.h>
int main() {
    struct tm aaa{};
    std::cout << aaa.tm_sec << std::endl;
    return 0;
}

다음과 같이 빌드 하면 괜찮은데,
g++ -std=c++11 ysoftman.cpp
또는
g++ -std=c++11 -Wall ysoftman.cpp

다음과 같이 -Wextra 옵션을 주면�warning 이 발생한다.
g++ -std=c++11 -Wextra ysoftman.cpp

ysoftman.cpp:5:16: warning: missing initializer for member ‘tm::tm_sec’ [-Wmissing-field-initializers]
  struct tm aaa{};
                ^
ysoftman.cpp:5:16: warning: missing initializer for member ‘tm::tm_min’ [-Wmissing-field-initializers]
ysoftman.cpp:5:16: warning: missing initializer for member ‘tm::tm_hour’ [-Wmissing-field-initializers]
...


참고로 -Wextra 는 -Wall 에 포함되지 않는 warning 에 대한것으로
위와 같이 초기화 누락이나 포인터를 정수형과 비교할때 발생하는 경고(comparison between pointer and integer) 를 활성화 한다.
그리고 -W 옵션 대신 -Wextra 를 사용하라고 한다.
g++ -v --help | grep Wextra
-W switch is deprecated; use -Wextra instead


[해결방법1]
-Wextra 를 사용하지 않기
찾아보니 사실 기본 0값으로 초기화되는데 gcc 는 너무 과도하게 warning 을 발생한다는 의견도 있다.

[해결방법2]
다음과 같이 모든 멤버를 초기화한다. (struct 내의 생성자()를 두고 초기화하면 편한데, tm 은 standard library라 그럴 수 없다.)
    struct tm aaa{
    .tm_sec=0,
    .tm_min=0,
    .tm_hour=0,
    .tm_mday=0,
    .tm_mon=0,
    .tm_year=0,
    .tm_wday=0,
    .tm_yday=0,
    .tm_isdst=0,
    .tm_gmtoff=0,
    .tm_zone=NULL};

[해결방법3]
경고 메시지대로 -Wno-missing-field-initializers 를 추가해서 초기화 경고만 제외시킨다.
g++ -std=c++11 -Wextra -Wno-missing-field-initializers ysoftman.cpp

k8s configmap 내용 즉시 적용

# kubernetes(k8s) configmap 으로 값을 쓰면 실제 pod 에 전달(적용)까지
# 시간이 좀 걸리는 것 같아 찾아보니

`
As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period (1 minute by default) + ttl of ConfigMaps cache (1 minute by default) in kubelet. You can trigger an immediate refresh by updating one of the pod's annotations.
`

# 적용까지 1분+1분(캐시) 걸리 수 있는데,... pod annotation 업데이트하면 pod 에 바로 반영되는것 같다.

# 실제 configmap 적용 후 바로 다음과 같이 refresh 를 위해 pod annotation 을 업데이트하니 바로 pod 에 적용된다.
# 계속 사용해야 하니 유닉스타임(초)와 같은 타임스탬프값을 사용하면 좋을 것 같다.
kubectl annotate --overwrite pods $(kubectl get pods | grep ysoftman | awk '{print $1}') updated="$(date +%s)"



Linux 서버시간 동기화

# date 로 현재 시간확인
date

# date 로 특정 시간으로 설정
sudo date -s "2010-10-12 15:30:00"

# 실제 시간으로 복귀(서버 시간 동기화)
rdate -s time.bora.net
# 또는
rdate -s time.nist.gov

# 위 rdate 가 timeout 발생되면서 실패한다면 ntp(Network Time Protocol) 를 사용해보자.
# ntp 설치
sudo yum install ntp

# ntp.conf 에서 동기화할 서버를 명시한다.
sudo vi /etc/ntp.conf

# ntpd 서비스 실행
# 서비스는 시작 후 5 분 정도 후 sync 가 실행된다.
sudo chkconfig ntpd on
sudo service ntpd restart

# npt 서버 통신 상태
ntpd -q

# 참고
# 하드웨어 시간 보기
sudo hwclock

# 하드웨어 시간을 현재 시스템 시간으로 변경
sudo hwclock -w

centos localtime 변경

# CentOS 의 기본 타임존은 표준시(UTC)로 시간이 표시된다.
# date, ls 등에 나오는 시간은 한국 시간보다 9시간 느리게 표시된다.
# localtime(로컬시간)은 /etc/localtime 을 참조하고 기본 UTC 파일로 링크가 걸려 있다.
# 로컬시간을 서울로 링크하면 한국시간으로 표시된다.
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 링크 확인
ll /etc/localtime
lrwxrwxrwx 1 root root 30 11월 28 15:40 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul

보잉 787 리부팅

보잉 787 시스템이 32비트 리눅스라서 그런가?
http://story.wisedog.net/248%EC%9D%BC%EB%A7%88%EB%8B%A4-%EC%9E%AC%EB%B6%80%ED%8C%85%ED%95%B4%EC%95%BC%ED%95%98%EB%8A%94-%EB%B3%B4%EC%9E%89787/

time 값을 int32 로 사용할때 2038년이 끝~ㅎ
https://ko.wikipedia.org/wiki/2038%EB%85%84_%EB%AC%B8%EC%A0%9C

Linux unix epoch time <-> date 상호 변환

# date 관련 자세한 설명은 man page 를 참고하자
# man date
# https://man7.org/linux/man-pages/man1/date.1.html
# %Y - year
# %m - month
# %d - day of month (01~31)
# %H - hour
# %M - minute (00~59)
# %S - second (00~60)
# %s  seconds since 1970-01-01 00:00:00 UTC

# 현재 년도
date +%Y

# 현재 월
date +%m

# 현재 시간,분
date +%H:%M

# 현재 unix (epoch) time seconds
date +%s
# 현재 unix (epoch) time seconds + nano seconds 까지 표시
date +%s%N
# 특정 date -> unix time
date -d "2014-02-15" +%s

# 특정 unix time -> date
date -d "@1392390000"


#####


# [mac]
# mac 의 기본 date 명령은 linux date 명령과 사용방법, 지원 옵션등이 다르다.
# 특정 date -> unix time

# -j do not try to set the date
# -f user input_fmt
date -j -f "%Y-%m-%d %H:%M:%S" "2014-02-15 15:02:17" "+%s"

# 특정 unix time -> date
date -r 1392390000


#####


# mac 에서 linux date 를 사용하려면 gnu coreutils를 설치후 gdate 명령을 사용해야 한다.
brew install coreutils
# 참고로 coreutils 설치하면 g로 시작하는 명령어들이 /usr/local/bin/에 설치된다.
# 이제 다음과 같이 linux date 를 사용할 수 있다.
gdate +%s%N

Unix Epoch Time 확인하기

Unix Epoch Time 는 UTC 기준으로 1970년 1월 1일 0:00 이후 흘러간 초를 의한다.
Unix Epoch Time 시간 확인할 수 있는 웹 사이트
http://www.epochconverter.com/

[참고]
UTC(Universal Time Coordinated) 는 협정 세계시로 GMT(Greenwich Mean Time) 과는 초 소수점만 차이가 난다.

Linux rdate 으로 시간 맞추기

# 원격 머신(bora.net) 의 시간을 확인
rdate -p time.bora.net

# root 권한으로 원격머신의 시간을 로컬 시간으로 설정
sudo rdate -s time.bora.net

# 또는 root 권한으로 직접 시간 설정
sudo date -s "2000-01-01 12:00:00"

# 로컬 시간이 변경되었는지 확인
date

C/C++ test

# loop

# 한글 utf-8 출력

# memset

# malloc() 과 calloc() 의 차이

# fopen의 text모드와 binary모드 차이

# STL int string 변환 

# switch 문안에서 변수선언과 동시에 초기화

# 한글 완성형 글자 출력하기

# bit field 테스트

# casting

# Windows 에서 32bit, 64bit 메모리 할당

# 정수형 상수 오버플로우

# 전위,후위 증(감) 연산

# libcurl test

# libjson test

# jsoncpp library 테스트

# linux RWLock test

# 한글 utf-8 출력

# time test

# string 스트림 사용시 첫번째 바이트가 \t \n \r 등 특수문자인 경우 빠지는 문제

# URL 인코딩/디코딩

# linux function test

# 정적 인스턴스와 동적 인스턴스의 차이

# C++ 미리 정의된 매크로

# 파일 헤더로 Unicode(utf-16) 와 utf-8 구분하기

# float, double 과 같은 부동소수점 타입 연산시 유의 사항


# random test

# 실인수(argument) 와 가인수(parameter) 구분

# strtok() 함수를 이용한 연속 토큰 추출

# Linux fork() 를 이용한 데몬 프로그램

# swap 방법들