【发布时间】:2026-01-14 00:50:02
【问题描述】:
首先请记住,英语是我的第二语言。因此,首先我为语法/听起来很愚蠢而道歉。然而,这是我在 cs 的大三。我的教授给了我们一个作业,我很难理解它的第一部分。让我从发布我挂断的位置开始:
针对 Linux 平台编写一个名为 assignment4.c 的程序(用 C 语言),其执行类似于 shell 管道。示例:
./assignment4 ls : 排序 = # ls |排序
冒号将 argv 分成左(ls)和右(排序)部分。实现将 fork/exec 并设置一个管道:
父级:左侧部分,以 stdout = pipe write end 运行
child:右侧部分,以 stdin = pipe read end 运行•考虑交换父函数和子函数,为什么?
Where:和是指定要运行的程序的可选参数。
**好的,这只是提供一些背景信息。我在我的程序中尝试对我的主要功能进行编程以能够接受这两个参数。此时只需将它们打印回给我。这是我的 MRE:(请记住这是一个 MRE)。
//################ #-for include
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <sys/wait.h>
#include <dirent.h>
//################
int main(int b, char** locations) {
int ok = 0;
while (locations[ok] != NULL) {
printf("%s \n", locations[ok]);
ok++;
} printf("%s \n", locations[1]);
char * working = "/bin/ls"; // command!
//printf("%s \n", working);
char * arg1 = ""; // ls args
char * arg2 = "/home/yev/Desktop/lab 3"; // directory
//execlp( working, arg1, arg2, NULL);
return 0;
}
我目前遇到的问题是 sort = # ls |种类。
每当我尝试 ./A3 sort = # ls |排序控制台似乎试图运行排序命令?甚至试图获取论点"sort = # ls | sort" 也打败了我的观点,因为它也不会将该文本字符串输出给我。
请帮忙。再一次让我有时很难理解,这甚至是一个合法的命令吗?简单地运行:"sort = # ls | sort" 在控制台中给出错误:"sort: cannot read: '=': No such file or directory"
这只是我的误解吗?或者是否有原因导致该命令不起作用或为什么我的迷你脚本无法捕获该行并将其打印回给我?教授可能有不同的意思吗?还是我的操作员错误?
【问题讨论】:
-
使用引号
"..." -
对“空白空白”使用引号?这对它有用吗?
-
在我看来这违反了书面说明
-
我还没有读完你的问题,但是,你的错误似乎是因为 shell 没有将你的参数发送给程序,因为它们恰好是 shell 运算符。在这种情况下,将参数包含在
"..."中是正确的做法。当然,我可能对您的错误来源有误。 -
@itsMe "violates wirte-up instructions" ,不,但是你会通过发送
ls : sort = # ls | sort而违反shell规则引号。