Tag: shell

带参数的Termcap

我在C编写类似shell的编码,我想实现行编辑function,我已经实现了它的基础,现在我想实现ctrl + l清除屏幕然后显示提示和我正在处理的行。 我需要使用termcap: ‘cm’用于将光标定位在第l行第c列的字符串。 我的问题是如何将变量l和c传递给termcap?

使用getenv和env不会给出相同的结果:

我有一个C程序打印每个环境变量,其名称由stdin给出。 它打印变量,如$ PATH,$ USER,但它没有看到我在Linux shell中定义的环境变量…例如,在〜.bashrc中我导出了MYTEST = test_is_working,然后我找到了bashrc(源代码) 〜/ .bashrc中)。 我希望程序返回test_is_working与getenv,但事实并非如此。 #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); char* my_env= getenv(“MYTEST”); if(my_env!=NULL){ printf(“my env is : %s \n”, my_env); } else { printf(“can’t find env \n”); } return a.exec(); } 它返回:找不到环境 当我打开终端并输入“env”时,我有MYTEST = test_is_working 我看到了类似的post: 使用getenv函数解决方案是从shell启动程序。 但我不能,因为我在Qtcreator中运行和调试。 我不知道我哪里错了,有人可以向我解释一下吗? 谢谢

C系统函数导致错误’sh:语法错误:“(”意外“

我在Linux上用C编写了一个简单的程序来删除目录中的所有文件,除了一个名为svn的文件,如下所示: 1 #include 2 3 int main() 4 { 5 system(“rm !(svn)”); 6 return 0; 7 } 但是当我编译并运行它时,终端说: sh: Syntax error: “(” unexpected 但是,当我直接在终端中键入并运行命令时,所有操作都正确完成。 有任何想法吗?

帮助简单的linux shell实现

我在c中实现了一个简单版本的linux shell。 我已经成功编写了解析器,但是我在解决子进程时遇到了一些麻烦。 但是,我认为这个问题是由于数组,指针等引起的,因为刚刚用这个项目启动了C,并且我对它们仍然不是很了解。 我收到了分段错误,不知道从哪里来。 任何帮助是极大的赞赏。 #include #include #include #include #include #include #define MAX_COMMAND_LENGTH 250 #define MAX_ARG_LENGTH 250 typedef enum {false, true} bool; typedef struct { char **arg; char *infile; char *outfile; int background; } Command_Info; int parse_cmd(char *cmd_line, Command_Info *cmd_info) { char *arg; char *args[MAX_ARG_LENGTH]; int i = 0; arg = strtok(cmd_line, ” “); […]

execvp实际上做了什么?

可能重复: 编写shell – 如何执行命令 我的任务是在C中编写一个shell。到目前为止,我理解execvp将尝试在arg1中运行arg2作为参数的程序。 现在看来这样做了 execvp (“ls”, args); //assume args is {“ls”, “>”, “awd.txt”} 不等于在控制台中键入它 ls > awd.txt 我意识到我需要使用freopen来实现相同的结果,但我很好奇execvp正在做什么。

为什么Coredump文件不在这里生成?

我在这里有一个情况,几天前我能够在我的目标板上看到核心笨拙的文件,我通过在我的/etc/profile中添加“ulimit -c unlimited”来提供coredump生成支持。但是有人告诉我 这只会对从登录shell启动的程序产生影响,而不会对systemd启动的进程/服务产生影响,等等/限制将是设置这些默认设置的正确位置。 所以我更改了/ etc / limits文件并添加了“ulimit -c unlimited”行。但是现在我看不到Coredumped文件 我正在运行kill -9 $$来生成分段错误,它反过来会像之前那样生成coredump文件。 我们尝试更改“/ proc / sys / kernel / core_pattern”文件并明确地运行ulimit -c unlimited但它也没有运行 我们在哪里做错了?

自定义shell只接受一个参数

所以我有一个shell的代码: #include #include #define MAX_NUM_ARGS 256 #define SIZE 256 void orders(char *command[SIZE]); int main() { char buffer[SIZE]= “”; //char input_args[MAX_NUM_ARGS]; char **input_args = NULL; int i = 0;// counting variable int blah = 0; printf(“Welcome to the AY shell.\n”); while(1){ //initialize array of strings //first free any prevously allocated memory if (input_args != NULL) { […]

管道和工艺管理

我正在研究用C实现的一个小shell(tsh)(它是一个赋值)。 任务的一部分属于PIPING。 我必须将命令的输出传递给另一个命令。 例如: ls -l | sort ls -l | sort 当我运行shell时,我在其上执行的每个命令都由它生成的子进程处理。 孩子完成后,返回结果。 对于管道我想首先实现一个带编码的示例来检查它是如何工作的。 我写了一个部分有效的方法。 问题是当我运行管道命令时,在子进程完成后,整个程序退出它! 显然我没有正确处理子进程信号(下面的方法代码)。 我的问题: 如何使用pipe()进行流程管理? 如果我运行命令ls -l | sort ls -l | sort是否为ls -l和另一个进程sort创建子进程? 从我到目前为止看到的管道示例中,只创建了一个进程(fork())。 当处理第二个命令(从我们的示例中sort )时,我如何获得其进程ID? 编辑:同时运行此代码我得到两次结果。 不知道为什么它会运行两次,那里没有循环。 这是我的代码: pid_t pipeIt(void){ pid_t pid; int pipefd[2]; if(pipe(pipefd)){ unix_error(“pipe”); return -1; } if((pid = fork()) <0){ unix_error("fork"); return -1; } if(pid […]

在C中执行时显示%已完成

我有一个C程序需要5分钟才能执行。 所以我想在执行时是否能够显示完成的百分比或用户的任何类型的交互,因为闪烁的光标有点沉闷。 我正在考虑显示百分比,但我可以在某种程度上擦除,例如,如果任务1结束我放25%然后在任务2结束后25%变为50%? 在一些好的互动欢呼声中给我你的意见!=)

Shell重定向与显式文件处理代码

我不是母语为英语的人,所以请原谅这个问题的尴尬标题。 我只是不知道如何更好地表达它。 我在一个FreeBSD盒子里,我有一个用C编写的小过滤工具,它通过stdin读取数据列表,并通过stdout输出一个处理过的列表。 我有点像这样调用它: find . -type f | myfilter > /tmp/processed.txt find . -type f | myfilter > /tmp/processed.txt find . -type f | myfilter > /tmp/processed.txt 。 现在我想给我的滤镜更多曝光并发布它。 公约说工具应该允许这样的东西: find . -type f | myfilter -f – -o /tmp/processed.text find . -type f | myfilter -f – -o /tmp/processed.text 这将迫使我编写简单不需要的代码,因为shell可以完成这项工作,因此我倾向于将其排除在外。 我的问题是:我是否会错过一些参数(除了惯例之外)为什么文件的读写应该在我的代码中完成而不是委托给shell重定向?