Cpp
2013.11.01 10:37

Makefile - wildcard

조회 수 26728 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

컴파일해야할 파일이 main.c, a.c, b.c, c.c가 있다면 아래와 같이 Makefile을 작성한다.

SRC = main.c
SRC += a.c
SRC += b.c
SRC += c.c

아래와 같이하면 더 간편해진다.

SRC = $(wildcard *.c)

이렇게 하면 파일을 추가하더라도 Makefile을 수정할 필요가 없겠군~ 

TAG •

조회 수 18795 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

제외

svn update --set-depth exclude directoryName

원복

svn update --set-depth infinity

TAG •

조회 수 29950 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

/etc/dconf/db/gdm.d/01-login-screen 파일 생성

[org/gnome/login-screen]

disable-user-list=true

gdm DB 업데이트

rm /etc/dconf/db/gdm

dconf update

TAG •

Linux
2013.07.11 17:46

/usr/bin/rsync

조회 수 36935 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

주기적으로 백업하는 습관을 가지자!
리눅스에는 rsync라는 도구가 있네.

# rsync -avz --delete 원본디렉토리 백업할디렉토리
# rsync -avz --delete /home/wittgens /home5/backup

-e ssh 옵션을 주면 ssh로 /home/wittgens 디렉토리를 원격지의 /home/wittgens/backup 디렉토리와 sync

# rsync -avz /home/wittgens -e ssh wittgens@a.org:/home/wittgens/backup
TAG •

CSharp
2013.04.26 11:36

비동기 소켓 클라이언트

조회 수 52874 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

비동기 소켓 클라이언트 클래스 만들어 봄.

.NET Compact Framework 2.0 용

사용법)

private void SockDataReceived(Socket sock, byte[] data, int readBytes)
{
  // 수신된 메시지 처리
}

...
AsyncSocketClient asc = new AsyncSocketClient();
asc.StartSend("192.168.1.100", 7788, "hello world\r\n", this.SockDataReceived, true);
...

현재 ASCII 엔코딩만 지원함.ㅋㅋㅋ

public class AsyncSocketClient
    {
        private byte[] txMessage;
        private Socket client;
        private Boolean doEndConnection;
        private DataReceivedCallback dataReceivedCallback;

        public delegate void DataReceivedCallback(Socket sock, byte[] data, int bytesRead);
        private class StateObject
        {
            // Client socket.
            public Socket workSocket = null;
            // Size of receive buffer.
            public const int BufferSize = 256;
            // Receive buffer.
            public byte[] buffer = new byte[BufferSize];
            // Received data string.
            public StringBuilder sb = new StringBuilder();
        }

        public AsyncSocketClient()
        {
            this.txMessage = null;
            this.client = null;
            this.doEndConnection = false;
            this.dataReceivedCallback = null;
        }

        public void SetDataReceivedCallback(DataReceivedCallback callback)
        {
            this.dataReceivedCallback = new DataReceivedCallback(callback);
        }

        private void ConnectCallback(IAsyncResult ar)
        {
            Socket s = (Socket)ar.AsyncState;
            try
            {
                s.EndConnect(ar);

                // 연결되었으면
                if (s.Connected)
                {
                    // 전송할 메시지가 있으면
                    if (this.txMessage != null)
                    {
                        // 전송한다.
                        s.Send(this.txMessage);
                    }
                    if (this.dataReceivedCallback != null)
                    {
                        // 수신시작
                        StateObject state = new StateObject();
                        state.workSocket = s;
                        s.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(this.ReceiveCallback), state);
                    }
                }
                else
                {
                    // 소켓 리소스 해제
                    s.Shutdown(SocketShutdown.Both);
                    s.Close();
                }
            }
            catch (Exception) { }
        }

        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state = (StateObject)ar.AsyncState;
                Socket client = state.workSocket;

                int bytesRead = client.EndReceive(ar);

                if (bytesRead > 0)
                {
                    // There might be more data, so store the data received so far.
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));

                    // 응용의 콜백 호출
                    if (this.dataReceivedCallback != null)
                    {
                        byte[] recvData = Encoding.ASCII.GetBytes(state.sb.ToString());
                        this.dataReceivedCallback(client, recvData, recvData.Length);
                    }

                    if (this.doEndConnection)
                    {
                        client.Shutdown(SocketShutdown.Both);
                        client.Close();
                    }
                    else
                    {
                        // Get the rest of the data.
                        client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(this.ReceiveCallback), state);
                    }
                }
                else
                {

                    if (client.Connected)
                    {
                        client.Shutdown(SocketShutdown.Both);
                        client.Close();
                    }
                }
            }
            catch (Exception e)
            {
                e.ToString();
            }
        }

        /// <summary>
        /// 현재 연결되어 있는 상태에서 전송하고 싶은 때 사용하라
        /// </summary>
        /// <param name="msg">전송하고싶은 문자열</param>
        /// <returns></returns>
        public Boolean Send(String msg)
        {
            if (this.client == null) return false;
            if (this.client.Connected == false) return false;
            return this.client.Send(Encoding.ASCII.GetBytes(msg)) > 0;
        }

        /// <summary>
        /// 최초 전송시작시 사용하라
        /// </summary>
        /// <param name="serverIP">대상 IP</param>
        /// <param name="port">대상 포트</param>
        /// <param name="msg">전송할 메시지</param>
        /// <param name="rxCallback">데이터 수신 콜백</param>
        /// <param name="doEndConnection">데이터 수신후 접속종료 여부</param>
        /// <returns></returns>
        public Boolean StartSend(String serverIP, int port, String msg, DataReceivedCallback rxCallback, Boolean doEndConnection)
        {
            // 이미 연결되어 있으면 소켓을 종료시킨다.
            if (this.client != null && this.client.Connected)
            {
                this.client.Shutdown(SocketShutdown.Both);
                this.client.Close();
            }

            this.client = null;
            this.doEndConnection = doEndConnection;
            this.SetDataReceivedCallback(rxCallback);

            try
            {
                // 소켓 생성
                IPAddress ipAddress = IPAddress.Parse(serverIP);
                IPEndPoint ipEP = new IPEndPoint(ipAddress, port);
                this.client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                // 전송할 데이터 지정
                this.txMessage = System.Text.Encoding.ASCII.GetBytes(msg);
                // 연결 시작
                IAsyncResult asyncResult = client.BeginConnect(ipEP, new AsyncCallback(this.ConnectCallback), this.client);
            }
            catch (Exception)
            {
                if (this.client != null)
                {
                    if (this.client.Connected)
                    {
                        this.client.Shutdown(SocketShutdown.Both);
                        this.client.Close();
                    }
                }
                return false;
            }
            return true;
        }
    }

Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 39 Next
/ 39