c语言 interp函数,C语言execve()函数:执行文件函数

相关函数:fork, execl, execle, execlp, execv, execvp

头文件:#include

定义函数:int execve(const char * filename, char * const argv[], char * const envp[]);

函数说明:execve()用来执行参数filename 字符串所代表的文件路径, 第二个参数系利用数组指针来传递给执行文件, 最后一个参数则为传递给执行文件的新环境变量数组.

返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.

错误代码:

EACCES:

1. 欲执行的文件不具有用户可执行的权限.

2. 欲执行的文件所属的文件系统是以noexec 方式挂上.

3. 欲执行的文件或script 翻译器非一般文件.

EPERM:

1. 进程处于被追送模式, 执行者并不具备root 权限, 欲执行的文件具有SUID 或SGID 位.

2. 欲执行的文件所属的文件系统是以nosuid 方式挂上, 欲执行的文件具有SUID 或SGID 位元, 但执行者并不具有root 权限.

E2BIG 参数数组过大

ENOEXEC 无法判断欲执行文件的执行文件格式, 有可能是格式错误或无法在此平台执行.

EFAULT 参数filename 所指的字符串地址超出可存取空间范围.

ENAMETOOLONG 参数filename 所指的字符串太长.

ENOENT 参数filename 字符串所指定的文件不存在.

ENOMEM 核心内存不足

ENOTDIR 参数filename 字符串所包含的目录路径并非有效目录

EACCES 参数filename 字符串所包含的目录路径无法存取, 权限不足.

ELOOP 过多的符号连接

ETXTBUSY 欲执行的文件已被其他进程打开而且正把数据写入该文件中

EIO I/O 存取错误

ENFILE 已达到系统所允许的打开文件总数.

EMFILE 已达到系统所允许单一进程所能打开的文件总数.

EINVAL 欲执行文件的ELF 执行格式不只一个PT_INTERP 节区

EISDIR ELF 翻译器为一目录

ELIBBAD ELF 翻译器有问题.

范例

#include

main()

{

char * argv[] = {"ls", "-al", "/etc/passwd", (char *)0};

char * envp[] = {"PATH=/bin", 0};

execve("/bin/ls", argv, envp);

}

执行:

-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
interp1函数是matlab中的一种插值函数,主要用于在给定的X数据点集上进行插值。该函数可以通过各种不同的插值方法来实现,如线性插值、二次插值、三次插值等。如果要用C语言来实现matlab中的interp1函数,可以采用以下步骤: 首先,需要定义一个结构体,用于存储所需的数据。该结构体应该包含以下内容: int n; // 数据点个数 double *x; // 数据点的x坐标 double *y; // 数据点的y坐标 int method; // 插值方法(0表示线性插值,1表示二次插值,2表示三次插值) 接下来,需要定义对应的插值函数。根据插值方法的不同,插值函数也有所不同。我们以线性插值为例,定义一个名为interp1_linear的函数,该函数的参数包括原始数据和待插值的坐标点: double interp1_linear(struct interp1_data *data, double xi) { int i; double yi; // 寻找左端点 for (i = 0; i < data->n - 1; i++) { if (xi <= data->x[i+1]) break; } // 线性插值 yi = data->y[i] + (data->y[i+1] - data->y[i]) / (data->x[i+1] - data->x[i]) * (xi - data->x[i]); return yi; } 最后,在主函数中调用插值函数,传入相应的参数,即可实现matlab中interp1函数的功能: struct interp1_data data = {n, x, y, method}; double xi, yi; // 待插值的坐标点 xi = 2.5; // 调用插值函数 yi = interp1_linear(&data, xi); 通过这样的方式,就可以在C语言中实现matlab中interp1函数的功能了。需要注意的是,该程序只实现了线性插值,如果要实现其他插值方法,需要修改插值函数。同时,为了提高程序的效率,也可以采用其他的数据结构和算法来实现插值函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值