2013-11-05 5 views
1

c에서 셸을 구현하고 명령 출력을 파일로 리디렉션하는 데 어려움을 겪고 있습니다. 내가 출력을 파일로 보낼 때 , 그것을 작동하는 것 같다하지만 파일이 열리지 않습니다와 나는 LS를 실행하면 다음과 같은 저를 보여줍니다 -l :명령 줄에서 C의 텍스트 파일로 리디렉션

---------x 1 warp staff 441 Nov 4 20:15 output.txt 

이 내 코드의 일부입니다

pid = fork(); 
if(pid == 0) 
{ /* child process */ 

    if(redirFlag) 
    { 
     int fdRedir = open(redirectName, O_WRONLY | O_CREAT); 
     if(fdRedir < 0){ 
      perror("Can't Open"); 
      exit(1); 
     } 

     if(dup2(fdRedir, STDOUT_FILENO) == -1){ 
      perror("dup2 failed"); 
      exit(1); 
     } 


    } 
    execvp(supplement[0], supplement); 
    /* return only when exec fails */ 
    perror("exec failed"); 
    exit(-1); 

답변

2

open의 프로토 타입은 다음과 같습니다 파일이 생성되면

#include <fcntl.h> 
int open(const char *path, int oflag, ...); 

, 당신은 파일 모드를 제공해야합니다. 코드에서

int open(const char *path, int oflags, mode_t mode); 

이 파일은 플래그 O_CREAT 열립니다하지만 파일 모드는 제공되지 않습니다. 그래서 당신은 그것을 조작 할 권한이 없습니다.

int fdRedir = open(redirectName, O_WRONLY | O_CREAT, 0644); 
+1

1 :의 엄격, 프로토 타입 ['개방()'(http://pubs.opengroup.org/onlinepubs/9699919799/functions/ 새 파일을 만들 때 파일 권한을 표시하기 위해 시도 open_html) 은'int open (const char * path, int oflag, ...);'이지만, 그물 결과는 여러분이 말하는 것처럼 꽤 많이 있습니다 :'O_CREAT'를 지정하면, 너무. 이것이 없다면 어떤 값이 모드로 취급 될지 불확정하다. 결과에서 대답이 '1'인 것 같습니다. –

+0

@JonathanLeffler 더 엄격한 프로토 타입을 제공해 주셔서 감사합니다. 답변을 업데이트했습니다. –

관련 문제