1 #include <stdio.h>
2 #include <dirent.h>
3 #include <fcntl.h>
4 #include <unistd.h>
5 #define BUFSIZE 256
6
7 int main(int argc,char **argv)
8 {
9 char buffer[BUFSIZE];
10 ssize_t nread;
11 FILE *fp;
12 int fdin;
13
14 if(!(fp = popen("/home/khs/week5_2", "r"))){ <---여기가 문제인가본데 제가 생각하기 문제가 없어보이는데,, 그냥 여는건데,,왜??
15 printf( "Start if");
16 perror("open() error");
17 return -1;
18 }
19
20 //while((nread = read(fdin,buffer,256))>0)
21 while(fgets(buffer,BUFSIZE,fp)) {
22 printf ("while start");
23 printf("%s",buffer);
24
25 }
26 close(fdin);
27 return 0;
# 이렇게 코딩해서 실행했을때요
# sh: 1: /home/k/week: Permission denied
이런오류가 나오는데 어떻게 해결해야하는지 아시나요??
.....
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFSIZE 256
int main()
{
char buffer[BUFSIZE];
ssize_t nread;
FILE *fp;
int fdin;
if(!(fp = fopen("/home/khs/week5_22","r"))){
printf("open error");
return -1;
}
while(fgets(buffer,BUFSIZE,fp)){
printf("%s",buffer);
}
fclose(fp);
return 0;
}
코드를 조금 수정했거든요 이제는 그 경로 거부는 안나오는데 동작을 안해요.. 의도하려는 바는 위에코드와 같아요..
이유,,,,나,,,,다른 방법이라도,.......ㅠㅠㅠㅠㅠㅠㅠ
그리고 이파일내에는
root@ubuntu:/home/khs/week5_22# ls
-g a b c ex1 ex2 ex3 ex4 main main.c main.o stdent.txt
이렇게 있어요 여기서 c만 디렉토리고 나머지는 파일이에요
3번째 수정 opendir readir 해도 왜 안되죠,,??
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
//#include <sys/ypes.h>
#include <dirent.h>
#define BUFSIZE 256
int main()
{
char buffer[BUFSIZE];
ssize_t nread;
DIR *fp;
struct dirent *dir_entry;
int fdin;
fp = opendir("home/khs/week5_22");
if(NULL != fp){
//printf("open error");
//return -1;
while(dir_entry = readdir(fp)){
printf("%s",dir_entry->d_name);
}
closedir(fp);
}
}
댓글쓰신 님 분 덕분에 제가 잘못여는걸 알고 다시써서 오픈디렉토리로 열어도 안되네요 왜이러죠?
~
item = readdir(fp); //왜 이건 변수를 저장할 수 있는데
path = readdir(fp); //추가 한 부분인 이건 왜 안되죠???
//printf("item: ",item);
if (item != NULL)
//item->path;
chmod(path, 777); // path를 굳이 설정한 이유는 const char * 형태만 된다고 해서에요 path를 초기화 한 후 넣은거에요..
if (item == NULL)
//printf("\n");
break;
~
~ 하............path = readdir(fp); 형태는 안된다고 하고...아 혹시 아는 분 있나여?
~
승리의 chmod +777 - dc App
경로 디렉토리 다 그렇게 했는데 안되요
해당 댓글은 삭제되었습니다.
안되욤..
저 경로가 있는건 확실하고?
네넵
앞으로 클립보드에 복사할 때 xclip 쓰셈. 에러메시지가 sh인 걸로 봐서 저 경로에 있는 거 스크립트 같은데 그 내용물을 보여봐. c 코드 말고.
xclip 인터넷에 치면 이상한도면도 나오는데,,?머죠??
https://opensource.com/article/19/7/xclip
그건 아마 오토캐드고 이건 리눅스 명령어임
좋은거 배워갑니다.
/home/khs/week5_22 디렉토리를 열으니 당연히 에러가 나지. 그리고 위위 코드는 popen 으로 열던데 그게 파일일거고 그 파일이 다른 사용자 계정에 있는 걸 접근하니 권한 없다 그러지
디렉토리를 열려면 어떻게 해야되나요??
하고 싶은 게 뭔데?
그냥 디렉토리 읽는 거라면 readdir로 하셈
디렉토리를 열어서 파일을 출력하려는거에요 근데 일단 파일여는걸 성공하면 두줄씩 출력하려는걸 하려는데 여는데서 막혔어요
https://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html
<dirent> 라고 디렉토리 전용 POSIX 헤더임. 이거 보고 해보셈
제가 그 사이트보고 따라는 해봤는데 똑같이 실행해도 아무런 변화가 없는데.......제코드중 머가 잘못된거죠...?
while이 왜 if 블록에 있냐
아 perror보고 헷갈림
opendir 할 때 루트 경로 (/) 빼먹었다
감사합니다
저..추가 질문이 있는데여 파일들의 권한을 변경하려고 했는데 chmod(item, 777); 이렇게하면 안되던에 혹시 아시나여?
8진수라 0777
덕분에 해결되었습니다 감사합니다!!!!!!!!!1
해결안됨 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
item이랑 path의 타입이 뭔데
16 struct dirent *item; 17 int fdin; 18 int count = 0; 19 const char *path; 입니다
readdir 리턴값이 struct dirent* 인데 왜 const char*에다가 assign함
chmod 를 써서 권한을 변경하려고하는데 chmod 형식이 chmod(const char*, mode_t mode) 로 나와있어서요 물론 item을 다이렉트로 const char* 에다 쓰면 또 안되서여..
chmod(item->d_name, 0777);
레퍼런스 문서를 보고 코드를 짜셈. 코드를 뇌피셜로 작성을 하니 에러가 자꾸 나지.
넹...