2005-7-3 18:14
flyer05
源代码 testprocess.c:<br /><br />#include <stdio.h><br />#include <unistd.h><br />#include <stdlib.h><br />#include <string.h><br /><br />#define MAX_ARGS 64<br />#define MAX_ARG_LEN 16<br />#define MAX_LINE_LEN 80<br />#define WHITESPACE " .,\t\n"<br /><br />struct command_t {<br />char *name;<br />int argc;<br />char *argv[MAX_ARGS];<br />};<br /><br />int parseCommand(char *cLine, struct command_t *cmd) {<br /> int argc;<br /> char **clPtr;<br /> <br /> clPtr == &cLine;<br /> argc = 0;<br /> cmd->argv[argc] = (char *)malloc(MAX_ARG_LEN);<br /> <br /> while((cmd->argv[argc] = strsep(clPtr, WHITESPACE)) != NULL) {<br /> cmd->argv[++argc] = (char *) malloc(MAX_ARG_LEN);<br /> }<br /> <br /> cmd->argc = argc-1;<br /> cmd->name = (char *) malloc(sizeof (cmd->argv[0]));<br /> strcpy(cmd->name, cmd->argv[0]);<br /> return 1;<br />}<br /><br />int main(int argc, char *argv[]) {<br /> int i;<br /> int pid, numChildren;<br /> int status;<br /> FILE *fid;<br /> char cmdLine[MAX_LINE_LEN];<br /> struct command_t command;<br /> <br /> if(argc != 2) {<br /> fprintf(stderr, "Usage: launch <launch_set_filename>/n");<br /> exit(0);<br /> }<br /> <br /> fid = fopen(argv[1], "r");<br /> <br /> numChildren = 0;<br /> while (fgets(cmdLine, MAX_LINE_LEN, fid) != NULL) {<br /> parseCommand(cmdLine, &command);<br /> command.argv[command.argc] = NULL;<br /> <br /> if((pid = fork()) == 0) {<br /> execvp(command.name, command.argv);<br /> }<br /> numChildren++;<br /> }<br /> printf("\n\nlaunch: Launched %d commands\n", numChildren);<br /> <br /> for(i = 0; i < numChildren; i++) {<br /> wait(&status);<br /> }<br /> printf("\n\nlaunch: Terminating successfully\n");<br /> return 0;<br />}<br /><br /><br />launchfile里为:<br />dir<br />date<br />gcc fork1.c<br />ls -l<br /><br />结果在执行gcc的编译任务时没有问题,但在运行./testprocess launchfile时总是说segemantation fault, 不知道是什么原因,好像和strsep()有关吧。望各位大虾指正,先谢了
2005-7-20 04:26
gbfx
while (fgets(cmdLine, MAX_LINE_LEN, fid) != NULL)<br /><br /><br /> while (fgets(cmdLine, MAX_LINE_LEN, fid) == NULL)