【发布时间】:2011-01-12 08:02:48
【问题描述】:
我的程序基本上运行一个带有命令行参数的可执行文件。 一个子进程被分叉,子进程的输出被放在文件“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;
}
【问题讨论】:
-
ls -l 指向文件时会说什么?
-
-----xr-- 1 shadyabhi shadyabhi 7342 2010-02-03 01:39 文件名
标签: c linux system-calls file-handling