2010-02-02 27 views
0

我的程序基本上運行帶有命令行參數的可執行文件。 子進程分叉,子進程的輸出在文件「filename」中進行。只能由root用戶打開文件..給出錯誤的允許,我猜

的問題是該文件提出,並寫入數據,但只能由root用戶打開.. 怎樣才能使它可讀性誰調用該程序的用戶?

的代碼是: -

#include<stdio.h> 
    #include<string.h>  //strcpy() used 
    #include<malloc.h>  //malloc() used 
    #include<unistd.h>  //fork() used 
    #include<stdlib.h>  //exit() function used 
    #include<sys/wait.h> //waitpid() used 
    #include<fcntl.h> 

    int main(int argc, char **argv) 
    { 
char *command; 
char input[256]; 
char **args=NULL; 
char *arg; 
int count=0; 
char *binary; 
pid_t pid; 
int fdw; 

printf("Enter the name of the executable(with full path)"); 
fgets(input,256,stdin); 

command = malloc(strlen(input)); 
strncpy(command,input,strlen(input)-1); 

binary=strtok(command," "); 
args=malloc(sizeof(char*)); 

args[0]=malloc(strlen(binary)+1); 
strcpy(args[0],binary); 

while ((arg=strtok(NULL," "))!=NULL) 
{ 
    if (count%10 == 0) args=realloc(args,sizeof(char*)*10); 
    count++; 
    args[count]=malloc(strlen(arg)); 
    strcpy(args[count],arg); 
} 
args[++count]=NULL; 

if ((fdw=open("filename",O_WRONLY|O_EXCL|O_CREAT|0700)) == -1) 
    perror("Error making file"); 
close(1); 
dup(fdw); 

if ((pid = fork()) == -1) 
{ 
    perror("Error forking...\n"); 
    exit(1); 
} 
if (pid == 0) execvp(args[0],&args[0]); 
else 
{ 
    int status; 
    waitpid(-1, &status, 0); 
} 
return 0; 
} 
+0

ls -l指向文件時會說什麼? – bmargulies

+0

------ xr-- 1 shadyabhi shadyabhi 7342 2010-02-03 01:39文件名稱 –

回答

3

重讀開手冊頁,你是不是正確地傳遞文件模式參數,並導致標誌來在這個過程中搞砸了。

+0

哦..那真是太傻了... thanx ... –

+0

剛把open()調用改成: - 打開(「文件名」,O_WRONLY | O_EXCL | O_CREAT,777) &問題得到解決.... –

+2

不要使用777;這是一個十進制數字,不是八進制數。不要使用0777;該文件不是可執行文件,也可能不是世界可寫的。使用0644甚至0444(或者如果您信任屬於您的組的其他人員,則可能爲0664)。 –