Tag: shell

如何在ps -e中显示proccess

你好! 我想制作简单的c程序,它会像ps -e一样工作。 应该显示的唯一列是PID和CMD。 那是我的代码: #include #include #include #include #include int main() { DIR *dir; struct dirent *entry; if ((dir = opendir(“/proc”)) == NULL) perror(“operation error”); else { printf(“PID CMD\n”); while ((entry = readdir(dir)) != NULL) printf(” %s\n”, entry->d_name); closedir(dir); } return 0; } 我的任务是: 1)我如何只显示带数字的文件夹(我不知道如何实现regcomp())? 2)如何靠近PID写入CMD(如果是带数字的文件夹,我不能用路径粘贴(?)字符串)?

在OSX中崩溃时自动重启程序

可能重复: 如果进程死了,如何编写bash脚本来重启? 我做了一个偶然崩溃的C程序,我无法解决它(getaddrinfo的一些问题,这是一个相当自发的看似)。 我想在崩溃时重启程序。 我觉得这很容易。 我打算用fork分离有问题的libcurl代码,并查看如何从关闭中检测进程,以便可以再次分叉。 但是,我选择了“轻松”选项,尝试重新启动整个程序并从文件中恢复数据。 我试过这个: #!/bin/sh while true; do cd “~/ProgramDir” exec “~/ProgramDir/Program” done 但是当程序退出失败时,如果有意义,它会开始输出下一次执行到终端输入。 所以如果我假装我的程序只是一个Hello World程序,那么它会做这样的事情: bash-3.2$ start.sh Hello World! Hello World! bus error bash-3.2$ Hello World! -bash: Hello: command not found bash-3.2$ Hello World! -bash: Hello: command not found 它不会像以前那样继续该计划。 终端认为程序已退出,但随后将下一次执行的输出作为终端输入。 这样做的正确方法是什么?

如何使用execvp()

用户将读取一行,我将保留第一个单词作为execvp的命令。 让我们说他会输入“cat file.txt” …命令将是cat。 但我不知道如何使用这个execvp() ,我读了一些教程,但仍然没有得到它。 #include #include int main() { char *buf; char command[32]; char name[32]; char *pointer; char line[80]; printf(“>”); while((buf = readline(“”))!=NULL){ if (strcmp(buf,”exit”)==0) break; if(buf[0]!=NULL) add_history(buf); pointer = strtok(buf, ” “); if(pointer != NULL){ strcpy(command, pointer); } pid_t pid; int status; if ((pid = fork()) < 0) { printf("*** ERROR: forking […]

将STDOUT和STDERR重定向到C中的套接字?

我正在尝试将STDOUT和STDERR重定向到套接字。 我做了: if(fork() == 0) { dup2(newsock, STDOUT_FILENO); dup2(newsock, STDERR_FILENO); execvp(); } 不知何故,它只显示了输出的第一个小部分。 例如,当我尝试执行ls或mkdir时,它显示在“mkdir”上。 有什么问题? 我尝试过它可以工作,但我只能重定向STDOUT或STDERR之一 close(1); dup(newsock); 非常感谢。

如何在SYSTEM下运行应用程序?

不使用Windows服务? 可能吗?

在Bash脚本中处理gcc警告和输出

所以我是整个Bash脚本场景的新手,但我正在编写一个脚本来编译目录中的所有.c文件,我已成功通过以下方式完成: for F in *.c; do gcc -c -Wall -o ${F%.c} $F done 一切正常,但我希望输出看起来像: ex1.c Errors ex2.c OK ex3.c Warnings 所以基本上我希望退出状态为0(一切正常)为“Ok”,状态1(警告,但没有错误)为“警告”和状态2(未编译)为“错误”。 我很难搞清楚如何做这样的事情。 我四处搜寻,找不到任何我发现有用的东西。 我很可能忽略了一些东西。 编辑:无论如何要说:如果gcc -Wall file.c有错误,那么只说错误而不是完整的GCCerror handling消息? 与警告和完美的编译相同?

如何将控制台输出重定向到文件?

我是c的新手。 有没有简单的方法使用一些通用命令行\ linkage参数将所有控制台的输出(printfs等)重定向到一个文件(无需修改任何原始代码)? 如果是这样的程序是什么?

使用系统调用fork()的多个管道实现execvp()wait()pipe() – 它根本不起作用

我需要实现处理多个管道命令的shell。 例如,我需要能够处理这个: ls | grep -i cs340 | sort | uniq | cut -c 5 ls | grep -i cs340 | sort | uniq | cut -c 5 ls | grep -i cs340 | sort | uniq | cut -c 5 。 我假设问题是我没有将前一个命令的输出传递给下一个命令的输入。 当我执行我的代码时,它没有给我输出。 我正在使用这个伪代码: for cmd in cmds if there is a next cmd […]

用C语言运行rand()并使用Shell Scripts循环

我有一个C代码文件(调用“ test.c ”,输出是“ test.out ”),如下所示,只是一个简单的随机数输出: int main() { srand(time(NULL)); double r = (double)rand() / (double)RAND_MAX; printf(“%f\n”, r); return 0; } 现在我使用shell脚本在Linux中运行“ test.out ”5次,代码如下: for i in 1 2 3 4 5 do test.out done 但结果如下所示 0.840188 0.840188 0.840188 0.840188 0.840188 它显示相同的随机数。

在C中如何打印在shell中重定向为输入的文件的文件名

$cc ac $./a.out < inpfilename 我想在stdout上打印inpfilename。 我怎么做 ? 我在这里先向您的帮助表示感谢…