输入
echo "/bin/ls
/bin/ls
/bin/ls
/bin/ls " | ./hsh
字符串
输出
仅第一个/bin/ls
我想知道为什么它不执行其他命令?我使用strtok来分割字符串输入,因为我理解echo将输入作为由\n分隔的字符串。
我试着在对每个线程进行标记化后执行,它也给出了相同的输出
#include "O_X.h"
/**
* main - program
* Return: 0 on success, -1 on fail
*/
char **environ;
int main(void)
{
char *buff = NULL, *token = NULL;
int size = 1, kiddo = 0, stat = 0;
char *arg[] = {"" ,NULL};
size_t len = 33;
while (1)
{
size = getline(&buff, &len, stdin);
if (size == -1)
{
free(buff);
exit(0);
}
else if (buff == NULL)
free(buff);
/* else if (buff[size - 1] == '\n')
buff[size - 1] = '\0';*/
token = strtok(buff, "\n");
while (token != NULL)
{
token = strtok(NULL, "\n");
}
kiddo = fork();
if (kiddo == -1)
printf("Process error!\n");
if (kiddo == 0)
{
if (buff[0] != '/')
buff++;
execve(buff, arg, environ);
return (0);
}
else
{
wait(&stat);
}
}
return (0);
}
型
2条答案
按热度按时间fkvaft9z1#
您的问题来自
buff
,它可能在您要运行的程序之前或之后包含额外的空格。strtok
可以用来删除不需要的字符:字符串
brgchamk2#
我解决了问题后,托比的答案,问题是在执行过程中,因为它在主函数返回,过程停止后,第一个命令,并不看别人,我使用单独的功能执行. +马蒂厄提到incerementing buff不去第二个令牌,所以我改变了逻辑