http://www.skmsupport.com/Equipment%20Damage%20Curves%20Cables.shtml.htm

Equipment Damage Curves Cables

This technical guide contains information about equipment damage curves. The information is presented for review, approval, interpretation and application by a registered professional engineer only. SKM disclaims any responsibility and liability resulting from the use and interpretation of this technical guide.

Reproduction of this material is permitted provided proper acknowledgement is given to SKM Systems Analysis Inc.

Purpose

The purpose of this guide is to provide basic information about insulated power cable damage curves.

Ampacity (> 1-6 hours)

The ampacity of a conductor is the rated continuous current carrying capacity at a referenced ambient temperature and allowable temperature rise. If a conductor is loaded continuously above its rated ampacity the conductor and insulation temperature design limits will be exceeded. This will lead to loss of life not instantaneous failure.

For insulated power conductors the industry standard ambient reference temperature level is 40°C, for underground insulated power cables (>2000V) 20°C, for buried for insulated power cables (0-2000V) all installations 30°C. Temperature correction factors are then given to adjust the base ampacity for other ambient temperature levels.
The ampacity landmark is located in the top decade of a time-current curve (TCC) at 1000 seconds.

Intermediate Overload Limit Curve (10 seconds to 1-6 hours)

Conductor overcurrent operating limit that if exceeded will damage the insulation of an insulated power conductor. This will lead to loss of insulation life, not instantaneous failure. Limit curves are based on the thermal inertia of the conductor, insulation and surrounding material. As a result, it can take from 1 to 6 hours for the temperature of a cable to stabilize after a change in load current. Therefore, under these emergency operating conditions, currents much greater than the rated ampacity of the cable can be supported. See IEEE 242-2001 pages 312 to 318 for more information.

Short Circuit Damage Curve (0.01 to 10 seconds)

Conductor short circuit current operating limit, which if exceeded, will damage the insulation of an insulated power conductor. Damage curves are plotted in the lower 3 decades of a TCC.

Empirical formulas that consider all heat absorbed by the conductor metal and no heat transmitted from the conductor to the insulation are listed in equations 1 and 2. Both equations relate conductor temperature rise to conductor size, fault current magnitude and fault duration.

Copper conductors

t = 0.0297 log10[(T2+234)/(T1+234)] (A/I)2 (1)

Aluminum conductors

t = 0.0125 log10[(T2+228)/(T1+228)] (A/I)2 (2)

where:

A = conductor area – cmils
I = short circuit current – RMS amps
t = time of short circuit – 0.01 to 10 seconds
T1 = operating temperature
T2 = maximum short circuit temperature

Example

Plot the conductor landmarks for 3-1/C, 500MCM, THWN copper conductors installed in 2-1/2” conduit on a 480V distribution system.

FLA from NEC table 310.16

Ampacity = 380A

Intermediate points calculated from Tables 2 and 3

Damage points calculated from (1) using:

A = 500,000 cmils
t = time of short circuit – 0.01 to 10 seconds
T1 = 75°C (Table 1)
T2 = 150°C (Table 1)

References

Other SKM Technical Guides offered at www.skm.com.

The latest revision of IEEE Std 242, IEEE Recommended Practice for Protection and Coordination of Industrial and Commercial Power Systems (IEEE Buff Book).

http://www.skm.com/Equipment%20Damage%20Curves%20Conductors.shtml

Equipment Damage Curves Conductors

The information presented in this application guide is for review, approval, interpretation and application by a registered professional engineer only. SKM disclaims any responsibility and liability resulting from the use and interpretation of this information.

Reproduction of this material is permitted provided proper acknowledgement is given to SKM Systems Analysis Inc.

Purpose

The purpose of this guide is to provide basic information about conductor damage curves and characteristic landmarks necessary for plotting on time-current curves (TCC), for the purpose of equipment overcurrent protection.

Ampacity

The rated continuous current carrying capacity of the conductor at a referenced ambient temperature, allowable temperature rise, geometry and installation. For bare overhead conductors an ambient air temperature of 40°C is typical. For underground insulated power cables an ambient earth temperature of 20°C is typical. Temperature correction factors are then given to adjust the base ampacity for other ambient temperature levels.
If a cable is loaded continuously above rated ampacity the insulation temperature design limits will be exceeded. This will lead to loss of insulation life, not instantaneous failure.
If a bare overhead conductor is loaded continuously above rated ampacity the mechanical strength of the conductor is reduced. This will lead to a loss of mechanical life, not instantaneous failure.

Table 1 summarizes typical allowable conductor temperature limits under short circuit, emergency overload and normal operating conditions.

Table 1 Typical conductor operating temperature limits


Type

Insulation

Voltage

Short Circuit

Emergency

Normal

0.01 < t < 10 sec.

10 sec. < t < ~1-6 hrs

t > ~1-6 hrs

Al or Cu

TW

600V

150ºC

85ºC

60ºC

Al or Cu

THWN

600V

150ºC

90ºC

75ºC

Al or Cu

THHN

600V

150ºC

105ºC

90ºC

Al or Cu

XLP

5-15kV

250ºC

130ºC

90ºC

Al or Cu

EPR

5-15kV

250ºC

130ºC

90ºC

AAC

Air

All

340ºC

150ºC

100ºC

ACSR

Air

All

645ºC

150ºC

100ºC

The ampacity landmark is located in the top decade of a TCC at 1000 seconds.

Emergency Overload Limit Curve

Conductor overcurrent operating limit that if exceeded will reduce the insulation life of a cable or reduce the mechanical life of a bare overhead conductor beyond an acceptable design loss of life limit.

Cable limit curves are based on the thermal inertia of the conductor, insulation and surrounding material. As a result, it can take from 1 to 6 hours for the temperature of a cable to stabilize after a change in load current. Therefore, under these emergency operating conditions, currents much greater than the rated ampacity can be supported. Tables 2 and 3 provide factors and percent overload capability for various installations.

Table 2 Cable K factors


Cable Size

K Factors

Air

UG Duct

Direct Buried

No Conduit

Conduit

< #2 AWG

0.33

0.67

1.00

1.25

#2 - 4/0 AWG

1.00

1.50

2.50

3.00

> 4/0 AWG

1.50

2.50

4.00

6.00

Table 3 Emergency overload current at 40°C ambient


Time

Percent Overload

Seconds

K=0.5

K=1

K=1.5

K=2.5

K=4

K=6

EPR-XLP

TN = 90°C

TE = 130°C

10

1136

1602

1963

2533

3200

3916

100

374

518

629

807

1018

1244

1000

160

195

226

277

339

407

10000

126

128

132

140

152

168

18000

126

127

128

131

137

147

THH

TN = 90°C

TE = 105°C

10

725

1020

1248

1610

2033

2487

100

250

338

407

518

651

794

1000

127

146

163

192

229

270

10000

111

112

114

118

124

131

18000

111

111

112

113

116

121

THW

TN = 75°C

TE = 95°C

10

987

1390

1703

2197

2275

3396

100

329

452

548

702

884

1080

1000

148

117

202

245

298

357

10000

121

123

125

132

142

154

18000

121

121

122

125

130

137

Similar methods exist to determine the limit curve for bare overhead conductor applications, but are not covered in this guide.

Emergency overload curves are typically not shown on a TCC. However, when shown, are plotted in the upper 2 decades of the TCC.

Short Circuit Damage Curve

Curve that describes the conductor short circuit current operating limit, which if exceeded, will damage the conductor insulation. The curve is calculated assuming all heat is absorbed by the conductor metal, with no heat transmitted from the conductor to the insulation.

Separate equations are given for copper and aluminum cables. Both equations relate conductor temperature rise to conductor size, fault current magnitude and fault duration.
Insulated copper conductors

t = 0.0297 log10 [(T2+234) / (T1+234)] (A/I)2 (1)

Insulated aluminum conductors

t = 0.0125 log10 [(T2+228) / (T1+228)] (A/I)2 (2)

For bare conductors the short circuit damage temperature limit is much higher than those listed for insulated conductors. In this case the curve describes the conductor short circuit current operating limit at which the maximum acceptable loss in conductor mechanical strength is reached. Therefore, if this limit is exceeded, the conductor will be damaged.

For bare stranded aluminum conductors the upper temperature limit is 340ºC (300º rise over a 40ºC ambient). For bare stranded ACSR conductors the upper temperature limit is 645ºC (605º rise over a 40ºC ambient).

Bare stranded aluminum conductors

t = (0.0671A/I)2 (3)

Bare stranded ACSR conductors

t = (0.0862A/I)2 (4)

where:

A = conductor area – circular mils
I = short circuit current – RMS amperes
t = time of short circuit – 0.01 to 10 seconds
T1 = rated insulation operating temperature limit
T2 = rated maximum insulation short circuit temperature limit

Example 1

Plot the conductor landmarks for 3-1/C, 500kCM, THWN copper cables installed in metallic conduit on a 480V distribution system.

Solution

FLA from NEC table 310.16 is 380A

Emergency overload points calculated from Tables 2 and 3

Time (sec.)

Current (%)

Current (A)

10

2197

8,348

100

702

2,667

1,000

245

931

10,000

132

501

18,000

125

475

Damage points calculated from (1) using:

A = 500,000 cmils
t = time of short circuit – 0.01 to 10 seconds
T1 = 75°C (Table 1)
T2 = 150°C (Table 1)

Time (sec.)

SC Current (A)

10.00

8,371

0.01

264,711

The results are plotted in figure 1.

Fig. 1 500MCM, CU, 600V, THWN conductor damage curve

Example 2

Plot the conductor landmarks for 336.4 kCM ACSR conductors installed on a 138kV aerial distribution system.

Solution

FLA from the Electrical Transmission and Distribution Reference Book is 530A
Damage points calculated from (4) using:

A = 336,400 cmils
t = time of short circuit – 0.01 to 10 seconds

Time (sec.)

SC Current (A)

10.00

9,170

0.01

289,977

The results are plotted in figure 2.

Fig. 2 336.4kCM, ACSR conductor damage curve

References

Other Application Guides offered by SKM Systems Analysis at www.skm.com

  • Aluminum Electrical Conductor Handbook, The Aluminum Association Inc., Washington, D.C., 3rd edition, 1989.
  • Electrical Transmission and Distribution Reference Book, ABB Power T&D Company, Raleigh, North Carolina, 1997.

The latest revision of:

  • IEEE Std 242, IEEE Recommended Practice for Protection and Coordination of Industrial and Commercial Power Systems (IEEE Buff Book)

Equipment Damage Curves Conductors

The information presented in this application guide is for review, approval, interpretation and application by a registered professional engineer only. SKM disclaims any responsibility and liability resulting from the use and interpretation of this information.

Reproduction of this material is permitted provided proper acknowledgement is given to SKM Systems Analysis Inc.

Purpose

The purpose of this guide is to provide basic information about conductor damage curves and characteristic landmarks necessary for plotting on time-current curves (TCC), for the purpose of equipment overcurrent protection.

Ampacity

The rated continuous current carrying capacity of the conductor at a referenced ambient temperature, allowable temperature rise, geometry and installation. For bare overhead conductors an ambient air temperature of 40°C is typical. For underground insulated power cables an ambient earth temperature of 20°C is typical. Temperature correction factors are then given to adjust the base ampacity for other ambient temperature levels.
If a cable is loaded continuously above rated ampacity the insulation temperature design limits will be exceeded. This will lead to loss of insulation life, not instantaneous failure.
If a bare overhead conductor is loaded continuously above rated ampacity the mechanical strength of the conductor is reduced. This will lead to a loss of mechanical life, not instantaneous failure.

Table 1 summarizes typical allowable conductor temperature limits under short circuit, emergency overload and normal operating conditions.

Table 1 Typical conductor operating temperature limits


Type

Insulation

Voltage

Short Circuit

Emergency

Normal

0.01 < t < 10 sec.

10 sec. < t < ~1-6 hrs

t > ~1-6 hrs

Al or Cu

TW

600V

150ºC

85ºC

60ºC

Al or Cu

THWN

600V

150ºC

90ºC

75ºC

Al or Cu

THHN

600V

150ºC

105ºC

90ºC

Al or Cu

XLP

5-15kV

250ºC

130ºC

90ºC

Al or Cu

EPR

5-15kV

250ºC

130ºC

90ºC

AAC

Air

All

340ºC

150ºC

100ºC

ACSR

Air

All

645ºC

150ºC

100ºC

The ampacity landmark is located in the top decade of a TCC at 1000 seconds.

Emergency Overload Limit Curve

Conductor overcurrent operating limit that if exceeded will reduce the insulation life of a cable or reduce the mechanical life of a bare overhead conductor beyond an acceptable design loss of life limit.

Cable limit curves are based on the thermal inertia of the conductor, insulation and surrounding material. As a result, it can take from 1 to 6 hours for the temperature of a cable to stabilize after a change in load current. Therefore, under these emergency operating conditions, currents much greater than the rated ampacity can be supported. Tables 2 and 3 provide factors and percent overload capability for various installations.

Table 2 Cable K factors


Cable Size

K Factors

Air

UG Duct

Direct Buried

No Conduit

Conduit

< #2 AWG

0.33

0.67

1.00

1.25

#2 - 4/0 AWG

1.00

1.50

2.50

3.00

> 4/0 AWG

1.50

2.50

4.00

6.00

Table 3 Emergency overload current at 40°C ambient


Time

Percent Overload

Seconds

K=0.5

K=1

K=1.5

K=2.5

K=4

K=6

EPR-XLP

TN = 90°C

TE = 130°C

10

1136

1602

1963

2533

3200

3916

100

374

518

629

807

1018

1244

1000

160

195

226

277

339

407

10000

126

128

132

140

152

168

18000

126

127

128

131

137

147

THH

TN = 90°C

TE = 105°C

10

725

1020

1248

1610

2033

2487

100

250

338

407

518

651

794

1000

127

146

163

192

229

270

10000

111

112

114

118

124

131

18000

111

111

112

113

116

121

THW

TN = 75°C

TE = 95°C

10

987

1390

1703

2197

2275

3396

100

329

452

548

702

884

1080

1000

148

117

202

245

298

357

10000

121

123

125

132

142

154

18000

121

121

122

125

130

137

Similar methods exist to determine the limit curve for bare overhead conductor applications, but are not covered in this guide.

Emergency overload curves are typically not shown on a TCC. However, when shown, are plotted in the upper 2 decades of the TCC.

Short Circuit Damage Curve

Curve that describes the conductor short circuit current operating limit, which if exceeded, will damage the conductor insulation. The curve is calculated assuming all heat is absorbed by the conductor metal, with no heat transmitted from the conductor to the insulation.

Separate equations are given for copper and aluminum cables. Both equations relate conductor temperature rise to conductor size, fault current magnitude and fault duration.
Insulated copper conductors

t = 0.0297 log10 [(T2+234) / (T1+234)] (A/I)2 (1)

Insulated aluminum conductors

t = 0.0125 log10 [(T2+228) / (T1+228)] (A/I)2 (2)

For bare conductors the short circuit damage temperature limit is much higher than those listed for insulated conductors. In this case the curve describes the conductor short circuit current operating limit at which the maximum acceptable loss in conductor mechanical strength is reached. Therefore, if this limit is exceeded, the conductor will be damaged.

For bare stranded aluminum conductors the upper temperature limit is 340ºC (300º rise over a 40ºC ambient). For bare stranded ACSR conductors the upper temperature limit is 645ºC (605º rise over a 40ºC ambient).

Bare stranded aluminum conductors

t = (0.0671A/I)2 (3)

Bare stranded ACSR conductors

t = (0.0862A/I)2 (4)

where:

A = conductor area – circular mils
I = short circuit current – RMS amperes
t = time of short circuit – 0.01 to 10 seconds
T1 = rated insulation operating temperature limit
T2 = rated maximum insulation short circuit temperature limit

Example 1

Plot the conductor landmarks for 3-1/C, 500kCM, THWN copper cables installed in metallic conduit on a 480V distribution system.

Solution

FLA from NEC table 310.16 is 380A

Emergency overload points calculated from Tables 2 and 3

Time (sec.)

Current (%)

Current (A)

10

2197

8,348

100

702

2,667

1,000

245

931

10,000

132

501

18,000

125

475

Damage points calculated from (1) using:

A = 500,000 cmils
t = time of short circuit – 0.01 to 10 seconds
T1 = 75°C (Table 1)
T2 = 150°C (Table 1)

Time (sec.)

SC Current (A)

10.00

8,371

0.01

264,711

The results are plotted in figure 1.

Fig. 1 500MCM, CU, 600V, THWN conductor damage curve

Example 2

Plot the conductor landmarks for 336.4 kCM ACSR conductors installed on a 138kV aerial distribution system.

Solution

FLA from the Electrical Transmission and Distribution Reference Book is 530A
Damage points calculated from (4) using:

A = 336,400 cmils
t = time of short circuit – 0.01 to 10 seconds

Time (sec.)

SC Current (A)

10.00

9,170

0.01

289,977

The results are plotted in figure 2.

Fig. 2 336.4kCM, ACSR conductor damage curve

References

Other Application Guides offered by SKM Systems Analysis at www.skm.com

  • Aluminum Electrical Conductor Handbook, The Aluminum Association Inc., Washington, D.C., 3rd edition, 1989.
  • Electrical Transmission and Distribution Reference Book, ABB Power T&D Company, Raleigh, North Carolina, 1997.

The latest revision of:

  • IEEE Std 242, IEEE Recommended Practice for Protection and Coordination of Industrial and Commercial Power Systems (IEEE Buff Book)

'기본 카테고리' 카테고리의 다른 글

Irricht엔진튜토리얼 01. Hello World  (0) 2009.03.19
Equipment Damage Curves Cables , 단시간 허용전류2  (0) 2009.03.19
수치해석학  (0) 2009.03.18
c# 리스트뷰에 등록된 파일 실행~  (0) 2009.03.16
arc drawing  (0) 2009.03.10

http://mathlinux.kku.ac.kr/~kimchang/lect/na/수치해석학

Code::Blocks IDE || Dev-Cpp|| 예제 및 라이브러리 설치
Octave(Matlab Clone)
Octave 사용법

	0.장수치해석이란 무엇인가?
1.장 수 체계와 오차 1.1 정수의 표현 1.2 소수의 표현 1.3 부동소수 1.4 오차와 유효자리수의 상실 1.5 수치해석에 필요한 수학적 기초
2.장 다항식 보간법 2.1다항식의 계산 2.2 보간 다항식의 존재성과 유일성 라그랑즈 보간 다항식 2.3 분할 차분표와 보간 다항식의 계산 뉴턴 보간 다항식 2.4 보간 다항식의 오차 2.5 Spline 보간법
3장 비선형 방정식의 해법 - 이분법 - 뉴턴법 - secant법 - 고정점 반복법 - 고차원 비선형 방정식의 해법 - Muller 방법
4장 선형방정식의 해법과 고유값 문제 4.1 가우스 소거법 4.2 LU 분해법 4.3 반복법 가우스 자코비 반복법 가우스 사이델 반복법 SOR 4.4 QR, 멱 방법 5장 수치 미분 과 적분 5.1 수치 미분 5.2 수치적분 - 사다리꼴 공식 - simpson 공식 5.3 Gauss 구적법
6장 근사이론과 곡선의 적합 - 자료의 적합과 최소 제곱 근사 - Garlekin 근사 - 직교 다항식과 근사법
7장 미분 방정식의 수치해법 Euler 방법과 변형 Taylor 방법 / Runge -Kutta 법 고계 미분 방정식과 연립 미분 방정식의 해법
8장 경계치 문제와 유한 차분법 - Garlekin 근사
9장 편미분 방정식의 수치해법

c# 리스트뷰에 등록된 파일 실행~
leafnaid 2007.12.09 22:32
답변 2| 조회 1,159

리스트 뷰에 폴더내의 파일들을 받아와 출력 시켰습니다.

탐색기같은걸 만들어 보았는데요, 트리 메뉴랑 리스트 뷰 메뉴까진 작성했어요.

문제는 리스트 뷰에 있는 아이템을 클릭시 실행을 시켜야 하는대요,

이건 제가 작성된 프로그램이 아닌 기본 연결된 프로그램으로 실행 시키고 싶습니다.

만약 시스템에 avi 파일이 미플과 연결되 있다면 미플을 실행 시키려구요.

해당 명령어와 리스트 뷰에 어떤 이벤트 처리를 하면 되나요?

리스트뷰에 DoubleClick 과 MouseDoubleClick 에다 다음과 같이 넣어 봤는데요,

File.OpenRead(pathdir + List_file.SelectedItems[0].SubItems[1].Text);

요렇게 넣어 봤어요. 틀린 명령어일 거라 생각은 하는데 아무리 더블 클릭 해도 무응답 인거 보면

아무래도 다른 이벤트에다 넣어야 할듯 하네요. 어디다 넣어야 하는지랑 어떤 명령어 넣어야 하는지

알려 주세요.

또한 리스트 뷰에 불러온 파일들이 직접 설정한 이미지 리스트가 아닌 시스템에 있는 본래의 아이콘으로

보여지게 하려면 어떻게 해야 하나요? 그리고 버튼을로 선택된 아이템의 이미지를 이미지 리스트가 아닌

사용자가 직접 하드에서 가져다 쓰게 하고 싶은데요. 이건 어떻게 해야 하나요?

답변해 주시면 감사하겠습니다.

신고

의견 쓰기
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
re: c# 리스트뷰에 등록된 파일 실행~
gwanunjang 답변채택률 85.4%
2007.12.10 18:02
질문자인사 뭔진 잘모르겠네요., 좀더 노력해봐야 할듯...-ㅅ-

책에 파일탐색기 만들기 예제가 있는데 이렇게 씌여있네요

//~~

파일탐색기는 폴더 및 파일 아이콘을 Win32 함수인 SHGetFileInfo()로 얻어옵니다. 또한 선택한 파일을 실행하는데도 Win32 함수인 ShellExecute()를 사용합니다. 이들 함수에 대한 정보는 MSDN에서 필터링 기준을

Platform SDK로 설정하고 검색하면 얻을 수 있습니다. 파일탐색기 프로그램은 DllImport어트리뷰트 기법을 사용해 두 함수를 사용합니다.

[DllImport("Shell32.dll")]

private static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi,

uint cbFileInfo, SHGFI uFlags);

[System.Runtime.InteropServices.DllImport("shell32.dll")]

public static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters,

string lpDirectory, int nShowcmd);

~~//

출처 : 책 >> C# Programming Bible with .Net framework 3.0

Hi,

I was starting to think along the same lines as you.
By the way do you have an A level or degree in maths or something?

I came up with the following.

If point1 coordinates are x1,y1
If point2 coordinates are x2,y2
If circle/arc centre coordinates are cx,cy then>>

cx=(x1+x2)/2
cy=(y1+y2)/2

Now for distances and angles>>

Angle1 is the angle to point1
Angle2 is the angle to point2

Angle1 is given by>>

Angle1=ArcSin( (y1-cy) / ( x1-cx) ) 'Opposite/ajacent

and Angle2 by>>

Angle2=ArcSin( (y2-cy) / ( x2-cx) ) 'Opposite/ajacent


I've been looking up code to do ArcSin ( or Inverse Sine ) function
on GOOGLE.

Anyway once i get the angle values and convert to RADIANS by dividing
the angles by the following number.>>
57.2957795 which is also equal to 360/(2*PI)

and the RADIUS=SQR( ((x1-cx)^2)) + ((y1-cy)^2) )

you can then say>>

SORRY THIS CODE IS FOR VB.NET
DOWNLOAD THE EXPRESS EDITION for FREE!!
( WHICH THIS CODE SHOULD WORK WITHIN ) HERE>>

http://msdn.microsoft.com/vstudio/express/vb/


        'cx and cy are the centre coordinates of the circle.        Dim cx As Integer        Dim cy As Integer        'x2 and y2 are the plotted positions that are calculated.        Dim x2 As Integer        Dim y2 As Integer        Dim Radius As Double        Dim PI As Double        'Just a loop Count variable to go plot each point        'on the arc or circle.        Dim Count As Double        'Set up a white PEN of width=1        Dim aPen As New Pen(Color.White, 1)        Radius = SQR( ((x1-cx)^2)) + ((y1-cy)^2) )        PI = Math.PI             For Count = Angle1 To Angle2 Step 0.05 'Can be any step value.            x2 = Math.Round(Radius * Math.Sin(Count) + cx, 3)            y2 = Math.Round(Radius * Math.Cos(Count) + cy, 3)           pictureBox1.CreateGraphics.DrawLine(aPen, x2, y2, x2 + 1, y2)        Next Count


I know this method is not "ideal" for some people as i'm not using
SetPixel, but to do that I believe you need to load a bitmap first.
With the above METHOD you can plot on the FORM itself.
To do this i think the last line needs to be changed within
the FOR NEXT loop to>>

Me.CreateGraphics.DrawLine(aPen, x2, y2, x2 + 1, y2)


To go backwards (anti-clockwise), put a minus sign in either equation in the code above so it reads as>>

x2 = Math.Round(-Radius * Math.Sin(Count) + cx, 3)
'or but not in both
y2 = Math.Round(-Radius * Math.Cos(Count) + cy, 3)

You could multiply the radius by minus 1.

I'm off to give it a try....


Regards,

Dr M.

P.S. Richard, i followed the bit about a right angled line for
all of the points to plot from but the arc from any other point, other than the centre, would be a partial ellipse, sometimes
a diagonal ellipse.

요약 (Summary)

이 문서는 닷넷 프레임워크 환경과 이기종 환경 간의 소켓 통신을 위한 간략한 개요를 제시합니다. 특히 HTTP 또는 SOAP 등의 텍스트 기반의 통신이 아닌, C/C++ 개발자들이 선호하는 구조체 패킷을 이용한 통신에 초점을 두었습니다.

뿐만 아니라 이를 지원하기 위한 소켓 라이브러리(C# 2.0 지원)도 함께 제공합니다. MIT 라이센스를 채택하였으며, 라이센스에 명시된 바와 같이 상업적인 목적으로도 사용할 수 있습니다.


소개 (Introduction)

이 문서는 닷넷 프레임워크 기반의 소켓 프로그램을 작성하려는 개발자를 위해 작성되었습니다. 닷넷 개발자는 C/C++ 등으로 작성된 서버/클라이언트와 통신하기 위한 모듈 또는 소프트웨어를 제작해야 하는 상황에 부닥치게 됩니다. 닷넷 환경에서의 소켓 프로그래밍에 익숙하지 않은 개발자는 많은 어려움에 직면하게 됩니다.

이 문서는 다음과 같은 문제점을 해결하기 위한 가이드라인을 제시합니다.

  • 닷넷 환경에서 구조체를 이용한 소켓 통신 구현이 어렵습니다.
  • 닷넷 환경과 이기종 환경 간의 통신에서는 데이터의 타입 변환을 신중히 생각해야 합니다.
  • 그밖에 문자열 변환 등에서 부닥치게 되는 예기치 못한 문제들이 있습니다.

또한 닷넷 환경에서 소켓 통신을 할 때 자주 쓰이는 주요 함수 또는 패턴을 기술합니다.

이 문서의 주요 섹션은 다음과 같이 구성되어 있습니다.


시스템 요구사항 (System Requirements)

이 문서 상에 기술된 작업을 위한 시스템 요구사항은 다음과 같습니다.

  • Microsoft Windows?? 2000, Windows XP Professional, or Windows 2003 operating system

  • Microsoft .NET Framework Software Development Kit (SDK), version 1.1.

이 문서 상에 기술된 작업이 테스트된 환경은 다음과 같습니다.

  • Microsoft Windows?? 2000 Professional operating system

  • Microsoft .NET Framework Software Development Kit (SDK), version 1.1

  • Microsoft Visual Studio?? 2003 development system

  • Microsoft Windows?? XP Professional operating system

  • Microsoft .NET Framework Software Development Kit (SDK), version 2.0

  • Microsoft Visual Studio?? 2005 development system


참고 문헌 (Related Links)


누가 이 문서를 읽어야 하는가? (Who Should Read This Document?)

이 문서는 C/C++ 소켓 프로그래밍에 익숙하지만 닷넷 프레임워크 환경에서 소켓 프로그래밍을 해야 하는 개발자를 위해 가이드라인을 제시합니다.


반드시 알아야 할 것 (What You Must Know)

C/C++ 환경에서의 소켓 프로그래밍에 대한 기본적인 지식이 필요합니다. 관리되는 메모리의 구조 및 관리되지 않는 메모리의 구조에 대한 차이를 이해하고 있어야 합니다. 닷넷 기반에서 Binary 데이터를 다루기 위해 필요한 기본적인 지식이 필요합니다.


새로운 사항 (What’s New)

  1. 2006. 사용자 정의 함수 ExtendedTrim의 버그 수정.

  2. 2007.07.25. 소켓 라이브러리 추가


닷넷 환경에서 구조체는 관리되는 메모리 구조를 갖는다

일반적인 C/C++에서는 구조체를 이용하여 소켓 통신을 합니다. 다음은 인증을 위한 구조체를 정의하고, 이를 통해 통신을 하는 예제 코드입니다.

[표: 인증을 위한 패킷 구조체]

[C]typedef struct tag_BIND{char szID[16];char szPWD[16];} BIND;#define BIND_SIZE sizeof(BIND)

[표: 인증 패킷 송신 예제]

[C]if( SendData(sockfd,(char*)&packetbind,BIND_SIZE) != BIND_SIZE ){// Error Handlingcout << "ERROR : BIND 송신 실패" << endl;return 0;}

닷넷 환경에서는 위와 같이 구조체를 사용한 소켓 통신이 지원되지 않습니다.

[표: C#으로 작성된 인증 패킷 구조체

[C#]public struct BIND{public char szID[16];public char szPWD[16];};

만약 위와 같은 구조체를 선언해서 전송하면, 수신하는 측에서는 16 bytes + 16 bytes을 받아야 합니다. 그러나 실제로는 약 100 bytes의 데이터를 수신하게 됩니다. 이는 닷넷 환경에서 구조체가 관리되는 메모리 구조를 갖기 때문입니다.


닷넷 환경에서의 구조체를 이용한 소켓 통신 구현 방법

닷넷 환경에서 구조체를 이용한 소켓 통신을 지원하기 위한 방법은 크게 두 가지로 나뉩니다.

  • 마샬링(Marshaling)을 이용한 구조체 사용.
  • 바이너리 포매터(Binary Formatter)의 사용.

마샬링을 이용하면, C/C++에서와 비슷한 방식으로 소켓 프로그래밍을 할 수 있습니다. 하지만 이 문서에서는 두 번째 방법을 사용합니다.


패킷 송신 방법

다음과 같은 인증 요청 패킷을 송신해야 한다고 가정합니다.

[표: 인증 요청 패킷]

[C]typedef struct tag_BIND{int nCode;char szPWD[16];} BIND;

이러한 구조의 패킷을 보내기 위해 다음과 같은 코드가 필요합니다.

[C#]// 패킷 사이즈 public int BODY_BIND_SIZE = 4 + 16;// 인증 패킷 구조체 public struct Bind{public int nCode;public string strPWD;}// 인증 패킷 구조체를 바이트 배열로 변환하는 함수. public byte[] GetBytes_Bind(Bind bind){byte[] btBuffer = new byte[BODY_BIND_SIZE];MemoryStream ms = new MemoryStream(btBuffer,true); BinaryWriter bw = new BinaryWriter(ms);// nCode bw.Write( IPAddress.HostToNetworkOrder( bind.nCode ) );// szPWD try{byte[] btPWD = new byte[16];Encoding.Default.GetBytes(bind.strPWD,0,bind.strPWD.Length,btPWD,0);bw.Write( btPWD );}catch(Exception ex){// Error Handling }bw.Close();ms.Close();return btBuffer;}// 사용 예제Bind bind = new Bind();bind.nCode = 12345;bind.strPWD = “98765”;byte[] buffer = GetBytes_Bind(bind);socket.Send(buffer);

BinaryWriter를 사용하여 4 bytes의 Integer값과 16 bytes의 문자열을 바이트 배열에 써넣습니다. 위의 GetBytes_Bind를 실행하면 다음과 같은 구조의 바이트 배열이 생성됩니다. 이때 Integer 타입의 nCode를 Network Byte Order로 변환하는 것에 주의하십시오.

9

8

7

6

5

\0

\0

\0

\0

\0

\0

\0

\0

\0

\0

\0

파란색: Integer 타입의 nCode
녹색: String 타입의 strPWD
흰색: NULL로 구성된 바이트 배열

패킷 수신

위에서 송신한 인증 요청에 대한 응답을 다음과 같은 형태로 받는다고 가정합니다.

[표: 인증 요청 패킷]

[C] typedef struct tag_BIND_ACK{int nCode;char szPWD[16];int nResult;} BIND_ACK;

위와 같은 패킷을 수신하기 위해서는 다음과 같은 코드가 필요합니다.

[C#] public struct BindAck{public int nCode;public string strPWD;public int nResult;}public static BodyAck0 GetBindAck(byte[] btBuffer){BindAck bindAck = new BindAck();MemoryStream ms = new MemoryStream(btBuffer,false);BinaryReader br = new BinaryReader(ms);// Integer 타입의 nCodebindAck.nCode = IPAddress.NetworkToHostOrder( br.ReadInt32() );// 16 bytes의 문자열bindAck.strPWD = ExtendedTrim( Encoding.Default.GetString(br.ReadBytes(16)) );// Integer 타입의 nResultbindAck.nResult = IPAddress.NetworkToHostOrder( br.ReadInt32() );br.Close();ms.Close();return bindAck;}// 문자열 뒤쪽에 위치한 NULL을 제거한 후에 공백문자를 제거한다.public string ExtendedTrim(string source){string dest = source;int index = dest.IndexOf('\0');if( index > -1 ){dest = source.Substring(0,index+1);}return dest.TrimEnd('\0').Trim();}// 사용 예제int BIND_ACK_SIZE = 4 + 16 + 4;byte[] buffer = new byte[BIND_ACK_SIZE];if( socket.Receive(buffer) == BIND_ACK_SIZE ){BindAck bindAck = GetBindAck(buffer);}else{// ERROR HANDLINGM}

위에서 ExtendedTrim() 라는 함수를 정의해서 사용했습니다. 이 함수가 필요한 이유에 대해서는 다음 장에서 설명하겠습니다.


주요 함수

  1. System.Net.IPAddresss.NetworkToHostByteOrder(…)

    1. 요약

      네트워크 바이트 순서에서 호스트 바이트 순서로 숫자를 변환합니다. NetworkToHostByteOrder 함수는 오버로딩 되어 있어서 short, int, long 타입을 모두 변환할 수 있습니다.

    2. 설명

      서로 다른 컴퓨터에서는 멀티바이트 정수 값 내에서 바이트의 순서를 지정하는 데 서로 다른 규칙을 사용합니다. 일부 컴퓨터에서는 MSB(최상위 바이트)를 먼저 배치(big-endian 순서)하지만 다른 컴퓨터에서는 LSB(최하위 바이트)를 먼저 배치(little-endian 순서)합니다. 바이트 순서가 다르게 지정된 컴퓨터를 사용하려면 네트워크를 통해 보내는 모든 정수 값을 네트워크 바이트 순서로 보냅니다.

    3. 예제

      [C#] public void NetworkToHostOrder_Long(long networkByte){long hostByte;// Converts a long value from network byte order to host byte order. hostByte = IPAddress.NetworkToHostOrder(networkByte);Console.WriteLine("Network byte order to Host byte order of {0} is {1}", networkByte, hostByte);}
  2. System.Net.IPAddresss.HostToNetworkByteOrder(…)

    1. 요약

      호스트 바이트 순서에서 네트워크 바이트 순서로 숫자를 변환합니다. HostToNetworkByteOrder 함수는 오버로딩 되어 있어서 short, int, long 타입을 모두 변환할 수 있습니다.

    2. 설명

      여기를 참고하십시오.

  3. System.Text.Encoding.Default.GetBytes(…)

    1. 요약

      지정된 String 이나 문자의 전부 또는 일부를 바이트 배열로 인코딩한 후, 패킷을 전송합니다. Encoding 타입은 Default 외에도 여러 가지가 있습니다.

    2. 인코딩 타입

      1. Default: 시스템의 현재 ANSI 코드 페이지에 대한 인코딩을 가져옵니다.

      2. ASCII: ASCII(7비트) 문자 집합에 대한 인코딩을 가져옵니다.

      3. BigEndianUnicode

        1. 요약

          big-endian 바이트 순서로 유니코드 형식에 대한 인코딩을 가져옵니다.

        2. 설명

          유니 코드 문자는 big-endian과 little-endian의 두 가지 바이트 순서로 저장할 수 있습니다. Intel 컴퓨터 같이 little-endian 플랫폼을 사용하는 컴퓨터에서는 일반적으로 유니코드 문자를 little-endian 순서로 저장하는 것이 보다 효율적이지만 대부분의 다른 플랫폼에서는 유니코드 문자를 big-endian 순서로 저장합니다.

          유니코드 파일은 big-endian 플랫폼에서는 16진수 0xFE 0xFF로 표시되고 little-endian 플랫폼에서는 16진수 0xFF 0xFE로 표시되는 바이트 순서 표시(U+FEFF)로 구별할 수 있습니다.

      4. Unicode: little-endian 바이트 순서로 유니코드 형식에 대한 인코딩을 가져옵니다.

      5. UTF7: UTF-7 형식에 대한 인코딩을 가져옵니다.

      6. UTF8: UTF-8 형식에 대한 인코딩을 가져옵니다.

    3. 예제

      [C#]string strPWD = "password";try{byte[] btPWD = new byte[16];Encoding.Default.GetBytes(strPWD,0,strPWD.Length,btPWD,0);}catch(Exception ex){// Error Handling }
  4. System.Text.Encoding.Default.GetString(…)

    1. 요약

      지정된 바이트 배열을 지정된 인코딩 타입의 문자열로 디코딩합니다.

    2. 인코딩 타입

      인코딩 타입을 참조하십시오.

    3. 예제

      다음 예제에서는 GetString의 오버로드된 버전에 대한 사용법을 보여 줍니다. 사용할 수 있는 다른 예제를 보려면 개별 오버로드 항목을 참조하십시오.

      [C#] private string ReadAuthor(Stream binary_file) {System.Text.Encoding encoding = System.Text.Encoding.UTF8;// Read string from binary file with UTF8 encoding byte[] buffer = new byte[30];binary_file.Read(buffer, 0, 30);return encoding.GetString(buffer);}
  5. 사용자 정의 함수 ExtendedTrim(…)

    1. 요약

      NULL 종료 문자열을 유니코드 기반의 System.String 으로 변환하기 위한 함수입니다. 종료문자 NULL 이후의 문자열을 제거합니다.

    2. 함수 정의

      // 문자열 뒤쪽에 위치한 NULL을 제거한 후에 공백문자를 제거한다.public string ExtendedTrim(string source){string dest = source;int index = dest.IndexOf('\0');if( index > -1 ){dest = source.Substring(0,index+1);}return dest.TrimEnd('\0').Trim();}
    3. 설명

      아래와 같은 코드를 고려해보겠습니다.

      [C#] string strPWD = "password";byte[] btPWD = new byte[16]; try { Encoding.Default.GetBytes(strPWD,0,strPWD.Length,btPWD,0); } catch(Exception ex) { // Error Handling }

      위의 코드가 실행되면 바이트 배열 btPWD의 구조는 다음과 같습니다.

      p

      a

      s

      s

      w

      o

      r

      d

      \0

      \0

      \0

      \0

      \0

      \0

      \0

      \0

      녹색: String 타입의 strPWD
      흰색: NULL로 구성된 바이트 배열

      바이트 배열 btPWD를 다시 문자열로 변환해보겠습니다.

      [C#] string strPassword = Encoding.Default.GetString(btPWD);strPassword.Trim();Console.WriteLine(strPassword + "!");

      위의 코드에서 기대했던 출력값은 password!였습니다. 그러나 실제로 코드를 실행시켜보면 password !라고 출력됩니다. 클래스 System.String 에 정의된 Trim()함수는 문자열 양측에 놓인 공백문자는 제거하지만, NULL은 제거하지 않습니다.

      이 문제 때문에 여러 가지 기능이 예치기 않게 오작동할 수 있습니다. 특히 이벤트 로그에 NULL이 들어간 문자열을 기록하려고 시도하면, 문제가 발생합니다. 다음 예제에서 위에서 생성한 문자열을 이벤트 로그에 기록합니다.

      [C#] // Create the source, if it does not already exist.if(!EventLog.SourceExists("MySource")){EventLog.CreateEventSource("ySource", "MyNewLog");Console.WriteLine("CreatingEventSource");}// Create an EventLog instance and assign its source.EventLog myLog = new EventLog();myLog.Source = "MySource";// Write an informational entry to the event log. string strLog = String.Format("{0}{1}{2}",strPassword,Environment.NewLine,strPassword);myLog.WriteEntry(strLog);

      위의 예제에서 기대했던 출력 값은 다음과 같습니다.

      passwordpassword

      그러나 실제로는 다음과 같은 출력을 얻게 됩니다.

      password

      문자열 strLog 중간에 NULL이 포함되어 있기 때문에, 뒤에 이어지는 문자열은 기록되지 않습니다. 일반적인 C/C++ 프로그래밍에서는 처음 문자열 뒤쪽에 위치한 NULL을 제외하고, 두 번째 문자열을 연결합니다. 다음의 예제 코드를 보십시오.

      [C++] char szPassword[16];memset(szPassword,NULL,sizeof(szPassword));sprintf(szPassword,"%s","password");char szBuffer[128];memset(szBuffer,NULL,sizeof(szBuffer));sprintf(szBuffer,"%s%s",szPassword,szPassword);printf("%s",szBuffer);

      위의 코드에서 szPassword 두 개를 연결하여 szBuffer에 저장합니다. 이 경우에 다음과 같은 메모리 구조가 됩니다.

      p

      a

      s

      s

      w

      o

      r

      d

      p

      a

      s

      s

      w

      o

      r

      d

      \0

      \0

      \0

      \0

      \0

      \0

      녹색 : 첫번째 문자열
      파란색 : 두번째 문자열

      위에서 알 수 있듯이 일반적으로 C/C++ 프로그래밍에서는 NULL을 제외하고 두 문자열을 연결합니다. 그러나 닷넷에서 기본으로 제공되는 Trim() 함수는 NULL을 제외하지 않고 두 문자열을 연결합니다. 그 때문에 앞서 제시한 이벤트로그 예제에서는 다음과 같은 메모리 구조를 갖게 됩니다.

      p

      a

      s

      s

      w

      o

      r

      d

      \0

      \0

      p

      a

      s

      s

      w

      o

      r

      d

      \0

      녹색 : 첫번째 문자열
      파란색 : 두번째 문자열

데이터 타입

일반적으로 C/C++의 경우에 CPU의 종류에 따라 숫자형 데이터 타입의 크기가 달라집니다. 32 bits CPU 환경에서 Long Integer 타입은 4 bytes(32 bits)이지만, 64 bits CPU 환경에서는 8 bytes (64 bits)가 됩니다. 보통의 경우라면 닷넷 개발자는 32 bits환경의 이기종 서버/클라이언트와 통신하는 소프트웨어를 제작하게 됩니다. 이때 다음의 표를 참고하여 데이터 변환을 하도록 해야 합니다.

형식

범위

크기

.Net Framework 형식

Sbyte

-128 ~ 127

부호 있는 8비트 정수

System.SByte

Byte

0 ~ 255

부호 없는 8비트 정수

System.Byte

Char

U+0000 ~ U+ffff

유니코드 16비트 문자

System.Char

Short

-32,768 ~ 32,767

부호 있는 16비트 정수

System.Int16

Ushort

0 ~ 65,535

부호 없는 16비트 정수

System.UInt16

Int

-2,147,483,648 ~ 2,147,483,647

부호 있는 32비트 정수

System.Int32

Uint

0 ~ 4,294,967,295

부호 없는 32비트 정수

System.UInt32

Long

?9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

부호 있는 64비트 정수

System.Int64

Ulong

0 ~ 18,446,744,073,709,551,615

부호 없는 64비트 정수

System.UInt64

예를 들어 32 bits CPU 환경일지라도 .Net Framework 하에서 Long Integer 타입의 크기는 8 bytes입니다.


소켓 라이브러리

Application Block for socket communication의 역사

  1. 2005.02.03. 버전 1.0 출시.

  2. 2005.03.25. 버전 1.5 출시.

  3. 2007.07.25. 버전 2.0 출시.

    • MIT 라이센스 채택.

    • C# 2.0용으로 변환.

    • 약간의 리팩토링.

    • XML 설정 파일 지원하지 않음.

    • Microsoft Enterprise Library와 같은 외부 라이브러리에 대한 의존성 제거.


라이브러리에 대해

라이브러리를 다운로드 받은 후, Visual Studio 2005나 Visual Studio 2005 Express Edition에서 솔루션 파일을 열고 빌드하면 됩니다.

예제나 설명서를 제공하진 않지만 Tests 폴더에 단위 테스트 코드가 있습니다. 특별히 이해하기 어려운 코드가 없으니 문제 없으리라 생각합니다.

C# 문자열(System.String)을 ANSI 바이트 코드(char[])로 변환하기
  1. MemoryPacketCommandcmd=newMemoryPacketCommand();
  2. //CreateaFirstParameter.-Binary
  3. stringsource1="GoodCompany";
  4. byte[]dest1=StringToByteArray(source1);
  5. MemoryPacketParameterpacket1=newMemoryPacketParameter();
  6. packet1.ParameterName="@ByteArray1";
  7. packet1.Size=dest1.Length;
  8. packet1.Value=dest1;
  9. packet1.MpType=MpType.Binary;
  10. packet1.FixedSize=false;
  11. //AddaFirstParametertotheCommand
  12. cmd.Parameters.Add(packet1);
  13. //CreateaMemoryPacketByteArray
  14. cmd.ToBytes();
ANSI 바이트 코드(char[])를 C# 문자열(System.String)로 변환하기
  1. MemoryPacketCommandcmd=newMemoryPacketCommand();
  2. //CreateaFirstParameter.-Binary
  3. stringsourceString1="GoodCompany";
  4. byte[]source1=StringToByteArray(sourceString1);
  5. MemoryPacketParameterpacket1=newMemoryPacketParameter();
  6. packet1.ParameterName="@SomeString";
  7. packet1.Size=source1.Length;
  8. packet1.MpType=MpType.String;
  9. packet1.FixedSize=true;
  10. //AddaFirstParametertotheCommand
  11. cmd.Parameters.Add(packet1);
  12. MemoryPacketParameterCollectioncollection=cmd.FromBytes(source1);
  13. MemoryPacketParameternewParm1=(MemoryPacketParameter)collection["@SomeString"];
  14. Assert.AreEqual(sourceString1,newParm1.Value);



//파일 읽기
private void FileRead(params string[] UserInfo)
{
FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Read);
StreamReader st = new StreamReader(fs, System.Text.Encoding.UTF8);

st.BaseStream.Seek(0, SeekOrigin.Begin);

while (st.Peek() > -1)
{
stringtemp = st.ReadLine();
//MessageBox.Show(aaa);
}
st.Close();
fs.Close();
}

//파일쓰기

private void FileWrite(string str)
{
FileStream fs = new FileStream(FileName, FileMode.Append, FileAccess.Write);
//FileMode중 append는 이어쓰기. 파일이 없으면 만든다.

StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
sw.WriteLine(str);
sw.Flush();
sw.Close();
fs.Close();
}

리눅스 시스템 시간동기화 하기 ( rdate, ntp )

시간동기화에 대해서 가끔 중요성을 상실할때가 너무많다.
심하게 둔한 관리자는 몇주, 몇달후 날짜가 안맞다는 고객의 제보로 수정 경우도...
저같은 경우는 시스템 설치직후 이 작업부터 시행합니다 ^^;


1. rdate 를 이용한 동기화
- 레드햇계열 및 여타 배포판에서도 별도의 설치과정필요없이 사용할수있다.
쉘스크립파일을 하나 작성한다.

ex) time-sync.cron ---------------------------
#!/bin/bash
/usr/bin/rdate -s time.bora.net && /sbin/clock -w
---------------------------------------------

저장후 실행권한 부여
#chmod 755 time-sync.cron

작성한 파일을 /etc/cron.daily 로 복사 ( 일일 새벽 4시에 동기화 스크립트를 수행함 )

2. ntp 를 이용한 동기화

- rdate 를 이용한 방법보다 소수점 몇몇점이하까지 상세히 동기화해준다고해서 애용중;

#rpm -qa | grep ntp 명령으로 "ntp-버젼" 이 출력되지않으면
http://rpmfind.net 에서 "ntp" 로 검색해서 배포판에 해당하는 패키지를 설치한다

ex1)
OS : Fedora Core 3
#wget ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm

ex2)
#rpm -Uvh ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm


- 동기화
  #ntpdate -b -s time.kriss.re.kr
  // -s : 결과를 화면이 아닌 syslog 로 보냄

* 다음과 같은 오류가 발생한 경우
 [root@truefeel root]# ntpdate -b time.kriss.re.kr
 17 Mar 21:03:25 ntpdate[8244]: no server suitable for synchronization found


 -> NTP 프로토콜은 UDP port 123 을 사용하는데, 이 포트가 방화벽 등으로
    막혀있는 경우에는

    #ntpdate -u time.kriss.re.kr

    처럼 -u 를 옵션을 사용해서 다른 포트 사용하거나
IPTABLE 을 사용중이면 OUTBOUNT UDP 123 포트를 열어준다

- cron.daily 에 등록 ( 쉘스크립트 파일 작성 )
ex) time-sync.ntp ---------------------------
#!/bin/bash
/usr/sbin/ntpdate -b -s time.kriss.re.kr && /sbin/clock -w
---------------------------------------------

저장후 실행권한 부여
#chmod 755 time-sync.ntp

작성한 파일을 /etc/cron.daily 로 복사 ( 일일 새벽 4시에 동기화 스크립트를 수행함 )

Posted

리눅스의 배포판확인, 커널버전 확인 방법


강사 : 박성수 (papa@superuser.co.kr)

리눅스의 배포판버전, 커널버전확인방법

1. 개론

별것 아닌 것 같지만, 리눅스를 처음사용하거나 초보자인경우에는 리눅스의 버전확인하는 방법이 애매할때가 있다.

물론, 자기자신이 설치한 경우에는 기억을 하고 있어서 알겠지만 설치한 기간이 꽤오래된 경우에는 가끔씩 헷갈릴때가 있다.

리눅스설치를 6.0으로 했는지 6.1, 6.2로 했는지 또는 7.0으로 했는지 7.1로 했는지,

그리고 커널버전이 정확히 어떻게 되는지등에 관해서 정확한 버전확인을 원한다면 아래를 참조하기 바란다.

2. 배포판 버전확인

/etc/ 디렉토리에 보면 redhat-release라는 파일이 있다. 이 파일내용에는 배포판의 이름과 버전정보가 있다.

물론, 누군가 수정했다면 이 정보는 신뢰하기 힘들겠지만, 어쨌든 이 정보를 이용하여 배포판의 버전을 확인할수 있다.

3. 커널버전확인

리눅스의 커널버전확인은 간단히 uname -a 로 하면 알수 있다.

4. 리눅스 설치 module 정보확인

리눅스박스에 설치된 모듈에 대한 구체적인 파일내역을 확인하려면 아래예와 같이 /lib/modules 디렉토리를 참조하기 바란다.

5. 설치패키지 전체확인

참고로 rpm 명령어를 이용하여 설치된 패키지를 차근차근 살펴보려면 "rpm -qa | more"로 살펴보면 된다.

6. 특정 설치패키지 확인

아래와 같이 "rpm -qa | grep 패키지명"으로 특정 패키지의 설치여부를 확인할수 있다.

7. 초기 설치 패키지 정보확인

/tmp/install.log 파일을 보면 리눅스설치초기시에 설치된 패키지이름들이 들어가 있다.

이 파일도 함께 참조하면 좋을 것 같아서 언급하여본다.

'기본 카테고리' 카테고리의 다른 글

C# (CSharp) 파일 입출력  (0) 2009.02.27
리눅스 시스템 시간동기화 하기 ( ntp, rdate )  (0) 2009.02.23
m480  (0) 2009.02.19
MySQL 날짜 시간 함수  (0) 2009.02.18
Compressing and DeCompressing a File in C#  (0) 2009.02.18

카페 TIP게시판의 게시물 중에 (질문/사용설명서에 포함된 내용/ 검증되지 않은 내용/프로그램게시)이 포함된 내용은 목록에 정리 되어있지 않습니다.실수로 일부 내용이 빠질 수도 있습니다.

게시판에 게시물들 읽다가 눈에 띄는 게시물들만 골라 봤습니다.

1. 여러 버그와 프로그램 충돌로 고생하시는 분들에게 -스티커님

2.

3. 미라지 활용방법 AE Button+FTouchSL+780 Cursor조합) -제이대디님

4. 레지수정을 통한 미라지 각종 사운드무음화 하기(게시물 내용은 I780/ 댓글을 참고)

5. mp3/wma/mmf벨소리 설정하기

6. 삼성 ANYCALL A/S 문의 바로가기 주소링크

7. 초기 미라지 응답 속도 높이는 방법

9. 터치스크린 향상 레지스트리 수정방법

10. 은디아예님의 미라지 쿼티 완전정복하기

11. nodata필요없는 3G차단 방법

12. 은디아예님의 배터리 체감 사용시간 늘리기

13. 공대생님의 PDA처음 사용자만 보세요.

14. 은디아예님의 수동 펌업하기

15. WYZ070하기(WM6.1 VOIP용)

16. NET1000 입/해지 카페

요금제/가입/번호 변경<?xml:namespace prefix = o />

1. SKT

1. 신규 가입후 변호변경 방법

2. SKT번호 이동 3개월 이내시 무료문자 150

3. 커피N무비 무한벨 정액제

4. SKT e-mail 서비스

5. 114통한 요금제 해지 예약 방법

6. E-mail 3000 해지하기

미라지 사용기

SKT용 미라지(M480)

KTF용 미라지(M4800)

1. 두끄님의 미라지 활용기(동영상)

2. JUNOWEB님의 프로그램 설치기

3. 동해랑님의 어플 설치 사용기/2

1. capdw126 님의 사용기

2. kirinsunflow 사용기

미라지 H/W /롬업데이트

  1. 키패드

  2. 배터리

    1. 대용량 배터리 사용하기

  3. 충전기 관련

    1. 충전케이블 제작

      1. 우지니님

  4. 터치스크린

  5. 교통카드 심기

  6. 롬 업데이트

  7. USIM문제

연락처

초기부팅/프로그램 일반/레지스트리 수정관련/백업

1. 버그

2. 리어 하기

3. 보기 변경안될

4. 리기

5. 초기 미지

6. 스트

7. 비설치 유틸의 바로가기 설정 레지스트리 수정/ 메일 설정방법

8. OK버튼의 사용법

9. SKT

10. 초기 부팅시 CPROG.EXE.에러

1.

Activesync/WMDC 6.1

  1. WMDC (VISTA 유저)

  2. Activesync

    1. 이동식 디스크로 결하기 (빠른 파일이동)

    2. USB연결을 이용한 인터넷 안될 때

    3. 에러코드별 분류

      1. 80070490오류

      2. 86000107오류

    4. 블루투스 연결

1. 블루투스를 통한 activesync 연결 안될때

2. BLUESOLEIL 블루투스 연결하기

3. 블루투스로 HSDPA연결하여 인터넷 하기

4. ACTIVEYSN파트너 설정 오류 해결

5. 루투

미라지튠 관련

내부 메모리 확보 및 외장메모리

1. 내부메모리

1. OPERA 브라우져 삭제로 내부 메모리 확보하기

2. 미라지용 설치 프로그램 메모리 점유량 v1.1 (아웃룩 싱크, 펌업 초기 메모리 정보 포함)

3.

2. 외장 메모리

1. SDHC.CAB 패치 설치 안될

무선랜/3G연결

  1. 무선랜

    1. NESPOT

  2. 3G연결

문자 /메일

  1. 문자 프로그램

    1. 해외문자 보내기(ms-sms)

    2. 특정위치에 문자 바로보기

  2. 메일(OUTLOOK)

키패드/입출력 TIP

1. 한영 입력상태창 표시하기

2. I780에서 한글 입출력 하기

3. 미라지에서 천지인,모아키,디오펜 사용시 쌍받침 문제 해결방법

4. 은디아예님의 미라지 쿼티 완전정복하기 (강추 꼭 읽어보세요)

1. 네입어님의 특수문자를 제외한 방향키 맵핑

5. SORTINCHKEY

1. SORTINCHKEY 이용한 멀티기능 HOT KEY만들기

벨소리/모닝콜/알람/프로필

1. 모닝콜 /알람

1. 내장 모닝콜/알람음 변경하기

2. 모닝콜 버그 패치

2. 벨소리

1. mp3/wma/mmf벨소리 설정하기

2. 하게 MP3벨/ 하기

3. 프로필

1. 매너모드시 진동이 느껴지지 않는 현상시 체크사항

카메라

1. 카메라 셔터음무음화 하기

2. 접사를 위한 휴대용 렌즈 추천

l 돋보기를 이용한 접사

3. 미라지 카메를 자동차용 전방 감시 카메라로 이용하

투데이 꾸미기

1. WISBAR ADVANCE DESKTOP(WAD)

1. WAD에서 날씨 보이게 하기

2. 나두님의 WAD이용 홈스크린 만들기

1. (강좌1 /강좌2 )

2. ULTIMATE LAUNHER

      1. 메이탄님의 네입어님 홈스크린 무작정 따라하기

        1. (강좌 1 /강좌2 /강좌3 /강좌4)

      2. 조팀님의 UL용 아이콘 만들기 강좌

        1. (강좌1) / (강좌2) / (강좌 3)

      3. 슈드님의 UL테마 만들기 강좌

        1. (강좌1) / (강좌 2)

3. SPB MOBILE SHELL

      1. 96DPI 테마

      2. 128DPI 테마

      3. 기타

        1. 와 SMS 하기 (구버젼)

        2. 문자 메시지 (구버젼)

        3. SPB MOBILE SHELL테마 안내 스키너 찾기 (하위 게시물 참고바람/다양한 테마안내)

  1. HS++UI를 이용한 테마 만들기

· XML 좌표에 관하여

· 주요 참고 레지스트리

· 푸른하늘님의 HS++ 강좌

· 96DPI용

o 조팀님의 미라지 테마(2008/09/23 버전)

o 조팀님의 미라지 테마(2008/09/11 버전)

o 아인스님의 다이아 몬드 shell버젼-수정:IKJsoft (파일은 답글참고)

1. 128DPI용

1. 조팀님의 미라지 테마 128 DPI 수정- 보명님(2008/09/23 버젼)

2. 조팀님의 미라지 테마 128 DPI 수정- 보명님(2008/09/11 버전) -XML파일외 기타 파일은 96DPI사용

3. 아인스님의 다이아 몬드 Shell버젼 -수정:갓위더스님

1. 제작 강좌 (4650카페/아인스님 블로그 링크 참고하세요)

5. 기타

    1. 바로가기 아이콘 만들기

동영상

1. 인코딩

1. 곰인코더 사용하기

2. Windows Media Encoder 사용하기

원격조정

1. PDA TO PC

1. Z2RemotetoPC

2. ORB.COM

        1. 무선인터넷을 이용한 외부에서 컴에 있는 동영상등을 감상하기

프로그램별 강좌 및 사용 TIP (ABC)

    1. 미라지 덤프툴(건달님)

    2. CAB VIA ACTIVESYNC(CAB파일 바로 설치 하는 프로그램)

    3. fn런쳔(기본프로그램)

    4. FRING

    5. Google Application

      1. Google Map

      2. Gmail

      3. Google calendar

    6. INTERNET EXPLOERER

    7. MAGICCALL

    8. MEMMAID

    9. MORTSCRIPT

    10. OPERA MINI

      1. OPERA MINI하기 (하위 답글 확인하세요)

    11. POCKET ARTIST 3

      1. (강좌 1 /강좌2)-나화사님

      2. 강좌 가기은디아예님

    12. POCKET MUSIC 5.1

    13. REAL VGA(96DPI)

    14. SCREEN CAPTURE

      1. 미라지폰 화면 캡춰하기(FREE WARE)

    15. SPB프로그램

      1. SPB DIARY

      2. SPB PHONE SUITE

      3. SPB POCKETPLUS

      4. SPB WEATHER

    16. SYSNC MAIL

    17. S2U2

    18. TCPMP

    19. TOMBO (다단계 메모프로그램)

      1. cplusman75님의 강좌

    20. TOTAL VIEWER

    21. VITO AUDIO NOTES 1.32

      1. 강좌 1나화사님

    22. WINDOWS MEDIA PLAYER

    23. WISBAR ADVACE

    24. WINTERFACE

    25. WMWIFIROUTER(3g연결을 이용 미라지를 AP처럼 사용)

      1. 강좌1- 나화사님

    26. XYVIEW

      1. 자이뷰/ 미라지로 보안감시 활용하기

PDA용 웹 사이트

1. 목록 작성자: 시화님

2. Tstory 모바일 사이트 이용방법

3. 미라지에서 버스도착시간 알림 사이트 활용방법

4. 네츠님의 모바일로 시작페이지

[날짜/시간 함수] MySQL Database - Oracle

2004/07/09 16:21

복사 http://blog.naver.com/ddor77/60003904989

[날짜/시간 함수]

(1) 날짜/시간 1

1) NOW() : 오늘의 날짜와 현재 시간을 'YYYY-MM-DD HH:MM:SS' 혹은 'YYYYMMDDHHMMSS' 형식으로 나타냅니다.

2) CURDATE() : 'YYYY-MM-DD' 혹은 'YYYYMMDD' 형식으로 오늘 날짜를 나타냅니다.

3) CURTIME() : 'HH:MM:SS' 또는 'HHMMSS' 형식으로 현재 시간을 나타냅니다.

예제 1

mysql> select NOW(); // *1
mysql> select CURDATE(); // *2

mysql> select CURTIME(); // *3

*1 현재 날짜와 시간을 조회합니다.
*2 현재 날짜를 조회합니다.

*3 현재 시간을 조회합니다.

(2) 날짜/시간 2

1) DAYOFWEEK(date) : 날짜를 몇 번째 요일인지 숫자로 나타냅니다. 숫자 '1'은 일요일, '2'는 월요일, ... '7'은 토요일입니다.

2) DAYOFMONTH(date) : 날짜를 그 달의 몇 번째 날인지 나타냅니다. 반환값은 1 에서 31 입니다.

3) DAYOFYEAR(date) : 날짜를 한 해의 몇 번째 날인지 나타냅니다. 반환값은 1 에서 366 까지입니다.

예제 2

mysql> select DAYOFWEEK('2002-03-01'); // *1
mysql> select DAYOFMONTH('2002-03-01'); // *2

mysql> select DAYOFYEAR('2002-03-01'); // *3

1* 2002년 3월 1일은 금요일이므로 결과값은 6 을 반환합니다.
2* 2002년 3월 1일은 3월의 첫째날이므로 1 을 반환합니다.
3* 2002년 3월 1일은 1월 1일 이후 60 날이므로 60 을 반환합니다.

(3) 날짜/시간 3

1) MONTH(date) : 해당 날짜가 몇 월인지 나타냅니다. 반환값은 1 ~ 12 입니다.

2) DAYNAME(date) : 해당 날짜의 요일을 영어로 나타냅니다.

3) MONTHNAME(date) : 해당 날짜의 월 이름을 영어로 나타냅니다.

예제 3

mysql> select MONTH('2002-03-01'); // *1
mysql> select DAYNAME('2002-03-01'); // *2

mysql> select MONTHNAME('2002-03-01'); // *3

*1 2002년 3월 1일은 3월이므로 결과값 3 을 반환합니다.
*2 2002년 3월 1일은 금요일이므로 결과값 Friday 를 반환합니다.
*3 2002년 3월 1일은 3월이므로 결과값 March 를 반환합니다.

(4) 날짜/시간 4

1) HOUR(time) : 시간을 나타냅니다. 반환값은 0 ~ 23 입니다.

2) MINUTE(time) : 분을 나타냅니다. 반환값은 0 ~ 59 입니다.

3) SECOND(time) : 초를 나타냅니다. 반환값은 0 ~ 59 입니다.

예제 4

mysql> select HOUR(now()); // *1
mysql> select MINUTE(now()); // *2

mysql> select SECOND(now()); // *3

*1 현재 시간의 시(HOUR)를 반환합니다.
*2 현재 시간의 분(MINUTE)를 반환합니다.
*3 현재 시간의 초(SECOND)를 반환합니다.

'기본 카테고리' 카테고리의 다른 글

리눅스의 배포판확인, 커널버전 확인 방법  (0) 2009.02.23
m480  (0) 2009.02.19
Compressing and DeCompressing a File in C#  (0) 2009.02.18
Writing an ActiveX control in C#  (0) 2009.02.17
ClickOnce Deployment Limitations  (0) 2009.02.09

Compressing and DeCompressing a File in C#


By Cosmos Mysore
Printer Friendly Version
View My Articles
10 Points

Methods to compress file and decompress file using System.IO.Compression



Method to compress a file.

public void CompressFile ( string sourceFile, string destinationFile )

{

// Check File exists in the source path

if ( File.Exists ( sourceFile ) == false )

throw new FileNotFoundException ( );

// Create the streams and byte arrays

byte[] buffer = null;

FileStream sourceStream = null;

FileStream destinationStream = null;

GZipStream compressedStream = null;

try

{

// Read the bytes from the source file into a byte array

sourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );

// Read the source stream values into the buffer

buffer = new byte[sourceStream.Length];

int checkCounter = sourceStream.Read ( buffer, 0, buffer.Length );

if ( checkCounter != buffer.Length )

{

throw new ApplicationException ( );

}

// Open the FileStream to write

destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );

// Create a compression stream pointing to the destiantion stream

compressedStream = new GZipStream ( destinationStream, CompressionMode.Compress, true );

// Now write the compressed data to the destination file

compressedStream.Write ( buffer, 0, buffer.Length );

}

catch ( ApplicationException ex )

{

MessageBox.Show ( ex.Message, "Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error );

}

finally

{

// Close all streams

if ( sourceStream != null )

sourceStream.Close ( );

if ( compressedStream != null )

compressedStream.Close ( );

if ( destinationStream != null )

destinationStream.Close ( );

}

}


Method to DeCompress a file.


public void DecompressFile ( string sourceFile, string destinationFile )

{

// Check File exists in the source path

if ( File.Exists ( sourceFile ) == false )

throw new FileNotFoundException ( );

// Create the streams and byte arrays needed

FileStream sourceStream = null;

FileStream destinationStream = null;

GZipStream decompressedStream = null;

byte[] quartetBuffer = null;

try

{

// Read in the compressed source stream

sourceStream = new FileStream ( sourceFile, FileMode.Open );

// Create a compression stream pointing to the destiantion stream

decompressedStream = new GZipStream ( sourceStream, CompressionMode.Decompress, true );

// Read the footer to determine the length of the destiantion file

quartetBuffer = new byte[4];

int position = (int)sourceStream.Length - 4;

sourceStream.Position = position;

sourceStream.Read ( quartetBuffer, 0, 4 );

sourceStream.Position = 0;

int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 );

byte[] buffer = new byte[checkLength + 100];

int offset = 0;

int total = 0;

// Read the compressed data into the buffer

while ( true )

{

int bytesRead = decompressedStream.Read ( buffer, offset, 100 );

if ( bytesRead == 0 )

break;

offset += bytesRead;

total += bytesRead;

}

// Now write to the destination file

destinationStream = new FileStream ( destinationFile, FileMode.Create );

destinationStream.Write ( buffer, 0, total );

// Flush to clean out the buffer

destinationStream.Flush ( );

}

catch ( ApplicationException ex )

{

MessageBox.Show ( ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error );

}

finally

{

// Close all streams

if ( sourceStream != null )

sourceStream.Close ( );

if ( decompressedStream != null )

decompressedStream.Close ( );

if ( destinationStream != null )

destinationStream.Close ( );

}

}

'기본 카테고리' 카테고리의 다른 글

m480  (0) 2009.02.19
MySQL 날짜 시간 함수  (0) 2009.02.18
Writing an ActiveX control in C#  (0) 2009.02.17
ClickOnce Deployment Limitations  (0) 2009.02.09
우분투 넷북 리믹스(Netbook remix)  (0) 2009.02.02

+ Recent posts