명령어? 질문있습니다.

위 분류에 속하지 않는 모든 주제

Moderator: Dry8r3aD

Post Reply
saelly
Posts: 5
Joined: 2011/10/24 Mon 11:16 pm

명령어? 질문있습니다.

Post by saelly » 2011/11/12 Sat 12:45 am

ex) #include<stdio.h>

int main(void)
{
char tt[50];
int i;

for(i=0;i<5;i++)
{
sprintf(tt, "cp ~/Desktop/sun/lang.c ~/Desktop/sun/HaHa%d", i);
[color=#FF0040:2slsu9qo][b:2slsu9qo][size=150:2slsu9qo]system(tt);[/size:2slsu9qo][/b:2slsu9qo][/color:2slsu9qo]
}
return 0;
}

나머지는 다 알겠는데 저 빨간색으로 쓰여진 부분은 무엇을 뜻하는 것인가요..??
자세히좀 설명부탁드려요..

----------------------------------------------------------------------------------------------------------------------------
저 그리고.. 하나만 더 여쭐께 있는데..

제가 .bashrc에다가 PS1='[\t][$PWD]' 이렇게 설정했거든요...
그러면 터미널 켤때마다 시간이랑 현재 작업중인 디렉토리가 나와요..
그런데 이렇게 둘밖에 안나와서 제가 일반유저($)로 작업하는지 슈퍼유저(#)로 작업하는지가 안나옵니다.
$,# 이것도 나오게 하고 싶은데 무슨 방법없을까요?

User avatar
echidna
Posts: 177
Joined: 2009/04/13 Mon 8:30 pm

Re: 명령어? 질문있습니다.

Post by echidna » 2011/11/12 Sat 10:38 am

위에껀 c언어네요.. 저도 c언어는 'hello world' 수준이라 답변은 못해드리겠습니다...

밑에 질문하신건 '프롬프트'라고 합니다. $랑 #의 구분이 일반유저냐 슈퍼유저냐에 따라 자동으로
인식되는게 아니라 그렇게 구분하자는 일종의 약속 같은겁니다.

따라서 일반유저는 [user@host:~$] 요런식으로 기본 설정되있고 슈퍼유저(root)계정은 [root@host:~#] 이렇게
기본 설정되어 있기 때문에 구분이 됩니다.

그러니까 만약 root로 작업하신다면 원래대로 [root@host:~#] 이런 형식으로 나올겁니다.
굳이 $를 보고싶으시다면 직접 써주시면 됩니다..
맥 사용자. 우분투는 현재 서버로만 씁니다.

akuna
Posts: 636
Joined: 2009/04/15 Wed 3:32 pm

Re: 명령어? 질문있습니다.

Post by akuna » 2011/11/12 Sat 12:10 pm

저도 C 를 수박 겉핥기 식으로 해서 잘 모르는데
공부한다는 생각으로 찾아 봤습니다.

system() 함수의 정의는...

"C언어로 작성된 프로그램 안에서, 운영체제의 명령어나, 외부의 각종 실행파일을 실행시키기 위해서는 system() 함수를 사용합니다."

예를 들면...
system("mplayer/close music.mp3");
하면 mplayer 에서 music.mp3 파일을 한번 재생하고 닫는다는 것 같더군요.
[code:3ox1wyuq]#include<stdio.h>

int main(void)
{
char tt[50];
int i;

for(i=0;i<5;i++)
{
sprintf(tt, "cp ~/Desktop/sun/lang.c ~/Desktop/sun/HaHa%d", i);
system(tt);
}
return 0;
}[/code:3ox1wyuq]

변수 tt 에 저장된 cp ~/Desktop/sun/lang.c ~/Desktop/sun/HaHa%d 을 받아서
system(tt); 함수가 실행하는 것 같습니다.
결국, for 문에서
~/Desktop/sun/lang.c 파일이 ~/Desktop/sun/HaHa0~4 까지의 다섯개 파일로 만들어지는 것 같네요.

C 도 어려웠지만
제대로 이해를 못해서인지
C++ 는 너무 어렵군요. :oops:

User avatar
ihavnoth
Posts: 880
Joined: 2008/09/19 Fri 11:08 pm
Location: 경기/평택
Contact:

Re: 명령어? 질문있습니다.

Post by ihavnoth » 2011/11/13 Sun 9:50 am

system(tt);

아래는 한글 man page입니다.

[quote:11boguc7]이름
system - shell 명령어 실행하기

사용법
#include <stdlib.h>

int system (const char * string);

설명
system() 함수는 /bin/sh -c string를 호출하여 string 에 지정된 명령어를
실행하며, 명령어가 끝난후
반환된다. 명령어가 실행되는 동안, SIGCHLD 는 블럭되며, SIGINT 그리고 SIG
QUIT 는 무시된다.
.
.
.
suid 나 sgid 우선권이 있는 프로그램에서는 system() 을 사용하지 마라. 왜냐하면 몇몇 환경 변수들을 위한 이상한 값들이 시스템을 오작동시킬수 있기 때문이
다. 대신에 exec(3) 계열의 함수를 사용해라. 그러나 execlp(3) 나
execvp(3)은 제외해라. 사실 system() 함수는 /bin/sh 이 bash 버전 2인 시스템에서 suid 나 sgid 우선권이 있는 프로그램에서는 잘 작동하지 않는다. 왜냐
하면 bash 2는 시작시 우선권을 없애기 때문이다. (Debian은
sh처럼 구동시 이것을 하지 않는 수정된 bash를 사용한다.)

[/quote:11boguc7]

User avatar
ihavnoth
Posts: 880
Joined: 2008/09/19 Fri 11:08 pm
Location: 경기/평택
Contact:

Re: 명령어? 질문있습니다.

Post by ihavnoth » 2011/11/13 Sun 10:16 am

[quote="saelly":23ueux0e]제가 .bashrc에다가 PS1='[\t][$PWD]' 이렇게 설정했거든요...
그러면 터미널 켤때마다 시간이랑 현재 작업중인 디렉토리가 나와요..
그런데 이렇게 둘밖에 안나와서 제가 일반유저($)로 작업하는지 슈퍼유저(#)로 작업하는지가 안나옵니다.
$,# 이것도 나오게 하고 싶은데 무슨 방법없을까요?[/quote:23ueux0e]


/etc/profile의 14번째 줄 보시면
쉘이 bash일때랑 아닐때랑 구별해서 # $를 표시해줍니다.

bash가 아닐때는 uid를 체크해서 직접 PS1에 #이나 $를 표시해주고

bash일 경우에는 아래 URL에 있는 특수 문자를 이용해서 표시해줍니다.

아래 표의 \$는 effective UID가 0이면 #를 그렇지 않으면 $를 표시해줍니다.

http://tldp.org/HOWTO/Bash-Prompt-HOWTO ... ences.html

Post Reply