'분류 전체보기'에 해당되는 글 137건

  1. 2009.01.24 Solaris Porgraming!!!(Message 대기 Program중 강제 종료시 자원 반환)
  2. 2009.01.24 Setting 부분 파일화.. (HashTable 이용)
  3. 2009.01.24 코딩 편의용 연속 Data Row를 Col로 Col을 Row로

Solaris Porgraming!!!(Message 대기 Program중 강제 종료시 자원 반환)

|

Porgram을 제작시 Message Queue나 아니면 통신의 대기로 무한 Loop에 들어가 대기 할 경우가

많이 일어 난다. 이럴경우 Program은 ^C나 아니면 kill로 종료해야 하는 상황이 오는데

이럴경우 Program에서 사용하던 자원은 반환을 하지 않거나 Connect된 상황에서 종료가 되고만다

이렇게 반환을 하지 않을경우가 쌓이다보면 분명 무슨 문제가 발생하게 된다 가장 크게 걱정 되는 부분은 역시

메모리 부분.. 그리고 DB의 Connect및 통신의 Connect가 문제가 될 수 있다

이러한 부분을 해결 하기 위해서는 종료 전에 자원을 반환하면 된다

그렇다면 강제 종료를 시킬시에 어떻게 자원을 반환 할 것이냐 라는 의문을 가지게 된다

여기서 찾아봐야될 부분이 Signal 부분이다.

Signal은 실행중인 Program에 특정 신호를 보내 OS에서 어떤 명령으로 너를 어떻게 할거라는 것을 알려준다

이때 제작해 놓은 Module을 잠깐 실행하게 만들면 자원 반납이 가능하다

^C 나 Kill시에 Program에 특정 Signal이 들어 가게 되는데 이 부분을 정의해여 특정 함수를 실행하게 다면된다

Signal 함수는 포인터 함수를 인자로 받기 때문에 C#에서 사용하는 델리게이트와 같은 형태로 사용할수 있다

그렇게 하면 종료시 자원반환이 가능하게 되는 것이다.

Trackback 0 And Comment 0

Setting 부분 파일화.. (HashTable 이용)

|

file을 불러온후 HashTable에 셋팅하여 사용

셋팅 파일에는 한줄 주석으로 '#'사용 가능

ID는 공백사용 불가

Trackback 0 And Comment 0

코딩 편의용 연속 Data Row를 Col로 Col을 Row로

|
대략 중요 알고

        private bool ToCode()
        {
            int CollMax = 0;//칼럼 최대 길이
            int RowOffset = 0;//열 offset값
            FileStream fs = new FileStream(this.path, FileMode.Open);
            FileStream fs_c = new FileStream(this.path + "_C", FileMode.Create);
            StreamWriter writer_c = new StreamWriter(fs_c);
            StreamReader reader = new StreamReader(fs);
            fs.Seek(0, SeekOrigin.Begin);
            string buffer = reader.ReadToEnd();
            string[] strSplit = { "rn" };
            string[] row = buffer.Split(strSplit,StringSplitOptions.None);//row 계산하기
            for (int i = 0; i < row.Length; i++)
            {
                if (row[i] == "")
                    RowOffset++;
            }
            string[][] Table = new string[row.Length][];//테이블 Row결정
            //가변 테이블 만들기
            for (int i = 0; row.Length-RowOffset > i; i++)
            {
                string[] temp = row[i].Split('t');
                if (temp.Length > CollMax)
                    CollMax = temp.Length;
                Table[i]= new string[temp.Length];
                Table[i] = temp;
            }
            try//파일에 출력
            {
                for (int i = 0; i < CollMax; i++)
                {
                    if (Table[i] != null)
                    {
                        for (int j = 0; j < row.Length - RowOffset; j++)
                        {
                            if (Table[j][i] != "")
                            {
                                writer_c.Write(""" + Table[j][i] + "", ");
                                writer_c.Flush();
                            }
                        }
                        writer_c.WriteLine();
                        writer_c.Flush();
                    }
                }
            }
            catch
            {
                return false;
            }
            reader.Close();
            writer_c.Close();
            fs_c.Close();
            fs.Close();
            return true;
        }
        private bool ToExcel()
        {
            int CollumOffset = 0;
            int RowMax = 0;
            FileStream fs = new FileStream(this.path, FileMode.Open,FileAccess.Read);
            FileStream fs_c = new FileStream(this.path + "_C", FileMode.OpenOrCreate,FileAccess.Write);
            StreamWriter writer_c = new StreamWriter(fs_c);
            StreamReader reader = new StreamReader(fs);
            fs_c.Seek(0, SeekOrigin.Begin);
            fs.Seek(0, SeekOrigin.Begin);
            string buffer = reader.ReadToEnd();
            string[] liner = { "rn" };//컬럼 분류
            string[] temp = buffer.Split(liner, StringSplitOptions.None);
            for (int i = 0; i < temp.Length; i++)
            {
                if (temp[i] == ""|| temp[i] == " ")
                    CollumOffset++;//필요없는 부분을 위한 옵셋
            }
            char[] spliet = {'"',' ',','};
            string[][] Table = new string[temp.Length-CollumOffset][];
            for (int i = 0; i < Table.Length; i++)
            {//열 데이터 셋팅
                Table[i] = temp[i].Split(spliet,StringSplitOptions.RemoveEmptyEntries);
                if (Table[i].Length > RowMax)
                    RowMax = Table[i].Length;//열의 최대수 구하기
            }
            try
            {//파일에 쓰기
                for (int i = 0; i < RowMax; i++)
                {
                    for (int j = 0; j < (temp.Length - CollumOffset); j++)
                    {
                        try
                        {
                            writer_c.Write(Table[j][i]);
                            writer_c.Write("t");
                            writer_c.Flush();
                        }
                        catch//범위를 벗어났을때의 예외 처리
                        {
                            writer_c.Write("t");
                            writer_c.Flush();
                        }
                    }
                    writer_c.Write("rn");
                    writer_c.Flush();
                }
            }
            catch { return false; }
            reader.Close();
            writer_c.Close();
            fs_c.Close();
            fs.Close();

            return true;
        }
    }

Trackback 0 And Comment 0
prev | 1 | ··· | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | next