为什么我的代码在没有 chroot 函数的情况下工作,但使用 chroot 函数失败?
Why my code works without chroot function, but fail with chroot function?
我试图让我的代码在chroot('/root/test1')
下工作,但它不能正常工作。
但是当我删除chroot('/root/test1')
,并将execl("/test2", "test2", NULL)
修改为execl("/root/test1/test2", "test2", NULL)
时,它会按预期很好地工作。为什么?
另外,我想问一下,如果我fp
重定向到stdin
,然后使用execl
函数工作另一个程序,子程序将获得输入fp
是否?
'/root/test1/' 中的文件:
test2
test2.cpp
test3
test3.cpp
execl 函数返回的值为 -1,errno 为 2。
测试3.cpp
int main() {
FILE *fp;
errno = 0;
fp = fopen("log.txt", "r");
dup2(fileno(fp), fileno(stdin));
cout << chdir("/root/test1") << endl;
cout << chroot("/root/test1") << endl;
DIR *dir = opendir("/");
dirent *list;
while ((list = readdir(dir)) != NULL) {
cout << list -> d_name << " ";
}
cout << endl;
closedir(dir);
errno = 0;
cout << execl("/test2", "test2", NULL) << endl;
cout << errno << endl;
cout << strerror(errno) << endl;
return 0;
}
测试2.cpp
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a;
scanf("%d",&b);
cout << a+b << endl;
printf("%d",a+b);
return 0;
}
日志.txt
111 222
输出*
0
0
. test3.cpp test3 .. test2 test2.cpp log.txt
-1
2
No such file or directory
将/usr/lib/lib64 和/bin/bash 复制到/root/test1
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 为什么我的代码在没有 chroot 函数的情况下工作,但使用 chroot 函数失败?