比方说,我有两个程序--input.c&output.c我想做的就是使用execl()函数将一些"半金字塔"格式的有效载荷/字符发送到另一个.
Input.c中
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define SIZE 1024
int length;
int main(int argc, char *argv[])
{
pid_t pid;
char *target;
//char payload[length+1];
char payload[SIZE + 1];
int status;
int i = 0;
if(argc < 2)
{
printf("Usage %s <length> <target>\n", argv[0]);
exit(EXIT_FAILURE);
}
length = atoi(argv[1]);
target = argv[2];
while(i < length)
{
pid = fork();
if(pid != 0)
{
waitpid(-1, &status, 0);
//exit(0);
}
if(pid == 0)
{
payload[i] = 'A';
payload[i …
Run Code Online (Sandbox Code Playgroud) 在bash中,当我输入ls
并按下回车键时,二进制文件ls
将运行,我将再次返回shell提示符而不从我这边做任何事情.
但是这个用C编写的程序会阻止:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t other = fork();
// other will be 0 for the child process
// other will be the childs process' value in the parent process.
switch(other) {
case 0:
printf("%s %i\n", "I am the child process!", other);
execl("/bin/ls","ls",NULL);
return 0;
default:
printf("%s %i\n", "I am the parent process!", other);
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么?
输出如下:
Korays-MacBook-Pro:~ koraytugay$ ./a.out
I am the parent process! 40309
I …
Run Code Online (Sandbox Code Playgroud) 我想知道如何在C中替换变量的值.
execl ("/bin/cat","cat","/proc/30828/status", (char *)0 );
Run Code Online (Sandbox Code Playgroud)
我希望能够将"30828"更改为变量,因为此值不固定.我想知道是否可以在SHELL中做一些你能做到的事情.例如在shell中你可以这样做:
K=`ls -lis $i`
echo $K
Run Code Online (Sandbox Code Playgroud) 有什么场合更适合使用execl
而不是execlp
?我认为当一个程序位于两个不同的文件夹中时,使用execlp
可能会导致混乱,但我不知道这是否是唯一的情况。我问这个问题是因为人们可能会认为写作execlp("ls", ...)
比写作更容易execl("/bin/ls", ...)
。
void main(int argc,char *argv[])
{
for (int i = 0; i < argc; i++)
{
printf("%s ", argv[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
./test 1 2 3
当我在终端中使用命令来执行这个程序时,我得到了结果./test 1 2 3
,但是当我execl("/usr/src/test", "1", "2", "3", NULL)
在另一个程序中使用函数时,我得到了结果
1 2 3
,为什么?
我有一个小问题:
{
printf ("abc");
execl("./prog","prog",NULL);
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但为什么execl
之前只运行printf
?有人能帮助我吗?
我正在用指令启动一个进程
execl("./softCopia","softCopia",NULL);
Run Code Online (Sandbox Code Playgroud)
softCopia只是一个在文件中写入整数的虚拟对象.
我想知道如何获得这个过程的pid?
这个程序叫做program.c
. 当我运行时./program echo test
,我希望程序打印test
,即使命令是在子shell中运行的。为什么输出是空行?它与文件路径有关吗?当我尝试时,./program /bin/echo test
我仍然得到一个空行输出。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int function(char **argv) {
execl("/bin/bash", "sh", "-c", *argv, argv, (char*)NULL);
}
int main(int argc, char **argv) {
int return2;
function(argv + 1);
}
Run Code Online (Sandbox Code Playgroud) 希望一切顺利...我正在尝试编写在 C 语言的 execl 中使用 execl 的代码,但是当我放置文件目录时它不起作用。代码是:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main(int argc,char* argv[]){
int n,m,x;
n=fork();
if(n==0){
execl("/bin/rm","rm /home/mazenas/Desktop/folder/","f.txt",NULL);
}
else{
wait(&m);
printf("end of Programm\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
帮帮我吧!
我试图在C程序中执行此execl命令,它根本不起作用.
execl("~/Desktop/taskc/validating/analyzer/numbers_analyzer", "numbers_analyzer", (char*)NULL);
bash: syntax error near unexpected token `"~/Desktop/taskc/validating/analyzer/numbers_analyzer",
Run Code Online (Sandbox Code Playgroud)
我还尝试了一些我在互联网上找到的验证示例,但它们也不起作用.(我总是得到同样的错误)
execl( "/bin/ls", "/bin/ls", argv[1], NULL );
bash: syntax error near unexpected token `"/bin/ls",'
execl("/bin/date", "date", 0, 0);
bash: syntax error near unexpected token `"/bin/date",'
Run Code Online (Sandbox Code Playgroud)
感谢致敬.