Linux2012. 3. 27. 14:46

mktime()을 사용하기 전에 1970을 빼고 값을 넣어준다면

localtime()으로 struct tm 형으로 받을 때에는 ts->tm_year + 1970 으로 출력을 해주어야 한다.

다른 시스템과의 혼용을 하지 않은다면은 1970을 빼지 않고 사용해도 되지만

유닉스 / 리눅스 시스템과 시간을 같이 사용하기 위해서는 1970 epoch를 계산해주어야 한다.


#include "stdio.h"
#include "time.h"

int main(void)
{
    time_t     now;
    struct tm  tmtm;
    struct tm  *ts;
    char       buf[80];

    /* Get the current time */
    //now = time(NULL);
    time(&now);

    /* Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */
    ts = localtime(&now);
    strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
    printf("%s\n", buf);
    printf("%d\n",ts->tm_year);

    return 0;
}


2009/12/09 - [Linux] - 시간관련 함수/구조체 - time API on linux

---

혹시나 해서 찾아봤는데 시스템에 따라서는 epoch가 1900일수도 있다고 한다.

유닉스 계열은 1970 / NTP에서는 1900을 epoch로 사용한다.


[링크 : http://en.wikipedia.org/wiki/Epoch_(reference_date)]

'Linux' 카테고리의 다른 글

리눅스를 위한 아이튠스 서버 만들기  (0) 2012.07.08
G840 cpuinfo  (0) 2012.04.14
partitionless disk  (2) 2012.01.06
sudo와 selinux  (0) 2011.12.25
조이스틱 / 조이패드 on ubuntu  (2) 2011.12.23
Posted by 구차니
Linux/Ubuntu2012. 3. 4. 20:46
vlc / totem / smplayer

세개를 써봤는데 h.264(avc) 코덱으로 되어 있는 1920x1080에 대해서
윈도우에서도 그리 버벅댈 사양은 아닐꺼 같은데(AMD 4400+x2/1GB/740g)
 
아무튼 vlc가 가장 덜 끊어지고,
totem 이나 smplayer는 비슷한 수준 ㅠ.ㅠ 
Posted by 구차니
Linux/Ubuntu2012. 3. 3. 23:00
예전에 ATI로는 해본적이 없던가..?
아무튼 처음에 부팅할때 이상하게 화면이 자주 깜빡이고 모니터도 색상이 이상하게 나오다가
겨우잡는 현상이 발생되서 자세히 보고 있으니, 부팅메시지 중에도 EDID Error가 나오길래
dmesg로 보니 아래와 같이 촤르르르륵

[   12.423089] [drm] Initialized drm 1.1.0 20060810
[   12.470094] [drm] radeon defaulting to kernel modesetting.
[   12.470098] [drm] radeon kernel modesetting enabled.
[   12.470163] radeon 0000:01:05.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[   12.472067] [drm] radeon: Initializing kernel modesetting.
[   12.472807] [drm] register mmio base: 0xFEAF0000
[   12.472810] [drm] register mmio size: 65536
[   12.473833] ATOM BIOS: ATI
[   12.474044] [drm] GPU reset succeed (RBBM_STATUS=0x10000140)
[   12.474061] [drm] radeon: VRAM 32M
[   12.474063] [drm] radeon: VRAM from 0x3E000000 to 0x3FFFFFFF
[   12.474065] [drm] radeon: GTT 512M
[   12.474066] [drm] radeon: GTT from 0x40000000 to 0x5FFFFFFF
[   12.474098] [drm] radeon: irq initialized.
[   12.474314] [drm] Detected VRAM RAM=32M, BAR=32M
[   12.474319] [drm] RAM width 128bits DDR
[   12.476930] [TTM] Zone  kernel: Available graphics memory: 443732 kiB.
[   12.476934] [TTM] Zone highmem: Available graphics memory: 496824 kiB.
[   12.476954] [drm] radeon: 32M of VRAM memory ready
[   12.476956] [drm] radeon: 512M of GTT memory ready.
[   12.476976] [drm] GART: num cpu pages 131072, num gpu pages 131072
[   12.480743] [drm] radeon: 1 quad pipes, 1 z pipes initialized.
[   12.480760] [drm] radeon: cp idle (0x10000C03)
[   12.480863] [drm] Loading RS690/RS740 Microcode
[   12.480936] platform radeon_cp.0: firmware: requesting radeon/RS690_cp.bin
[   12.487430] [drm] radeon: ring at 0x0000000040000000
[   12.487450] [drm] ring test succeeded in 1 usecs
[   12.487598] [drm] radeon: ib pool ready.
[   12.487680] [drm] ib test succeeded in 0 usecs
[   12.487782] [drm] Default TV standard: NTSC
[   12.487884] [drm] Radeon Display Connectors
[   12.487886] [drm] Connector 0:
[   12.487887] [drm]   VGA
[   12.487890] [drm]   DDC: 0x7e50 0x7e40 0x7e54 0x7e44 0x7e58 0x7e48 0x7e5c 0x7e4c
[   12.487892] [drm]   Encoders:
[   12.487893] [drm]     CRT1: INTERNAL_KLDSCP_DAC1
[   12.487895] [drm] Connector 1:
[   12.487896] [drm]   S-video
[   12.487897] [drm]   Encoders:
[   12.487899] [drm]     TV1: INTERNAL_KLDSCP_DAC1
[   12.487900] [drm] Connector 2:
[   12.487902] [drm]   DVI-D
[   12.487903] [drm]   HPD2
[   12.487905] [drm]   DDC: 0x7e40 0x7e60 0x7e44 0x7e64 0x7e48 0x7e68 0x7e4c 0x7e6c
[   12.487907] [drm]   Encoders:
[   12.487909] [drm]     DFP2: INTERNAL_DDI
[   12.487910] [drm] Connector 3:
[   12.487911] [drm]   HDMI-A
[   12.487914] [drm]   DDC: 0x7e40 0x7e50 0x7e44 0x7e54 0x7e48 0x7e58 0x7e4c 0x7e5c
[   12.487915] [drm]   Encoders:
[   12.487917] [drm]     DFP3: INTERNAL_LVTM1
[   12.557911] HDA Intel 0000:00:14.2: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   12.604074] [drm:edid_is_valid] *ERROR* Raw EDID:
[   12.604113] <3>03 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00  ................
[   12.604115] <3>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   12.604117] <3>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   12.604120] <3>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   12.604122] <3>00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00  ................
[   12.604124] <3>00 00 00 00 00 0f 00 00 00 00 00 00 00 00 00 00  ................
[   12.604126] <3>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   12.604129] <3>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   12.604130] 

그래서 찾아보니 머.. 결론은 i2c를 통해서 EDID정보를 받는데 그 부분의 드라이버 설정이 오류가 있는지
다시 컴파일을 해주어야 한다~ 머 이런거.. 지금와서 ATI에서 다시 드라이버 리눅스용으로 받으면 해결이 되려나?

[링크 : http://ubuntuforums.org/showthread.php?t=1607778 

---
혹시나 해서 찾아봤지만.. 리눅스 내장 드라이버 아닌, ATI 공식 드라이버는 XP/VISTA용 밖에 없는듯 하다.

 
Posted by 구차니
Linux/Ubuntu2012. 3. 3. 22:43
요즘 컴퓨터 CPU들은 절전을 위해 여러가지 클럭을 지원하는데
이러한 클럭을 임의로 조정하는 방법이 존재한다.

설정가능한 클럭을 확인하려면 아래의 경로를 참고하면 되고
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
1300000 1200000 1000000 800000 600000

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
userspace powersave ondemand conservative performance

[링크 : http://embraceubuntu.com/2005/11/04/enabling-cpu-frequency-scaling/ ]  

클럭변경은 cpufreq-selector 라는 명령을 이용하면 된다.
$ cpufreq-selector -f 1300000 

[링크 : http://diablo.ucsc.edu/cgi-bin/man/man2html?cpufreq-selector+1 ]  


그나저나.. 우분투에서 초기에는 최고클럭으로 작동하다 냅두면 최저클럭으로 "Ondemand"설정이 되긴 하지만
처음부터 최저클럭으로 설정하는 옵션은 없으려나? 

---
조금 뒤져보니, 아래의 스크립트에서 시간과 파워모드를 다른걸로 해주면 된다.
onedemand 대신 powersave로 하면 일단 최저클럭으로 들어가는 듯.

$ vi /etc/init.d/ondemand
#! /bin/sh
### BEGIN INIT INFO
# Provides:          ondemand
# Required-Start:    $remote_fs $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Set the CPU Frequency Scaling governor to "ondemand"
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

case "$1" in
    start)
        start-stop-daemon --start --background --exec /etc/init.d/ondemand -- background
        ;;
    background)
        sleep 60 # probably enough time for desktop login

        for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
        do
                [ -f $CPUFREQ ] || continue
                echo -n ondemand > $CPUFREQ
        done
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac 
 
Posted by 구차니
Linux/Ubuntu2012. 2. 10. 21:56
로컬에서 접속하면 putty로 접속을 하면 10.0 이 뜨는데
혹시나 해서 ssh에서 동일하게 설정을 하면 서버측의 X로 출력을 보낼수 있다.
 $ export DISPLAY=:0.0

localhost:0.0 으로 하면 안되고, :0.0 으로 해야만 되서 왜 그러나 해서 찾아봤는데
가장 효율적인 접속을 할 수 있는 경로로 접속한다고 한다.
추가내용을 보니, hostname을 비워두면 local로 접속하는데 TCP 소켓이 아닌 로컬 소켓등으로 접속을 하는 것으로 보인다.

Display Names

From the user's perspective, every X server has a display name of the form:

hostname:displaynumber.screennumber

This information is used by the application to determine how it should connect to the server and which screen it should use by default (on displays with multiple monitors):

hostname
The hostname specifies the name of the machine to which the display is physically connected. If the hostname is not given, the most efficient way of communicating to a server on the same machine will be used.

X servers listen for connections on a variety of different communications channels (network byte streams, shared memory, etc.). Since there can be more than one way of contacting a given server, The hostname part of the display name is used to determine the type of channel (also called a transport layer) to be used. X servers generally support the following types of connections: 

local

The
hostname part of the display name should be the empty string. For example: :0:1, and :0.1. The most efficient local transport will be chosen.
TCP/IP

The hostname part of the display name should be the server machine's IP address name. Full Internet names, abbreviated names, and IP addresses are all allowed. For example: x.org:0expo:0198.112.45.11:0bigmachine:1, and hydra:0.1.

[링크 : http://linux.die.net/man/7/x
[링크 : http://www.linuxquestions.org/questions/linux-newbie-8/export-display%3D-0-0-a-682926/

따.. 딱히 귀찮아서 찾은건 아니야!
Posted by 구차니
Linux/Ubuntu2012. 2. 10. 14:15

 $ sudo service gdm stop
은 ubuntu 10.04 까지이고
ubuntu 11.10 부터는

 $ sudo service lightdm stop
으로 종료해야 한다고 한다.

[링크 : http://ubuntu.or.kr/~ubuntu/viewtopic.php?p=93957]
2010/08/23 - [Linux/Ubuntu] - ubuntu 에서 X window 종료시키기

Posted by 구차니
Linux/Ubuntu2012. 2. 5. 20:52
가끔 설치된 프로그램의 설정파일을 찾으려고 낑낑대는 적이 많았는데 -_-
dpkg 명령을 이용해서 해당 패키지의 설치경로를 알아내면 이런 고생은 안해도 되니 편할듯

$ dpkg -L [패키지 명]  

[링크 : http://newbiedoc.sourceforge.net/tutorials/apt-get-intro/info.html]  


단, 설치되어 있는 프로그램에 한함. 설치되지 않은 경우에는 설치하지 않았다고 나옴
$ codeblocks
'codeblocks' 프로그램은 현재 설치되어 있지 않습니다.  다음을 입력하여 이를 설치할 수 있습니다:
sudo apt-get install codeblocks
 
$ dpkg -L codeblocks
`codeblocks' 패키지는 설치하지 않았습니다.
아카이브 파일 정보를 보려면 dpkg --info를 실행하시고 (= dpkg-deb --info)
아카이브 내용을 보려면 dpkg --contents를 실행하십시오 (= dpkg-deb --contents)   

Posted by 구차니
Linux/Ubuntu2012. 1. 20. 20:51
iptable 에 존재하는 테이블 목록은
filter / nat / mangle/ raw
네가지 이다.
[링크 : http://www.linuxreport.org/content/view/26/23/

filter:
This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets).
nat:
This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for altering locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).
mangle:
This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT(for altering locally-generated packets before routing). Since kernel 2.4.18, three other built-in chains are also supported: INPUT (for packets coming into the box itself),FORWARD (for altering packets being routed through the box), and POSTROUTING (for altering packets as they are about to go out).
raw:
This table is used mainly for configuring exemptions from connection tracking in combination with the NOTRACK target. It registers at the netfilter hooks with higher priority and is thus called before ip_conntrack, or any other IP tables. It provides the following built-in chains: PREROUTING (for packets arriving via any network interface)OUTPUT (for packets generated by local processes)

[링크 :  http://linux.die.net/man/8/iptables]  

iptable 에서 "관리"하는 목록은 proc fs에 존재하며
해당 테이블의 규칙 보는 방법은 -L 옵션을 사용하면 된다.

$ sudo cat /proc/net/ip_tables_names
mangle

$ sudo iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination 

[링크 : http://forum.soft32.com/linux2/iptables-list-tables-ftopict29473.html]
Posted by 구차니
Linux/Ubuntu2012. 1. 19. 19:16
라우팅 관련해서 보다 보니 먼가 익숙하면서도 기억에 없는 녀석이 떡~하고 나타나서 찾아보니
zeroconf 관련 대역이라고 한다.

[링크 :  http://my.oops.org/111

$ ip rule show
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

$ ip route show
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.10  metric 1
169.254.0.0/16 dev eth0  scope link  metric 1000
default via 192.168.10.1 dev eth0  proto static 

다시 살아난(!) 위키에서 검색하니 Link-Local 용으로 RFC 3927에 정의된 녀석이라...

Reserved address blocks
CIDR address blockDescriptionReference
0.0.0.0/8 Current network (only valid as source address) RFC 1700
10.0.0.0/8 Private network RFC 1918
127.0.0.0/8 Loopback RFC 5735
169.254.0.0/16 Link-Local RFC 3927
172.16.0.0/12 Private network RFC 1918
192.0.0.0/24 Reserved (IANA) RFC 5735
192.0.2.0/24 TEST-NET-1, Documentation and example code RFC 5735
192.88.99.0/24 IPv6 to IPv4 relay RFC 3068
192.168.0.0/16 Private network RFC 1918
198.18.0.0/15 Network benchmark tests RFC 2544
198.51.100.0/24 TEST-NET-2, Documentation and examples RFC 5737
203.0.113.0/24 TEST-NET-3, Documentation and examples RFC 5737
224.0.0.0/4 Multicasts (former Class D network) RFC 3171
240.0.0.0/4 Reserved (former Class E network) RFC 1700
255.255.255.255 Broadcast RFC 919
[링크 :  http://en.wikipedia.org/wiki/IPv4#Special-use_addresses]
Posted by 구차니
Linux/Ubuntu2012. 1. 18. 23:46
집에서 사용하는 케이블 모뎀과 핸드폰의 테터링을 이용해서 동시에 해볼려고 했는데 영 안되네 -_-


공유기를 쓰므로 eth0(유선)은 192.168.0.1
테터링은 eth1(무선) 192.168.1.1 로 연결되는데

$ sudo ip route add default scope global nexthop via 192.168.0.1 dev eth0 weight 1 nexthop via 192.168.1.1 dev eth1 weight 1
RTNETLINK answers: File exists  
이런 에러를 뱉는다. -_-

Did you try to remove the old default gw? 
ip route del default ... 
And add your multipath route with several nexthops sfter that.

[링크 : http://www.debian-administration.org/articles/377
찾아보니 ip route del default 명령과 추가를 하라는데. 추가는 몰라서

$ ip route del default  
로 삭제만 하니 일단 외부로 보내려고 시도는 하지만 영안되는듯 -_-

아무튼, 위의 명령어를 수행하고 나니 아래처럼 default가 두줄로 나오는 신기한 현상!
$ ip route show
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.148  metric 2 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.154  metric 1 
169.254.0.0/16 dev eth0  scope link  metric 1000 
default via 192.168.0.1 dev eth0  proto static 
 
$ ip route show
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.148  metric 2
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.154  metric 1
192.168.10.0/24 dev eth2  proto kernel  scope link  src 192.168.10.2
169.254.0.0/16 dev eth0  scope link  metric 1000
default
        nexthop via 192.168.0.1  dev eth0 weight 1
        nexthop via 192.168.1.1  dev eth1 weight 1 

[링크 : http://www.linuxhorizon.ro/iproute2.html]
2011/12/17 - [Linux/Ubuntu] - 여러개의 업링크 / 인터넷 업체를 사용할 경우 라우팅 설정하기 



----
2012.1.20

connection timed out이 뜨는데 왜그런걸까.. rule이 문제일까.. iptable의 문제일까?
[링크 : http://www.linuxquestions.org/.../mail-sending-problem-%96-postfix-connection-timed-out-port-25-a-713108/]
[링크 :  http://wiki.mikrotik.com/wiki/Manual:IP/Route


---
2012.1.21
혹시나 해서 /etc/iproute2/rt_tables 에 추가하고 나서
해당 테이블 별로 default 설정을 해주고 나서 테이블 별로 룰을 추가해주니
connection timed out도 안뜨고 잘되는데

# ip route add default via 192.168.0.1 dev eth0 table CABLE
# ip rule add from 192.168.0.1/24 table CABLE

# ip route add default via 192.168.1.1 dev eth1 table CELLPHONE
# ip rule add from 192.168.1.1/24 table CELLPHONE 

아직까지는 확인은 해봐야겠지만, Round-Robin처럼 작동하는 기분?

$ dstat -n -N eth0,eth1,total 

명령을 해 놓고 나오는 결과를 보고 있노라면
두개를 동시에 하는 경우는 거의 없고, 한다고 해도 몰빵을 해주는 경향을 보인다.
단지, 어려개 탭을 띄워놓거나, 다운로드는 동시에 여러개 하지 않는 이상에는 대역폭이 합쳐지지 않고
단순하게 multiple gateway를 순차적으로 쓰는 것으로 보인다.

link aggregation을 하지 않아서 그러려나?


Posted by 구차니