exec函数族

exec函数族

让父子进程执行不相干的操作

能够替换进程地址空间中的源代码.txt段

当前程序中调用另外一个应用程序

是否需要exec函数族判断: 首先考虑exec之前需要fork

返回值: (1) 如果函数执行成功, 不返回; (2) 执行失败, 打印错误信息, 退出当前进程

头文件: #include <unistd.h>

系统环境变量: extern char **environ;

执行指定目录下的程序

int execl(const char *path, const char *arg, ...); 常用
一般执行自己写的程序
参数:
  path: 要执行的程序的绝对路径
  变参args: 要执行的程序的需要的参数
    第一arg: 占位, 任意, 不能为空, 一般写执行程序名
    后边的arg: 命令的参数
    参数写完之后: NULL

execl("/home/robin/a.out", "a.out", NULL);

int execv(const char *path, char *const argv[]);
参数:

char* argv[] = {"a.out", NULL};
execv("/home/robin/a.out", argv);

执行PATH环境变量能够搜索到的程序

int execlp(const char *file, const char *arg, ...); 常用
执行系统自带的程序, 即不需用绝对路径
参数:
  file: 执行的命令的名字
  变参arg:
    第一arg: 占位
    后边的arg: 命令的参数
    参数写完之后: NULL
    execpl执行自定义的程序: file参数绝对路径
示例

execlp("ls", "ls", "-la", NULL);

int execvp(const char *file, char *const argv[]);
示例

char* arg[] = {"ls", "-a", "-l", NULL};
execvp("ls", arg);

执行指定路径, 指定环境变量下的程序

int execle(const char *path, const char *arg, ..., char * const envp[]);
从用户指定的目录中搜索指定的命令
参数:
  path: 执行的程序的绝对路径
  arg: 执行的程序的参数
  envp: 用户自己指定的搜索目录, 代替PATH
示例

char* env[] = {"/bin", "./", "/home/robin", NULL};  // 自己指定环境变量,对应PATH
execle("/bin/ls", "ls", "-l", "-a", NULL, env);

int execve(const char *filename, char *const argv[], char *const envp[]);
示例

char* argv[] = {"ps", "a", "u", "x", NULL};
char* env[] = {"/bin", "/home/", "./", NULL};
execve("/bin/ps", argv, env);

实例程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char *argv[]) {
    pid_t pid;

    pid = fork();
    if(pid == -1) {
        perror("fork");
        exit(1);
    }

    if(pid == 0) {
        // 子进程执行另外一个程序
#if 0
// ++++++++++++++++++++ execl ++++++++++++++++++++
/*
 * int execl(const char *path, const char *arg, ...);
        函数描述:加载一个进程,通过路径 + 程序名来加载。
        函数参数:
            path:程序路径+程序名字
            arg:可执行程序的相关参数,使用NULL结尾
        返回值:
            成功:无返回
            失败:-1
 */
        // 子进程执行指定目录下的自己编写的程序,该程序参数
        printf("this is func +++++++++ execl +++++++++\n");
        execl("/home/robin/a.out", "a.out", NULL);
        // 如果执行成功没有返回值
        perror("execl");
        exit(1);
#endif

#if 0
// ++++++++++++++++++++ execlp ++++++++++++++++++++
/*
 * int execlp(const char *file, const char *arg, ...);
        函数描述:加载一个进程,借助PATH环境变量,该函数需要配合PATH环境变量来使用,
                          当PATH中所有目录搜索后没有参数1则出错返回
        函数参数:可执行程序的相关参数,使用NULL结尾
            file:可执行程序的名字
            arg:可执行程序的相关参数,使用NULL结尾
        返回值:
            成功:无返回
            失败:-1
 */
        printf("this is func +++++++++ execlp +++++++++\n");
        execlp("ls", "ls", "-la", NULL);
        // 如果执行成功没有返回值
        perror("execlp");
        exit(1);
#endif

#if 0
// ++++++++++++++++++++ execvp ++++++++++++++++++++
/*
 * int execvp(const char *file, char *const argv[]);
        用法同 execlp
 */
        printf("this is func +++++++++ execvp +++++++++\n");
        char* arg[] = {"ls", "-a", "-l", NULL};
        execvp("ls", arg);
        // 如果执行成功没有返回值
        perror("execvp");
        exit(1);
#endif

#if 0
// ++++++++++++++++++++ execle ++++++++++++++++++++
/*
 *   int execle(const char *path, const char *arg, ..., char *const envp[]);
 *      从用户指定的目录中搜索指定的命令
 */
        printf("this is func +++++++++ execle +++++++++\n");
        char* env[] = {"/bin", "./", "/home/robin", NULL};  // 自己指定环境变量,对应PATH
        execle("/bin/ls", "ls", "-l", "-a", NULL, env);
        // 如果执行成功没有返回值
        perror("execle");
        exit(1);
#endif

#if 0
// ++++++++++++++++++++ execv ++++++++++++++++++++
/*
 *  int execv(const char *path, char *const argv[]);
 *      用法同:execl
 */
        printf("this is func +++++++++ execve +++++++++\n");
        char* argv[] = {"a.out", NULL};
        execv("/home/robin/a.out", argv);
        // 如果执行成功没有返回值
        perror("execv");
        exit(1);
#endif

#if 1
// ++++++++++++++++++++ execve ++++++++++++++++++++
/*
 *  int execve(const char *path, char *const argv[], char *const envp[]);
 */
        printf("this is func +++++++++ execve +++++++++\n");
        char* argv[] = {"ps", "a", "u", "x", NULL};
        char* env[] = {"/bin", "/home/", "./", NULL};
        execve("/bin/ps", argv, env);
        // 如果执行成功没有返回值
        perror("execve");
        exit(1);
#endif
    }

    else if(pid > 0)
        printf("parent process +++++++++++++++++++\n");
    printf("*****************************\n");

    return 0;
}

转载于:https://www.cnblogs.com/hesper/p/10738826.html

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值