프로그램 지정에서 디렉토리와 파일 이름이 합친 전체 이름으로 지정하는 것과 파일 이름만 지정하는 것의 차이는, execl()처럼 전체 이름을 요구하는 함수는 지정한 디렉토리의 프로그램을 실행하지만 execlp()함수처럼 프로그램 이름만 요구하는 함수는 현재 PATH 환경에 등록된 디렉토리를 있는 프로그램을 실행합니다.
즉,
execl()은 아래와 같이 프로그램이 들어 있는 디렉토리명까지 입력해 주어야 합니다.
execl( "/bin/ls", "/bin/ls", NULL);
아래와 같이 프로그래명만 입력하면 실행이 안 됩니다.
execl( "ls", "ls", NULL);
그러나 execlp()는 PATH에 등록된 모든 디렉토리에 있는 프로그램을 실행하므로 프로그램 이름만 입력해도 실행이 됩니다.
execlp( "ls", "ls", NULL);
다시 말씀 드려 man()함수의 인수준 *argv[]의 첫번째 문자열 argv[0]은 실행한 프로그램의 이름입니다.
int main( int argc, char *argv[])
{
printf( "%s\n", argv[0]);
return 0;
}
예로
]$ ./a.out
으로 실행했다면 argv[0]은 "./a.out"이 되며,
]$ /home/jwjw/prjs/test_fun/a.out
으로 실행했다면 argv[0]은 "/home/jwjw/prjs/test_fun/a.out"이 됩니다. 또한 어떤 프로그램은 이 첫번재 인수를 이용할 수 있으므로 파일의 전체 이름을 입력해 주는 것이 좋습니다.
파일을 사용하기 위해 열기(open)합니다. 파일 열기에는 표준 함수인 fopen()이 있습니다. fopen() 이 표준 C 라이브러리에서 제공한다면 open()은 리눅스에서 제공하는 함수로 더 자세한 내용은 포럼 강좌 게시판의 fopen() and open()글을 참고하여 주십시오.
파일을 open할 때에는 용도에 따라 읽기 전용, 쓰기 전용 또는 읽기와 쓰기가 모두 되는 옵션을 지정하여 열기를 합니다.
* 아래의 옵션은 모두 fcntl.h 에 정의되어 있습니다.
열기 옵션
옵션 설명
O_RDONLY
읽기 전용응로 열기
O_WRONLY
쓰기 전용으로 열기
O_RDWR
읽기와 쓰기가 모두 가능
이 외에도 더 다양한 옵션이 있습니다.
기타 옵션
옵션 설명
O_CREAT
해당 파일이 없으면 생성합니다.
O_CREATE 가 아니라 끝에 E가 없는 O_CREAT 입니다.
O_CREAT로 파일을 생성하게 된다면 파일의 접근권한을 지정하기 위해 접근 권한 값을 추가해야 합니다.
open( "jwmx", O_WRONLY | OCREAT, 0644);
O_EXCL
O_CREAT를 사용했을 때, 파일이 이미 있어도 열기가 가능하여 쓰기를 하면 이전 내용이 사라집니다.
O_CREAT를 사용할 때, O_EXCL를 함께 사용하면, 이미 파일이 있을 때에는 open() 되지 않아 이전 파일을 보존할 수 있습니다.