QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 757|回复: 7

急!求教:exec的使用.

[复制链接]
发表于 2004-4-9 16:45:40 | 显示全部楼层 |阅读模式
我对exec的理解不够深入,现在我有如下程序(只列出相关的部分):
//主函数
int main(void)
{
        .......
        execvp(*file,*argv[]);
        .......
}

//功能函数
int display(int a,int b)
{
        ......
}
******************************
int copy(*fd1,*fd2)
{
.....
}

————————————————————————————————————————————————
我现在想利用exec函数调用下面的功能函数,应该怎么调用?(我不清楚怎么设置exec里的参数才能和功能函数联系起来,怎样传递参数到功能函数那里去)。main()和各功能函数是在同一c文件,还是同一文件夹的几个独立的c文件?其中功能函数的参数个数不定的。
发表于 2004-4-9 17:02:54 | 显示全部楼层
???exec是用来调程序的,不是函数
回复

使用道具 举报

 楼主| 发表于 2004-4-9 17:19:23 | 显示全部楼层
难道不能调用自己编的程序吗??
回复

使用道具 举报

发表于 2004-4-9 18:57:06 | 显示全部楼层
晕,直接调用函数不就得了,还用exec干什么。。。不明白
回复

使用道具 举报

发表于 2004-4-10 11:15:12 | 显示全部楼层
exec从名字就可以看出来,是调用一个程序外部的可执行文件
回复

使用道具 举报

发表于 2004-4-10 14:18:14 | 显示全部楼层
[quote:69fa6d1746="yellow2008"]难道不能调用自己编的程序吗??[/quote]
你当然可以调用自己的函数。
但是那个EXEC调用一般是已经存的程序。
不要把EXEC当成了
EXEC (FUNCTION);
这个是是什么东西???
回复

使用道具 举报

 楼主| 发表于 2004-4-10 19:05:23 | 显示全部楼层
这么说来就是不能调用自己编写的c程序了。其实我是想利用apue中的命令处理函数(课本的只是处理系统本身的shell命令且不能带参数),对我的从键盘输入命令(带参数的)来执行我的功能函数的。整个程序就是一个简单的shell程序。我想知道怎样来通过对输入命令的分析来调用功能函数。希望大家能给点意见,源程序如下:
#include        <sys/types.h>
#include        <sys/wait.h>
#include        <signal.h>
#include        "ourhdr.h"

static void        sig_int(int);                /* our signal-catching function */

int
main(void)
{
        char        buf[MAXLINE];
        pid_t        pid;
        int                status;

        if (signal(SIGINT, sig_int) == SIG_ERR)
                err_sys("signal error");

        printf("%% ");        /* print prompt (printf requires %% to print %) */
        while (fgets(buf, MAXLINE, stdin) != NULL) {
                buf[strlen(buf) - 1] = 0;        /* replace newline with null */

                if ( (pid = fork()) < 0)
                        err_sys("fork error");

                else if (pid == 0) {                /* child */
                        execlp(buf, buf, (char *) 0);
                        err_ret("couldn't execute: %s", buf);
                        exit(127);
                }

                /* parent */
                if ( (pid = waitpid(pid, &status, 0)) < 0)
                        err_sys("waitpid error");
                printf("%% ");
        }
        exit(0);
}

void
sig_int(int signo)
{
        printf("interrupt\n%% ");
}
回复

使用道具 举报

发表于 2004-4-10 23:35:28 | 显示全部楼层
可以调用呀,但不是调用函数,是调用程序
用system(char *program_name)吧,简单点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 13:57 , Processed in 0.052955 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表