- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将用户输入的预定义大小的数组发送到 execvp 函数,但是我收到了来自编译器的警告。stackoverflow 需要一定比例的文本代码,所以我只是想填写它以便我可以提交我的帖子。不要费心阅读本文,只需查看下面的代码即可。预先感谢您!!!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define INPUTSIZE 50
#define INPUTCOUNT 10
int parseInput(char string[*][INPUTSIZE]);
void main(int argc, char **argv){
char prompt = '#', shellInput[INPUTCOUNT][INPUTSIZE];
pthread_t thread;
pid_t processID;
int rc;
while(1){
printf("%c", prompt);
if(parseInput(shellInput)==EOF){
exit(EXIT_SUCCESS);
}
processID = fork();
if(processID == 0){
execvp(shellInput[0], shellInput);
printf("Uknown command\n");
}
printf("Nope.gif!\n");
fflush(stdout);
}
}
int parseInput(char string[INPUTCOUNT][INPUTSIZE]){
char *inputString, *tempString;
int i, status;
size_t bytecount = INPUTSIZE+1;
inputString = (char *)malloc(INPUTCOUNT*INPUTSIZE);
tempString = (char *)malloc(INPUTSIZE);
status = getline(&inputString, &bytecount, stdin);
tempString = strtok(inputString, " ");
for(i = 0; i < INPUTCOUNT && tempString != NULL; i++){
strncpy(string[i], tempString, INPUTSIZE);
tempString = strtok(NULL, " \n\r");
}
strncpy(string[i], "NULL", sizeof(NULL));
return status;
}
最佳答案
给定
char shellInput[INPUTCOUNT][INPUTSIZE];
变量shellInput
的类型是“INPUTCOUNT
数组的INPUTSIZE
char
数组”。在大多数情况下,shellInput
会自动转换为类型“指向 INPUTSIZE
char
数组的指针”(char (*)[INPUTSIZE ]
)。这与“指向 char
的指针数组”((char *)[]
) 完全不同,后者是 的第二个参数所需的类型>execvp()
.
(从技术上讲,execvp()
实际上被声明为接受一个 const
数组(非 const
指针),但它是可以接受的传递一个非常量。)
看起来你想要更多类似这样的东西:
char *shellInput[INPUTCOUNT + 1];
/* ... */
int parseInput(char *string[]) {
char *line = NULL;
size_t line_len;
ssize_t n_read = getline(&line, &line_len, stdin);
char *token;
int input_count = 0;
if (n_read < 0) {
return n_read;
}
for (token = strtok(line, " "); token && (input_count < INPUTCOUNT);
token = strtok(NULL, " ")) {
string[input_count++] = strdup(token);
}
string[input_count] = NULL;
free(line);
return n_read;
}
还要注意,父进程需要在每次 fork( )
。此外,请注意,没有什么特殊原因可以使 shellInput
具有类型 char **
,并教 parseInput()
安排为任意数量的命令行单词动态分配足够的空间。
关于c - execvp(array[i], array) 其中 array[NUMBER][NUMBER] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284178/
POSIX 系统公开了一系列 exec 函数,这些函数允许将可能不同的东西加载到当前进程中,保持打开的文件描述符、进程标识符等。 这可以出于多种原因完成,在我的例子中,这是自举——我想更改我自己进程的
我有一个用 c 编写的程序,它使用 execvpe(3) 函数,并且我设置了一行以包含必需的头文件: #include 我使用以下命令编译此文件... gcc foo.c -o foo ...仅收到
我在 C 中有一个函数,它创建一个子进程并使其运行 execvp。 int Execute(char **arg) { pid_t pid; int status; if ((
我正在使用 C 编写一个非常基本的 UNIX shell。在这个项目中,我试图使用 fork() 和 execvp() 来执行实际的 shell命令。我遇到了一个问题,它似乎可以很好地处理具有单个参数
我无法获得使用 execvp 调用的程序的完整输出。在这里,我基本上是在尝试用一个可以过滤输入和输出的程序来包装任何程序: #define BUF_SIZ 8192 int main(int argc
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试用 c 语言创建一个 shell,当前正在尝试 ls 命令,但子进程总是返回 execvp 无法工作。这是函数。首先,我使用 exec 获取我所在的路径和从 stdin 获取的命令,这就是为
我正在开发这个程序,使用系统调用 execvp() 和 fork() 来运行通过命令行参数给出的 shell 命令。这里 arglist 是一个二维数组,其中包含命令名称及其参数列表。我将命令名称作为
我尝试使用 execvp 创建一个作为参数给出的存储库。但我遇到了一些无法在以下代码中解决的段错误(核心转储): #include //mkdir #include #include //p
我正在尝试使用 execvp 对文件进行排序,这是我的代码。 char *argv1[]={ "sh", "-c", "sort input.txt > output.txt", NULL }; 问题
我正在c中测试execvpe(),我尝试了下面的代码,这导致错误“函数‘execvpe’的隐式声明在C99 [-Wimplicit-function-declaration]中无效”。 #includ
我有以下代码: int main(int argc, char *argv[]) { int i, a=9; int length = 0; c
我正在使用 execvp() 运行一些系统调用。程序对于有效命令非常有效,对于任何不存在的命令则失败,这是完美的。该程序是,当我在需要额外参数(如 cat)的命令上使用 execvp() 并且我不提供
用户将读取一行,我将保留第一个单词作为 execvp 的命令。 假设他将输入“cat file.txt” ...命令将为 cat 。但我不知道如何使用这个execvp(),我读了一些教程但仍然没有明白
我正在用 C 编程编写一个正在运行的 shell 脚本。我读过有关 exec 函数的内容,虽然不太了解,但我读过一个像这样使用 execvp 的示例 execvp(*argv, argv) ; /*
这是我的输入函数: int i,j,n,len,c; char *buffer = 0; size_t bufsize = 0; ssize_t characters;
我正在尝试编写一个程序,该程序将 fork ,然后打开一个文件并执行它。它应该执行的文件称为子文件,并且它已经被编译。当我输入 ./child 时,它就会运行。但是,当我运行该程序时,它不会执行子程序
所以我有一个 C 程序,它接受命令输入,但偶尔我似乎会遇到某种内存错误。 我如何读取输入: static void parseLine(char* commandLine, Sequence* seq
我尝试在终端中传递命令行参数“ls -l/user/myuser”并在主目录中执行 execvp。 但不知何故,当我调试代码时,它给了我这个错误。 int main(int argc, char *a
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是一名优秀的程序员,十分优秀!