LoveUnix » 编程开发 & Rational » 求助一个linux下的编程问题
让LU留住您的每

一天 让LU博客留住您的每一天
2005-7-3 18:14 flyer05
源代码 testprocess.c:<br /><br />#include &lt;stdio.h&gt;<br />#include &lt;unistd.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;string.h&gt;<br /><br />#define MAX_ARGS 64<br />#define MAX_ARG_LEN 16<br />#define MAX_LINE_LEN 80<br />#define WHITESPACE &quot; .,\t\n&quot;<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 == &amp;cLine;<br />        argc = 0;<br />        cmd-&gt;argv[argc] = (char *)malloc(MAX_ARG_LEN);<br />        <br />        while((cmd-&gt;argv[argc] = strsep(clPtr, WHITESPACE)) &#33;= NULL) {<br />                cmd-&gt;argv[++argc] = (char *) malloc(MAX_ARG_LEN);<br />        }<br />        <br />        cmd-&gt;argc = argc-1;<br />        cmd-&gt;name = (char *) malloc(sizeof (cmd-&gt;argv[0]));<br />        strcpy(cmd-&gt;name, cmd-&gt;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 &#33;= 2) {<br />                fprintf(stderr, &quot;Usage: launch &lt;launch_set_filename&gt;/n&quot;);<br />                exit(0);<br />        }<br />        <br />        fid = fopen(argv[1], &quot;r&quot;);<br />        <br />        numChildren = 0;<br />        while (fgets(cmdLine, MAX_LINE_LEN, fid) &#33;= NULL) {<br />                parseCommand(cmdLine, &amp;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(&quot;\n\nlaunch: Launched %d commands\n&quot;, numChildren);<br />        <br />        for(i = 0; i &lt; numChildren; i++) {<br />                wait(&amp;status);<br />        }<br />        printf(&quot;\n\nlaunch: Terminating successfully\n&quot;);<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-4 13:00 无双
使用gdb跟就知道在哪里出问题了

2005-7-5 17:41 program.chen
检查一下指针变量和调用指针的函数,问题出现在指针上,最好想楼上说的用gdb跟一下

2005-7-8 17:19 flyer05
我不是很会用gdb,可否说详细一点?谢谢了!

2005-7-9 16:58 无双
gdb 程序名<br /><br /><br />在main函数打断点<br />&gt;break main<br />开始运行<br />run<br />然后它会在main处停下<br /><br />然后你就<br />step <br />一直打<br /><br />gdb就这样用的<br /><br />内存问题使用调试器跟踪是最快最好的解决办法 <br /><br />

2005-7-20 04:26 gbfx
while (fgets(cmdLine, MAX_LINE_LEN, fid) &#33;= NULL)<br /><br /><br /> while (fgets(cmdLine, MAX_LINE_LEN, fid) == NULL)

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.