Файл может быть открыт только пользователем root. Я полагаю, неправильные разрешения - PullRequest
0 голосов
/ 02 февраля 2010

Моя программа в основном запускает исполняемый файл с аргументами командной строки.Дочерний процесс разветвляется, а выходные данные дочернего процесса записываются в файл «filename».

Проблема в том, , что файл создан и данные записаны, но он можетбыть открыта пользователем 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;
}

1 Ответ

3 голосов
/ 02 февраля 2010

Перечитайте man-страницу для открытия, вы не правильно передаете аргумент режима файла и не запутали флаги в процессе.

...