자동 생성되는 .DS_Store

Mac OS X의 Finder는 각각의 디렉터리에 .DS_Store(일반적으로 OS X에서는 파일 이름 앞에 “.”을 붙임으로써 숨길 수 있습니다.)라는 파일을 생성하여 해당 디렉터리에 들어있는 파일들에 대한 아이콘의 위치와 보기 설정 등의 정보를 담아 둡니다. 10.4 이전의 버전에서는 암호화되어 있지 않았기 때문에 원격 파일 서버에서 생성되지 않았으나, 10.4 버전부터는 SMB/CIFS, AFP, NFS, WebDav등의 프토토콜을 통해 파일 서버에 접속하게 되어도 해당 디렉터리에 파일을 생성하곤 했습니다.

다만 윈도우에서는 .DS_Store 파일이 그대로 보이기 때문에 깔끔한 폴더를 원하는 사용자들은 일일이 파일을 지우곤 했습니다. 이러한 파일들이 네트워크 드라이브에 다시는 생성되지 않게 하기 위해서는 다음과 같은 동작을 실행해 주면 됩니다.

1. 터미널을 엽니다.
2. 다음 명령을 실행합니다

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

3. 재부팅 혹은 로그아웃했다 다시 로그인합니다.

위의 동작을 실행하여도 자신의 맥에서는 .DS_Store 파일을 생성하고 기존에 생성된 .DS_Store 파일을 삭제하지 않습니다.

추가 정보

기존에 생성된 .DS_Store 파일을 지우기 위해서는 다음과 같은 동작을 실행하면 됩니다.

1. 터미널을 엽니다.
2. 다음 명령어를 실행합니다.

sudo find / -type f -name .DS_Store -print -delete

위의 명령은 루트 디렉터리에서 .DS_Store의 이름을 갖는 파일을 찾아서 삭제하는 명령입니다.

출 처 : http://www.iamkei.com/?p=299

맥에서 tftp 사용하기 (Using tftp on the Mac)

일반적으로 많이 쓰이지는 않아도 라우터등의 장비 펌웨어 업그레이드라던지 임베디드 보드 개발할 때 유용한 도구중에 하나가 tftp(trivial ftp)이다.
Mac OS X에도 역시 기본으로 포함되어 있지만 다른 daemon들과는 다르게 자동으로 실행하게 되어있지 않다. 그리고 실행하려면 직접 하면 안되고 꼭 launchd와 /System/Library/LaunchDaemon/tftp.plist를 사용해서 실행해야 한다.



실행하는 방법은 다음과 같다.

sudo launchctl
Password:
launchd% load -F /System/Library/LaunchDaemons/tftp.plist
launchd%

이제 아무 문제가 없으면 launchd가 tftp 포트를 listen하고 있다가 connection이 들어오면 tftp를 실행해주게 된다.

그리고 linux/unix의 경우 일반적으로 tftp 디렉토리는 /tftpboot 를 사용하지만 맥에서는 tftp.plist 파일에서 지정하게 되어 있고 디폴트로는 /private/tftpboot 디렉토리이다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.apple.tftpd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/tftpd</string>
<string>-i</string>
<string>-s</string>
<string>/private/tftpboot</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>tftp</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
</dict>
</plist>

 
텍스트 에디터로 tftp.plist파일을 열어보면 내용은 위와 같다. 그 중 bold체로 된 부분을 변경해 주면 tftp 디렉토리를 원하는대로 바꿔줄 수 있다.

사용이 끝나 실행을 중단시키고 싶으면 실행할 때와 마찬가지로 launchctl에서 명령을 내려주면 된다.

launchd% unload /System/Library/LaunchDaemons/tftp.plist

만일 tftp를 부팅할 때 부터 계속 실행하도록 해 주고 싶으면 launchctl에서 다음의 명령을 사용한다.

launchd% load -w  /System/Library/LaunchDaemons/tftp.plist

또한 반대로 부팅할 때 부터 계속 실행되는걸 멈추고 싶으면 아래 명령을 사용하면 된다.

launchd% unload -w /System/Library/LaunchDaemons/tftp.plist

출 처 : http://arsviator.blogspot.kr/2009/12/%EB%A7%A5%EC%97%90%EC%84%9C-tftp-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-using-tftp-on-mac.html


homebrew는 MacPorts같은 패키지 관리자입니다. Homebrew와 MacPorts가 뭔지 모르는 사람도 있겠군요. Homebrew는 Mac OS X에서 mysql, wget 같은 소프트웨어를 쉽게 설치하고 관리하게 도와주는 프로그램입니다.

자, 소개는 이만하고 homebrew를 몇 달 써본 경험을 바탕으로 자주 쓰는 명령을 정리해보겠습니다.

설치법!

이건 홈페이지에 나와 있지만 정리 차원에서 적어봅니다.

ruby -e \"$(curl -fsSkL raw.github.com/mxcl/homebrew/go)”

간단하죠?

새 버전으로 고고싱!

homebrew 새 버전으로 업그레이드하고 싶다면,

brew update

역시나 간단합니다.

패키지 설치하기

잠시만!

mysql 같은 소프트웨어를 설치하기 전에 할 일이 하나 있습니다. 예를 들어 svn v1.7.x 를 설치하려고 한다면 Mac OS X – Mountain Lion에는 /usr/bin/svn에 이미 설치되어 있다는 점을 생각합시다. homebrew는 보통 /usr/local/bin에 프로그램을 설치하는데 경로 탐색시 /usr/bin/usr/local/bin보다 우선이기 때문에 쉘에서 svn을 치면 운영체제에 딸려온 v1.6.x 대의 svn이 실행됩니다. 이런 점을 개선하려면 ~/.profile파일을 생성하거나 수정해 아래와 같이 경로 탐색 순서를 바꿉니다.

export PATH=\"/usr/local/bin:/usr/local/sbin:$PATH\"

정말 설치하기

wget을 설치한다고 해보죠. 역시나 간단합니다.

brew install wget

이렇게 하면 끝납니다. 그런데 말이죠. wget으로 웹 사이트 백업하기에 나오듯이 아래 명령을 실행하면 이상하게 오류가 납니다.

Jay:~ plaintext$ wget —recursive --html-extension --convert-links —page-requises --remote-encoding=utf-8 --local-encoding=utf8 —restrict-file-name=nocontrol http://andromedarabbit.net

This version does not have support for IRIs

IRI라는 기능이 필요하다는데 설치가 안 된 모양이죠? 이럴 때는 설치 옵션이 더 없나 살펴봅니다.

옵션 넣고 설치하기

wget 패키지에 옵션이 뭐가 있나 확인해볼까요?

Jay:~ plaintext$ brew options wget
--enable-iri
    Enable iri support
--enable-debug
    Build with debug support

IRI 기능을 넣는 옵션이 있군요. 이제 다시 옵션을 넣고 wget을 설치해봅니다. 물론 기존에 설치한wget을 지워야 설치가 되겠죠?

brew uninstall wget
brew install wget --enable-iri

—enable-iri 옵션을 주고 앞선 웹 사이트 백업 명령을 다시 실행해봅니다. 어떻습니까? 잘 되지요?

이렇게 설치 전에 설치 옵션이 뭐가 있나 확인해보는 습관을 들이면 이런 삽집은 하지 않아도 됩니다.

패키지의 새 버전 받기

homebrew 의 새 버전을 받을 땐 어떻게 했죠?

brew update

그렇다면 wget의 새 버전을 받고 싶다면 어떻게 할까요? update 대신 upgrade 명령을 쓰면 됩니다.

brew upgrade wget
brew upgrade

brew로 설치한 모든 소프트웨어를 최신 버전으로 업그레이드하고 싶다면 패키지 이름을 넣지 않으면 됩니다. 하지만 어떤 소프트웨어는 새 버전에 버그가 있다고 들어서 전부 업그레이드하기 불안할 수도 있습니다. 이런 경우에는 outdated 명령으로 새 버전으로 업데이트할 대상 소프트웨어가 무엇인지 알아보면 됩니다.

brew outdated

패키지 찾기

앞선 예제에선 wget을 설치했습니다만 패키지 이름을 정확히 모를 때는 어떻게 할까요? 이번에는svn을 찾는 예제로 살펴봅니다.

brew search svn 

이렇게 치면 svn과 관련된 패키지 네 개가 나옵니다.

  • colorsvn
  • cvs2svn
  • git-svn-abandon
  • svn

이 중에서 내가 원하는 소프트웨어를 찾으면 되겠지요? 이 경우에는 svn같습니다만 뭐가 뭔지 모를 때는 어떻게 할까요? 이럴 땐 info명령을 쓰면 됩니다.

Jay:~ plaintext$ brew info colorsvn
colorsvn: stable 0.3.2

http://colorsvn.tigris.org/

Not installed

https://github.com//homebrew/commits/master/Library/Formula/colorsvn.rb

==> Caveats
You probably want to set an alias to svn in your bash profile.
So source /usr/local/etc/profile.d/colorsvn-env.sh or add the line

    alias svn=colorsvn

to your bash profile.

So when you type \"svn\" you\'ll run \"colorsvn\".

colorsvn은 http://colorsvn.tigris.org에서 개발한 소프트웨어라는군요.

이렇게 내가 원하는 프로그램을 찾아내면 됩니다만 아예 키워드조차 모르겠다 싶을 때는 패키지 이름을 빼고 다음과 같이 실행하면 됩니다.

brew search

이렇게 하면 homebrew가 제공하는 패키지가 모두 나옵니다.

설치된 패키지 목록 보기

내가 로컬에 설치한 패키지가 뭐뭐 있나 궁금할 땐 list 명령을 씁니다.

brew list

설치 경로

실제 파일이 설치되는 곳은 /usr/local/Cellar/ 디렉터리 안입니다.

/usr/local/bin에서 파일 제거하기

homebrew는 원본 파일을 /usr/local/Cellar 폴더에 두고 /usr/local/bin/에 심볼릭 링크(바로가기라고 생각하면 쉽습니다)를 생성합니다. 이렇게 해서 접근성을 높입니다. 하지만 mysql의 여러 버전을 한꺼번에 사용하는 경우에는 한 버전만 /usr/local/bin에 심볼릭 링크를 두던가, 아니면 아예 심볼릭 링크를 두지 말아야 합니다. 이런 경우에는 unlink 명령으로 심볼릭 링크만 삭제하면 됩니다.

brew unlink mysql

탭 자동완성 활성화하기

bash 쉘에서 탭 자동완성 기능을 쓰고 싶다면 아래 파일 중 하나를 생성하거나 편집하여

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile

다음 코드를 적어넣습니다.

source `brew --prefix`/Library/Contributions/brew_bash_completion.sh
출 처 : http://andromedarabbit.net/wp/homebrew-%EC%82%AC%EC%9A%A9%EB%B2%95/


맥도 BSD 기반이므로 일반적인 UNIX 환경처럼 terminal 사용이 가능하다. 따라서 터미널을 연 후 su를 통해 root로 쉘을 띄울 수 있다. su -l (또는 su -) 명령어를 통하면 login과 같은 과정을 거치게 되는데, root 홈 디렉토리에 있는 .bash_profile을 읽어오지를 않는 문제가 있다.

이유는 간단하다. root는 /bin/bash 대신에 /bin/sh를 사용하는데 일반적인 Linux에서는 /bin/sh는 /bin/bash에 대한 symbolic link이지만 맥에서는 (BSD가 원래 그런지는 모르겠다) 실제로 다른 쉘이기 때문이다. 따라서 .bash_profile은 읽어 오지 않으며 .profile만 읽어온다.

P.S. 약 30분 동안 PATH 가지고 고민한 끝에 env 쳐 놓고 보다가 알아 낸 사실… -_-;;


출 처 : http://drshawn.egloos.com/viewer/4754155

출처 : http://khmirage.tistory.com/315


현재 인터넷 공유기를 물려서 사용하는지라 ifconfig을 하게되면
내부 IP 주소만 나와서 매번 공유기 설정 페이지로 들어간 뒤
Public IP 주소를 알아내고는 했는데 간단한 명령으로 알아내는 밥업을 알게되여
잊어먹지 않기 위해 포스팅합니다.

$ curl ifconfig.me

1xx.xxx.xx.xxx


curl 패키지가 기본으로 설치가 되는지는 모르겠는데
일단 저는 여러 개발 패키지를 설치해놔서 그런가 이미 설치가 되어있습니다.
자기가 공유기를 쓰고 있고 좀더 편하게 Public IP를 알고 싶을때
저 명령을 입력하면 자기 Public IP가 바로 출력이 됩니다.

1. Relay 란 말의 사전적 의미와 비슷합니다.

외부(외부 네트워크)에서 해당 메일서버(smtp서버)를 경유해서 

외부로 메일을 보내는 것을 말합니다.


2. 자기 자신 주소로 들어온 메일만 받을 수 있겠죠.


예를 들어 abc.com 의 메일 서버에서 모든 ip(로칼 포함)에 대해서 

릴레이를 막았다면..

@abc.com으로 들어오는 메일만 받을 수 있게 되고 

나머지 주소의 메일들은 릴레이 거부로 메일을 전송할 수 없게 됩니다.


3. 일반적으로 로칼 네트워크란 자신이 속한(메일서버가 속한)

네트워크를 의미합니다. 여기서 말하는 로칼 네트워크라는 것은 

메일 서버에서 어떻게 설정하느냐에 따라서

(어떤 ip 대역을 '로칼'로 인정하느냐에 따라서) 

달라질수 있습니다. 


예를 들어 192.168.32.10 ~ 192.168.32.20 까지의 ip 대역을 사용하는 

회사의 메일서버(smtp서버)에서...

위 ip 대역에 대해서만 릴레이 설정을 허용하면 위 ip 대역 외의 

사용자들은 해당 메일서버를 통해서 외부로 메일을 전송할 수 없게 됩니다.


위와 같이 하는 이유는...

물론 스팸메일러들이 외부 네트워크에서

해당 메일서버를 경유해서 메일을 보내지 못하도록 하는데 있지만..

굳이 스팸 메일이 아니더라도...관계 없는 외부 사용자가 

공짜로(?) 자신의 메일서버를 

통해서 메일을 외부로 보내도록 설정하는 것은 좋지 않습니다.

(기분나쁘니까..^^)


메일서버에 접속하는 이용자들의 ip가 중구난방이라면..

ip 대역으로 릴레이 제한을 하는 설정을 할 수 없으므로

smtp서버에서 제공하는 'smtp인증' 기능(메일을 보낼 때로 id와 pass를 묻는 것)을 

사용하는 것이 좋으며..(대표적인 예가 야후 메일)

또한..요즘의 추세이기도 합니다. 

 

From Naver . 지식

[출처] 메일서버에서 릴레이란 무엇인가? |작성자 시뉘


ABI

application binary interface


EABI

embedded application binary interface


None-EABI

특정 OS에 맞춘 EABI가 아니라는 뜻


ABI는

응용 프로그램 - 운영체제,

응용 프로그램 -  해당 라이브러리,

응용 프로그램의 구성 요소 간에서 사용되는 낮은 수준의 인터페이스이다.,


ABI 와 API 비교

API -> 소스코드

ABI -> 바이너리


결론

난 cross-compile을 할려고 했는데, target platform이 EABI인 arm-none-eabi를 설치했다.

헛 짓을 며칠 하다 위의 내용을 알고 arm-none-gnueabi로 다시 설치.


eabi는 arm-none-gnueabi를 컴파일 할 때 사용 한단다.


arm-none-eabi를 gnu target을 컴파일 하면


/home/kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../.. /../arm-none-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 00008018

/home/kang/다운로드/arm-2013.05/bin/../lib/gcc /arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':

sbrkr.c:(.text+0x18): undefined reference to `_sbrk'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r':

writer.c:(.text+0x20): undefined reference to `_write'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r':

closer.c:(.text+0x18): undefined reference to `_close'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function `_fstat_r':

fstatr.c:(.text+0x1c): undefined reference to `_fstat'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-isattyr.o): In function `_isatty_r':

isattyr.c:(.text+0x18): undefined reference to `_isatty'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':

lseekr.c:(.text+0x20): undefined reference to `_lseek'

/home /kang/다운로드/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../.. /arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r':

readr.c:(.text+0x20): undefined reference to `_read'

collect2: error: ld returned 1 exit status


위와 같은 오류가 나타난다.


target platform 에 대해 더 자세하게는 아랫글을 보도록 하자

EABI/ELF


RTOS systems or "bare metal" systems where no operating system is present. These toolchains should not be used to build Linux kernels or applications.


GNU/Linux


Systems running "full" Linux, i.e., Linux on CPUs with an MMU. Use Sourcery CodeBench to build both the Linux kernel and applications.


출 처 : http://blog.daum.net/wonjin92/37



1. 전처리


2. 어휘 분석

 : 전처리 된 파일을 읽어 소스를 문법적으로 의미 있는 가장 최소 단위(토큰)로 나눈다.


3. 구문 분석

 : 파서에 의해 구문 분석이 이루어짐. 구문 분석은 어휘 분석 단계에서 스캐너가 토큰을 인식하고 파서에서 넘겨주면 파서가 문법적 오류가 있는지 검사한 후에 중간 언어 생성을 위한 파서 트리를 만든다.


4. 의미 분석

 : 문법상 오류는 없지만 의미상 오류가 있는 것을 검사한다.
 ex) 선언되지 않은 변수의 사용 / 함수의 인자 개수나 인자형의 불일치 / 자료형의 불일치 등


5. 중간 언어 생성

 : 작성된 언어에 독립적인 중간 언어 생성

 ex) gcc의 경우 RTL(Register Transfer Language)이라는 중간언어를 생성함


6. 최적화

 : 중간 코드 최적화

 : 목적 코드 최적화


7. 목적 코드 생성

 : 중간 언어를 바탕으로 목적 코드를 생성한다. 목적 코드는 어셈블리 언어로 작성되며 이후 어셈블러에 의해서 인스트럭션으로 변환 된다. 목적 코드를 생성할 때는 되도록 재배치가 가능한 코드를 생성하게 한다.


8. 어셈블리

 : 어셈블리 언어로 작성된 목적 코드를 기계어 코드로 변환한다.


8. 링킹



VHDL with Vim

If you intend to code VHDL with Vim, it is a good idea to take some time and set up Vim for VHDL. You can do amazing stuff if you invest a little time (and some features don't even need to be set up - take a look at :help ins-completion for instance).

During a semester project at ETH Zurich, I created some VHDL related Vim settings. They make Vim quite efficient - during my project I was able to do most of the work from within Vim, even running test-benches and doing simulations. I hope they may be useful to others as well and will therefore show you how to set them up.

ctags

First, we need ctags. Since ctags does not support VHDL, I created some simple regular expressions. To use them, copy this ctags-file to ~/.ctags. You also need to set the variable g:tlistvhdlsettings correctly (see my vimrc).

If you don't know what ctags is, look at the ctags homepage.

Taglist plugin

Now that we have ctags working, we can also use the taglist plugin for Vim, which allows to navigate through the code in a nice way. You can find it here.

Code highlighting and indenting

Scripts for highlighting and indenting come with Vim. If you happen to work at the ETH Zurich, you'll probably want to use DZ signal naming conventions and appropriate highlighting. For this, copy the file vhdl.vim to ~/.vim/syntax/. It only seems to work with GVim, which is what I usually used.

Automatic entity declaration and port mapping

For this, I found some scripts on the net and adjusted them to my needs. They are far from perfect, but useful nonetheless. You can find them in the scriptsdirectory.

Automatic code aligning

For code aligning, I wrote some scripts on my own. However, I later discovered ageneric Vim align plugin, which does a much better job. You may want to add appropriate key mappings for visual mode (see :help vmap).

Commenting

I use the Enhanced Commentify Plugin for easy commenting of blocks.

vimrc (lots of fun stuff)

The most important thing is of course the .vimrc file itself. It provides useful stuff like

  • automatic template loading
  • Hit F5 to compile and Vim automatically jumps to the relevant line if there is an error (requires a Makefile and you may need to adjust the errorformat)
  • jump between errors with F9 and F10 (also goes nicely with grep, btw.)
  • shortcuts (e.g. write a process name and hit CTRL-E p to create the process body; hit CTRL-j to jump to the mark (requires the jump-function from thevim-latex plugin))
  • abbreviations (e.g. write slv for std_logic_vector)
  • shortcuts for component declaration and instantiation
  • omni-completion is set to syntax-complete
  • automatically update sensitivity lists (this one is a bit dangerous, as it uses theEmacs VHDL-mode and runs Emacs in batch mode - see the comment in the vimrc) file

If you want to know more, just take a look at the the .vimrc file. This one only contains VHDL related settings.

Screenshot

Here's a nice screenshot with some of the features:



If you have questions or comments, just drop me a note.


출처 : http://0x7.ch/vim/vhdl/

아스키모드 - 전송과정에서 포맷을 변경

 

바이너리 - 파일 그대로 전송

 

> 파일 포맷을 왜 변경하고 어떻게 변경하는가 ?

 

UNIX(Linmux 포함) 시스템과 DOS(MS Window 포함)는 텍스트파일(아스키코드로 이루어지는 파일)을 표현하는 방식이 다르다.(바이너리는 같다)

 

새로운 라인의 시작을 알리는 개행문자(newline character)의 표현이 다른데

 

개행문자란 : 쉽게 말해 글을 쓰다가 엔터를 치면 줄이 바뀌게 되는데 그때 끼어드는 문자를 말한다.

개행문자 코드는 다음처럼 다르다.(UNIX 시스템에서의 방식)

UNIX : \n

DOS : \r\n

 

UNIX <==> DOS 텍스트 파일 전송이 될때는 개행문자를 해당 시스템에 맞게 변경해줘야 한다. 

 

예로써, DOS에서 UNIX 시스템으로 전송할때 개행문자 변경이 다음과 같다

\r\n => \n

(UNIX에서 DOS로 변경하면 반대)

 

 

아스키 모드에선 서버가 파일을 전송할때 라인단위로 읽어서 라인의 끝에 \r\n을 붙여서 보내야한다.

 

Hi,

My name is brian.

 

위 내용을 아스키모드로 보내면 아래와 같다. 쉽게 생각해서 줄바꿈문자 \n을 \r\n으로 바꿔서 보낸다고 보면 된다.

 

Hi,\r\n

My name is brian.\r\n

 

바이너리 모드에서는 줄바꿈 문자도 하나의 데이터로 취급되기 때문에 아래와 같다.

 

Hi,\n

My name is brian.\n

 

그래서 바이너리 파일을 아스키 모드로 보낼때 파일이 깨지는 이류가 바이너리 파일에서는 \n이 줄바꿈 문자로 사용된게 아니라 단순히

데이터를 표현하는 한 문자인데 이걸 모두 \r\n으로 변환해서 보내 때문에 파일이 망가지는 것이다.

 

=> 서버이전 시 .png 파일을 못불러와서 에러가 난다면, data폴더를 바이너리 전송방식으로 설정하고 내려받고 다시 바이너리 방식으로 덮어쓰면된다.


[출처] ftp전송방식 - 아스키(ASCII), 바이너리(binary)|작성자 JGsoft

http://blog.naver.com/jaegunkim?Redirect=Log&logNo=70179722968

+ Recent posts