윈도우 탐색기처럼 거창한건 아니고.. 매번 cd명령어로 왔다갔다 하는게 매우 불편하다고 느껴서 언제 어디서나 mc라고 치면 바로 제가 만든 쉘과 c로 이루어진 프로그램이 동작해서 원하는 디렉토리로 이동하고자 만들어보려고 합니다.
다른 프로그램에서는 cd는 안되고 파일 삭제, 생성만 가능해서 이번엔 cd만 중점적으로 해보려구요.
쉘에서
find /home/user -type d | grep -v "^/home/user/\." > /home/user/temp/log.txt
라고 치면 제가 만든 디렉토리와 자주 들어갈 법한 디렉토리만 출력되더라구요. 앞에 .으로 시작하는 디렉토리는 전부 없애주고.
log.txt에 저장하는 이유는 c에서 앞에 번호를 달아서 출력하고 사용자가 번호만 입력하면 해당 디렉토리로 이동하도록 해주기 위해서 log.txt에 저장했습니다.
그 다음 c에서 for문 돌려서 log.txt에 저장된 디렉토리 경로를 한 줄씩 읽어서 배열에 저장하고 출력하려고 했는데. 출력하니 글자가 깨져서 나옵니다.
<코드>
FILE *fp;
int idx, input=0;
int fd;
char buf[50][50]; //각각의 주소를 저장할 배열입니다.
if((fp = fopen("/home/user/temp/log.txt", "r")) == NULL){
perror("log.txt");
exit(1);
}
for( idx=1 ; ; idx++ ){
fgets( buf, 50, fp);
printf("%d : %s \n", idx, buf[idx - 1]);
if(eof(fp))
break;
}
이렇게 작성하면 for문에서 fgets()로 한 줄 읽어오고, printf();로 출력하고 파일의 끝인지 확인하고 아니면 다시 for문돌고.. 이렇게 될 것 같은데.. 생각대로 안되는 것 같아요. 1번 줄만 제대로 출력되고 나머지는 글자가 깨져버립니다. 제 생각에 fgets()가 틀린 것 같은데 한 줄씩 읽어오는 다른 함수가 있을까요??
전체코드도 올려드릴게요.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
void main(){
FILE *fp;
int idx, input=0;
int fd;
char buf[50][50]; //각각의 주소를 저장할 배열입니다.
if((fp = fopen("/home/계정/temp/log.txt", "r")) == NULL){
perror("log.txt");
exit(1);
}
for( idx=1 ; ; idx++ ){
fgets( buf, 50, fp);
printf("%d : %s \n", idx, buf[idx - 1]);
if(eof(fp))
break;
}
fclose(fp);
printf("디렉토리를 이동하시겠습니까?(Yes = 1 / No = 2) : ");
scanf("%d", input);
if(input == 1){
input = 0;
printf("이동하고 싶은 디렉토리 번호를 입력 : ");
scanf("%d", &input);
fd = open(buf[input - 1], O_RDONLY);
fchdir(fd);
execl("/bin/bash", NULL);
}
}
눈팅만으로는 답변글을 볼 수 없습니다. 로그인하셔야 합니다.