PC를 새로 받아서 vagrant 설치하고 기존 환경 로드하는 과정에서 아래와 같은 에러를 내음



Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` /vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` /vagrant /vagrant



이런 경우 아래와 같이 vagrant-vbguest 플러그인을 설치하면 해결됨.



설치후 VM 다시 로드




아마도 VBox 버전 업하면서 vagrant 플러그인들 compatibility에서 이슈가 발생하지 않았을까 추정함.


다시 로드하면서 에러 발생할경우에는 vagrant ssh로 VM 접속후 apt-get update; apt-get upgrade 로 패키지들 업데이트 진행 한 뒤에 다시 reload 수행.


저작자 표시
신고
Creative Commons License
Posted by rookiejava

Google I/O 2013 "What's New in Android Developer Tools"  세션에 소개된 것과 같이, IntelliJ 기반 android development tool이 발표되었다. 


10여년전 대학생 때 구매한 Bolland JBuilder 이후 쭉 Eclipse 와 친하게 지냈던 나에게 최근(?) 여기저기 IntelliJ 이 좋다는 이야기를 듣고 그냥 그런갑다 햇는데, 이번에 발표된 android studio가 IntelliJ 기반이라길래 한번 설치해봤다.

다운로드는 요기


Mac/Linux(Ubuntu)/Windows 각각 설치해보았는데,

Mac을 제외하고 에러 없이 한번에 실행이 되질 않는다.


Linux와 Windows에서 android studio 시행착오를 정리하면, 아래와 같다.


[Windows]

  • 증상 : Android Studio를 실행해도 아무런 반응이 없음. Command에서 실행해도 씹음. -_-; (에러라도 뱉던가...)
  • 해결방법 :  시스템 환경 변수에 JAVA_HOME Path가 추가되어있어야 한다.

                   Known Issue에 잘 나와있는데, 나같이 성질 급한 사람은 제대로 안읽어보고 왜 안되냐고 불평한번쯤 할듯하다.


[Linux]

  • 증상 : studio,sh 실행시 "Plugin com.intellij failed to initialize and will be disabled: null" 에러 팝업 발생
  • 해결방법path에 등록된 jdk 설치 경로 (symbolic link여도 관계없음) 가 아래와 같은 경로로 되어있어야 한다고 한다.                    (Stackoverflow 횽아들한테 들은것임. IntelliJ는 원래 그런듯...)

        • /usr/java or
        • /opt/java or
        • /usr/lib/jvm


실행하고 나면,  꼭 XCode 짝퉁같아 보이는 IDE가 하나 보이긴하는데, 남들은 Eclipse 보다 좋다 어쩌다 하는데, 아직은 잘 모르겟다. Layout 및 Shortcut이 어색하고 (Mac, Windows, Linux 각각 다다르니깐 더 헷갈린다..) 암튼... 점점 익숙해지겟찌... IDE도 IDE지만, 사실 Build System이 더 생소하다. Graddle 도 좀더 보고 판단해야 할듯. (http://tools.android.com/tech-docs/new-build-system/user-guide)



 

   





저작자 표시
신고
Creative Commons License
Posted by rookiejava


그간 주로 사용하던  Linux, Windows를 의도적으로 배제한 채,  

Air video server로 썩고 있는 Mac에 개발환경을 한번 구축해보기로 하였다.


1. 뭐부터 할지 고민.... 고민... 하다.... 최근 관심있는 오픈소스 몇 개 좀  들여다보고 테스트도 해보고.... 공부도 할겸, 일단 필요한 프로젝트 부터 좀 땡겨보기로함.


2. 매번 CLI로 쓰다 이번 기회에 나도 좀 품격있게 해볼라고, 전부터 눈여겨 보던 Github for Mac (http://mac.github.com) 부터 설정하고.... 소스좀 땡겨볼까 햇더니.... 아.... 생소하다... 결국 clone 받는걸 알아내지 못한채.... 그냥 Terminal 에서 필요한 프로젝트 소스코드를  git clone하여 연동. 


3. 아. 역시 난 Terminal 이 편하다... 근데 이거 왜이리 거슬리나 했더니... Mac은  기본 Terminal은 왜이리 구린것인지...


4.  여기저기 뒤적거리다 iTerm (http://www.iterm2.com)이 쓸만하다고 하여  latest version 으로 설치. 뭐.. 그럭저럭... 오케이!. (단축키가 손에 안익어 성질 조금 올라옴.. 특히 command 키랑 ctrl키랑... 완전 헷갈림).


5. 음.... 빌드도 잘되고... source code navigation 도 그럭저럭 괜춘한데..... 괜시리 Terminal 에 coloring이 눈에 거슬리기 시작함. 이건 왜 다 흰색 아니면 검정색이지... -_-;; 문명  xterm-256 colors로  Profile설정했는데....


6. 거슬리는 git  coloring은 git config 설정으로 잡아주고, 음... 왜 vim은 또 syntax highlighting이 on이 아닌것이지 -_-;... vimrc에 default 로 syntax highlighting 설정완료... 


7. 아직..뭔가 더 거슬린다.. 이런! bash도 흑아니면 백이군....당장 `ls` command조차 기본값이 color disable임을 알았음... 


$echo "alias ls='ls -G'" >> ~/.bashrc
$. ~/.bashrc


8. 음.... 뭔가 여전히 맘에 안든다. font가 거슬린다. 기본 font인 Monaco도 내 스타일은 아니고... 뭐 좀 이쁜거 없나 살펴봐도 마땅치 않아 그냥 무난하게 fixedsys를 사용하기로 결정. 음. 기본으로 내장이 안되어있군.


9. http://fixedsysexcelsior.com/ 로 고고. font를 다운받아...설정.


10. Emacs는 예전에 패기있게 도전장을 내던졌지만, 역시나 좌절 후 포기했고, 걍 익숙한 vim으로 깔짝대다 문득, 요즘 흥미를 두고 있는 에디터인 Sublime Text2 (http://www.sublimetext.com/) 가 떠올라... 설치. 이것저것 플러그인 좀 깔고... 프로젝트 설정 완료. 아직 많이 써보지 않아 손에 잘 안익는다. Lookup Reference가 뭐지.. -_-;;; (로컬말고 global). 


11. 음.. 인제 공부좀 해볼까..... 했더니 .. 기가막힌 타이밍에. 우리 효자 아들 녀석이 아빠 피곤할까봐 주무시라고... 자다말고 떙깡을 피우는 소리 (+엄마가 달래는 소리)가 난다....  일단 불부터 소등...


12. -_-;;;; 여긴 어딘가... 나는 무엇을 할라고 컴퓨터를 켯었는지.. 기억이 안난다. 느껴지는건 책상에 좀 앉아있었다고 밀려오는 피곤함과 아들놈이 언제 거실로 나와  울음을 터트릴지 모른다는 불안감정도.... 


하.....아....... 역시 집에선 걍 PC키지 않는것이 좋겟다고 생각하며 퇴갤. 






저작자 표시
신고
Creative Commons License

'TIP & TALK > iOS/Mac/Apple' 카테고리의 다른 글

Mac 개발 환경 설정 경험담  (2) 2012.10.07
Apple TV 사용기 (순정)  (1) 2011.12.08
신형 맥미니 메모리 업그레이드 하기  (0) 2011.11.23
Posted by rookiejava
수많은 커뮤니티나 블로거들에 의해 Apple TV 사용방법, 설정, 활용방안 등 좋은 정보가 많이 있지만,
나름  1시간 남짓 사용해본 사용기를 공유해보고자 한다. 
(1인칭 시점이기떄문에, 존댓말이 아니더라도 양해부탁바람)

보통의 경우 한국에서는 Apple TV로 제공받을수 있는 서비스가 제한적이기 떄문에 
탈옥한 후에 XBMC등을 활용하여 미디어 서버로 주로 활용을 하고 있지만 ,
나의 경우에는 그렇게 시간을 투자하기도 쉽지도 않고, (귀찮은게 더큼)
순정을 사랑하는 나름 개똥 철학(?) 이 있기때문에 있는 그대로의 활용방안에 중점을 두고자 한다.

요약하면 딱 아래 2가지로 정리할수 있을거 같다.

1. Media Content(동영상, 사진, Podcast) Sharing
  : PC 또는 iPad에 존재하는 컨텐츠 공유
    e.g) 모바일 디바이스로 생성한 사진이나 동영상을 TV 에서 손쉽게 시청
            PC 에서 다운받은 영화나 음악을 보다 큰 Display(TV)에서 손쉽게 시청 (별도 연결 없이..)

2.Airplay Mirroring
  : iPad (2부터 공식지원) 나 iPhone (4S 부터 공식지원) Video/Audio Mirroring
     e,g) iPad를 통해 다운받은 게임/잡지/영상/음악 등을 별도 연결없이 TV Screen을 통해 이용

각설하고,  설치 부터 활용까지 Step by Step 으로 정리해보자.

Step 1. 개봉
 뉴욕에서 공수해온 애플티비 봉인 해제. 심플 & 큐트 
$99의 행복을 느끼게 해준 안책임님꼐 다시 감사.
구성품은 본체+리모콘+전원케이블+설명서 뿐이다.


Step 2. 연결 
준비물 : TV 또는 모니터 (물론 HDMI가 지원되야한다.)
              : HDMI 케이블 
              : Apple TV

위 3가지 준비물이 다 갖추어져있으면, TV와 Apple TV를 HDMI케이블 연결후 전원 On. 끝.

Step 3. 설정
설정이라고 할것도 없지만, 몇가지 팁을 정리하자면

- 네트웍 설정
이건 뭐 그냥 다른 device와 동일하다. (Wifi/LAN 모두 가능)

- Home 공유 설정
보유하고 있는 Mac 이나 iOS device의 iTunes와 공유하기 위해 설정에 있는 Home 공유 기능을 킨다.
(Mac 에서도 동일)

- 리모콘 설정
기본 리모콘이 심플하고 이쁘지만, 절대 편리하지 않다.
고로, iPhone 또는 iPad 가 있다면, Apple Remote를 통해 키 입력을 받도록 한다. (App Store에서 download : Free 임)
(Apple TV는 언어를 한국어로 하더라도 기본적으로 한글입력이 안되는데, Apple Remote를 통해서는 한글입력 가능하다)
더불어, 기존 사용중인 리모콘(e.g. TV 리모콘)이 있다면, 해당 리모콘을 Apple TV 리모콘으로 등록할수 있다.

- 기타 계정 설정
사용중인 서비스(e,g) Youtube, Flickr, MobileMe, ...)에 대한 계정을 설정한다

 Step 4. Enjoy Apple TV

 이제 그냥 즐기면 된다.


* Youtube 활용기

아래 동영상으로 대체. (뭐 내계정에 있는 동영상이나 인기 동영상등을 보는것이다...)


* Airplay Mirroring 

최근 지상파 방송이 HD 가 나오지 않아 SD로 시청하는데, 아이패드에서 pooq등으로 TV 재생하고 Airplay Mirroring으로 TV 에서 보는게 왠지 더 화질이 좋아 보인다. ㅋ
더불어, 다음 생중계로 EPL도 TV로 시청가능.


 
더불어, 앞서 이야기 했던 application들 (게임,유틸리티,잡지,인터넷 등)을 TV 로 즐길수 있는데, 간단한 동영상으로 대체한다.  (영화 감상은 다음에 기회되면 하고 귀찮으면 스킵하도록 하겠다.) 다들 알아서 잘하니깐..


* 총평

일단 가성비 좋다. 애지간히 경제적으로 어렵지 않은 성인 남성이라면, 큰 부담없이 즐기기 딱좋지 않을까 생각된다. (특히나 Mac 이나 iPhone , iPad 를 보유하고 있다면, 닥치고 구매 ㅋㅋ)
단, 주변사람들의 비난을 감내해야 한다. (e.g. 앱등이, 앱빠, 잉여 등등. ㅋ 참고로 난 애플빠 아님!)
(와이프가 있는 사람이라면 더욱 큰 난관에 부딪힐수 있다. 이럴떄는 그냥 내 용돈으로 산다고 하라.)

그리고 네트워크 성능이 사용성에 영향을 줄거 같다. 
내 경우에는  집안에 있는 모든 네트웍구성이 열라 꾸진 (802.11n도 안되는 안테나 1개짜리) 무선 AP를 통해 인터넷을 Access하는데, 그래서 그런건지 Airplay mirroring시 간헐적으로 끊김현상이 있다. (동영상에도 나오겠지만...)

아, 그리고 해상도. 보통 TV들이 다 50인치급 또는 40인치 이상 큰 화면이고 1920x1080 resolution을 지원하는데,
아쉽게도 iPad2는 해상도가 그리 높지 않다. 따라서 Airvideo Mirroring시에 기존 아이패드 Aspect Ratio를 유지하면서 화면 양쪽이 잘리게 된다. 단, 동영상 시청시에  Full Screen으로 전환하면 TV에서도 정상적으로 Full Screen 지원된다. (물론 영상 소스가 Resolution이  FHD지원되야함) - 혹시 다른 방법이 있다면 알려주셔용

이렇게 Extreme Airport를 구매하는건가.... ㅋㅋ 싶은 생각도 든다.
어찌되었든 분명한건 네트웍 영향이 존재한다. 우리집 네트웍상태에서 사용시, 민감-까칠 유저는 제고해볼 필요 있음.

암튼, 이건 사야돼! 
끝!
 
ps. 1시간 남짓 써본 지식을 바탕으로 쓴 글이므로, 글에 잘못된 정보나 오해의 소지가 있는 표현이 있다면 지적바랍니다. 냉큼 고치겟습니다. ㅋ 
저작자 표시
신고
Creative Commons License

'TIP & TALK > iOS/Mac/Apple' 카테고리의 다른 글

Mac 개발 환경 설정 경험담  (2) 2012.10.07
Apple TV 사용기 (순정)  (1) 2011.12.08
신형 맥미니 메모리 업그레이드 하기  (0) 2011.11.23
Posted by rookiejava

총평 : 겁나 쉽다. 돈 별로 안든다. 기분상 빠른거 같다.


1. 메모리 구입
 : 2011년 맥미니의 경우에는 아래와 같은 메모리를 구입하면 된다.
   - SO-DIMM PC3 10600 (1333 Mhz) DDR3  
   - 2011년 11월 현재 기준 겁나 싸다... 대략 못사도 4GB에 20000원 초반 대에 구입가능. (검색은 오픈마켓 활용)
   - 메모리 슬롯은 2개까지 지원되며, 보통  4GB * 2개  = 8GB로 업그레이드 한다. (약 4만 5천원 ...배송비 포함)
   - 아래 사진은 배송비 절약을 위해 회사 후배 것까지 일괄 구매로 총 4개 * 4GB = 16GB  구입.
    (보아라 sngn. 다 똑같다!)

  
2. 맥미니 뒷판 제거
  : 맥미니 코드를 모두 제거후 뒤집어 판을 돌리면 된다. (드라이버따위는 필요없다)

3.  기존 메모리 제거
  : 아.. 이거슨..... 처남이 다니는 하이닉스 메모리... 화이팅!
  : 메모리 모서리 양쪽 클립을 살짝 당기면 메모리가 툭 하고 튀어나온다.

4.  새로운 메모리 삽입
  : 하이닉스에서 삼성으로 바꼇다.... 둘다 화이팅!
  : 먼저 사선 방향으로 메모리 슬롯에 메모리를 맞춘 뒤, 살짝 눌러주면 클립에 '딸깍' 고정되면서 장착된다.
  : 안쪽 메모리 부터 삽입한다.

5. 메모리 업그레이드 확인
 : 다시 뒷판 조립 하고 부팅한 뒤에 메뉴의 '이 메킨토시에 대하여' 메뉴로 확인한다.
 : 보통 메모리를 잘못 꼽으면  beep음과 함꼐 부팅이 안된다. 당황하지말고 2번으로 돌아가시오.
 : 짠!. 8기가의 위용~ 우옹. 괜시리 어플들이 휙휙 뜨는거 같다.ㅋㅋㅋ




 
저작자 표시
신고
Creative Commons License

'TIP & TALK > iOS/Mac/Apple' 카테고리의 다른 글

Mac 개발 환경 설정 경험담  (2) 2012.10.07
Apple TV 사용기 (순정)  (1) 2011.12.08
신형 맥미니 메모리 업그레이드 하기  (0) 2011.11.23
Posted by rookiejava
타임라인 보고 있으니...시간 참 빨리 흐르네요.

The-Andriod-Story
 
출처 : http://mashable.com/2011/07/26/android-history-infographic/ 
저작자 표시
신고
Creative Commons License
Posted by rookiejava
TAG Android

[출처 : http://www.perlmonks.org/ ]

Answer: How to run a shell script from a Perl program?
contributed by radiantmatrix

Perl offers three slightly different mechanisms for executing external commands:

  1. system
  2. exec
  3. Backticks or qx//
  1. Using system

    system($command, @arguments); # For example: system( "sh", "script.sh", "--help" ); system("sh script.sh --help");
    System will execute the $command with @arguments and return to your script when finished. You may check $! for certain errors passed to the OS by the external application.

    Read the documentation for system for the nuances of how various invocations are slightly different.

  2. Using exec

    This is very similar to the use of system, but it will terminate your script upon execution. Again, read the documentation for exec for more.

  3. Using backticks or qx//

    my $output = `script.sh --option`; my $output = qx/script.sh --option/;
    The backtick operator and it's equivalent qx// excute the command and options inside the operator and return that commands output to STDOUT when it finishes.

There are also ways to run external applications through creative use of open, but this is advanced use; read the documentation for more.

Answer: How to run a shell script from a Perl program?
contributed by snapdragon

The way to do this is to use a systen call to run your script:

system("script.sh");

However I thought that I'd mention a couple of points to go with this. 

  1. Don't assume that your shell environment variables will be kept - a shell script that works fine on the command line may not work when run from Perl
  2. Be careful with your directories - try to make sure you're executing from the right place. It's often worthwhile to do a chdir to the right directory in Perl before calling your script. i.e.  chdir "/path/to/script/";

Good luck!
Answer: How to run a shell script from a Perl program?
contributed by Plankton

I like to do this sometimes ...

my $shell_out = <<`SHELL`; for fs in `/sbin/fdisk -l | grep -v swap | grep Linux | cut -d ' ' -f1 +` do /sbin/e2label \$fs | grep recovery > /dev/null 2>&1 && echo "Y +ES" && exit 0 done echo "NO" exit 0 SHELL
... to capture the stdout of the shell commands in a scalar var.
Answer: How to run a shell script from a Perl program?
contributed by ruzam

A slightly longer version using the exec method with forked pipes (and an optional timeout value).

# two parameters: # cmd - a command or reference to an array of command + arguments # timeout - number of seconds to wait (0 = forever) # returns: # cmd exit status (-1 if timed out) # cmd results (STDERR and STDOUT merged into an array ref) sub ExecCmd { my $cmd = shift || return(0, []); my $timeout = shift || 0; # opening a pipe creates a forked process my $pid = open(my $pipe, '-|'); return(-1, "Can't fork: $!") unless defined $pid; if ($pid) { # this code is running in the parent process my @result = (); if ($timeout) { my $failed = 1; eval { # set a signal to die if the timeout is reached local $SIG{ALRM} = sub { die "alarm\n" }; alarm $timeout; @result = <$pipe>; alarm 0; $failed = 0; }; return(-1, ['command timeout', @result]) if $failed; } else { @result = <$pipe>; } close($pipe); # return exit status, command output return ($? >> 8), \@result; } # this code is running in the forked child process { # skip warnings in this block no warnings; # redirect STDERR to STDOUT open(STDERR, '>&STDOUT'); # exec transfers control of the process # to the command ref($cmd) eq 'ARRAY' ? exec(@$cmd) : exec($cmd); } # this code will not execute unless exec fails! print "Can't exec @$cmd: $!"; exit 1; }
Answer: How to run a shell script from a Perl program?
contributed by DeadPoet

If you want the PID, STDOUT, and STDERR, use IPC::Open3.

Example:

use IPC::Open3; local (*IN, *OUT, *ERR); my $pid = eval{ open3( \*IN, \*OUT, \*ERR, 'my_command', 'my_command_args' ); }; if ($@) { warn ($@); } ## capture your output, if needed... ## wait on the pid... wait( $pid, 0 );
저작자 표시
신고
Creative Commons License
Posted by rookiejava

아웅... 한두번 하는것도 아닌데...
할때마다 헷갈려서 검색하는것도 귀찮아서 그냥 글로 남겨둬야겠다..


[출처 : http://linuxproblem.org ]

SSH login without password

Your aim

You want to use Linux and OpenSSH to automize your tasks. Therefore you need an automatic login from host A / user a to Host B / user b. You don't want to enter any passwords, because you want to call ssh from a within a shell script.

How to do it

First log in on A as user a and generate a pair of authentication keys. Do not enter a passphrase:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

Now use ssh to create a directory ~/.ssh as user b on B. (The directory may already exist, which is fine):

a@A:~> ssh b@B mkdir -p .ssh
b@B's password: 

Finally append a's new public key to b@B:.ssh/authorized_keys and enter b's password one last time:

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 

From now on you can log into B as b from A as a without password:

a@A:~> ssh b@B hostname
B

A note from one of our readers: Depending on your version of SSH you might also have to do the following changes:

  • Put the public key in .ssh/authorized_keys2
  • Change the permissions of .ssh to 700
  • Change the permissions of .ssh/authorized_keys2 to 640




저작자 표시
신고
Creative Commons License
Posted by rookiejava

SQL As Understood By SQLite

SQLite understands most of the standard SQL language. But it does omit some features while at the same time adding a few features of its own. This document attempts to describe precisely what parts of the SQL language SQLite does and does not support. A list of SQL keywords is also provided. The SQL language syntax is described by syntax diagrams.

The following syntax documentation topics are available:

The routines sqlite3_prepare_v2(), sqlite3_prepare(), sqlite3_prepare16(), sqlite3_prepare16_v2(), sqlite3_exec(), and sqlite3_get_table() accept an SQL statement list (sql-stmt-list) which is a semicolon-separated list of statements.

sql-stmt-list:

syntax diagram sql-stmt-list

Each SQL statement in the statement list is an instance of the following:

sql-stmt:

syntax diagram sql-stmt



[출처 : http://www.sqlite.org/lang.html]

신고
Creative Commons License

'TIP & TALK > Linux' 카테고리의 다른 글

How to run a shell script from a Perl program?  (0) 2011.02.18
SSH login without password  (0) 2011.01.20
SQLite Query Syntax  (1) 2010.10.23
missing sentinel in function call  (1) 2010.10.18
Ubuntu NTFS HDD or Partitionnig Problem  (0) 2010.07.16
Ubuntu 파티션 관리  (0) 2010.07.16
Posted by rookiejava

GCC 4 warnings about sentinels

Null-terminate parameter list

Some functions have a variable number of arguments, where the argument list has to be terminated with a NULL value. To solve this warning, null-terminate the list of parameters.

Introduction

When compiling something with GCC 4, it may be possible that you get one of the following warnings:

warning: missing sentinel in function call 
warning: not enough variable arguments to fit a sentinel

This document explains what these warnings mean and how to resolve them.

Sentinels & warnings

A sentinel is a special value which indicates the end of a series of data. In the context of GCC, it is a null pointer which ends a list of parameters to a function.

The function

execl(const char * path, const char * arg, ...)

takes a variable amount of parameters. To know where to stop reading parameters, the last parameter must be a null pointer. When you do not end the list with a null pointer,execl will not stop scanning, which will result in errors. The following code, therefore, is wrong:
#include <unistd.h>

int main() {
	execl("/bin/ls", "ls", "-l");
	return 0;
}

The execl function call is not terminated by a null pointer and GCC will give a warning. The following code is better:

#include <unistd.h>

int main() {
	execl("/bin/ls", "ls", "-l", NULL);
	return 0;
}

As you can see, the execl function is now terminated by a null pointer and it will stop scanning it's arguments after that. However, GCC 4 will still issue a warning: 
warning: missing sentinel in function call 
This is because NULL is not of the right type: it is defined as integer 0 instead of a pointer with the value 0. Doing an explicit cast can make the warning go away:

#include <unistd.h>

int main() {
	execl("/bin/ls", "ls", "-l", (char *)NULL);
	return 0;
}

Using sentinels

One can specify that a function uses a sentinel by declaring it as follows:

char * build_path(const char * str, ...) __attribute__((__sentinel__(0)));

This indicates that the parameter list is ended with the special value 0, which must be a char pointer.

On most systems, there is no difference between 0 and (char *)0. On 64 bit systems, however, the integer 0 is 32 bits and the pointer 0 is 64 bits. The compiler does not know whether it is an integer or a pointer, and defaults for the integer. This will not clear the upper 32 bits and the function will not stop scanning its parameters.


출처 : http://www.linuxonly.nl/docs/2/2_GCC_4_warnings_about_sentinels.html
신고
Creative Commons License

'TIP & TALK > Linux' 카테고리의 다른 글

SSH login without password  (0) 2011.01.20
SQLite Query Syntax  (1) 2010.10.23
missing sentinel in function call  (1) 2010.10.18
Ubuntu NTFS HDD or Partitionnig Problem  (0) 2010.07.16
Ubuntu 파티션 관리  (0) 2010.07.16
Unix socket 사용시 주의사항  (0) 2010.05.04
Posted by rookiejava


티스토리 툴바