小编elm*_*zun的帖子

C - 使用Execvp执行Bash命令

我想编写一个程序Shellcode.c,它在输入中接受一个文本文件,其中包含由换行符分隔的bash命令,并执行文本文件中的每个命令:例如,文本文件将包含:

echo Hello World
mkdir goofy   
ls
Run Code Online (Sandbox Code Playgroud)

我试过这个(只是开始练习一个exec函数):

#include <stdio.h>
#include <unistd.h>

void main() {
    char *name[3];

    name[0] = "echo";
    name[1] = "Hello World";
    name[2] = NULL;
    execvp("/bin/sh", name);
}
Run Code Online (Sandbox Code Playgroud)

作为回报,我得到了

echo: Can't open Hello World
Run Code Online (Sandbox Code Playgroud)

我坚持使用execvp函数,我哪里出错了?

c bash execvp

8
推荐指数
3
解决办法
3万
查看次数

无法在rooted设备上安装软件包:INSTALL_FAILED_INVALID_URI

这是我在设备上安装应用程序时看到的内容(我使用的是Android Studio 0.8.2):

Waiting for device.
Target device: samsung-gt_s7500-cf994b04
Uploading file
local path: C:\Users\Administrator\AndroidStudioProjects\Testaqua\app\build\outputs\apk\app-debug.apk
remote path: /data/local/tmp/com.example.administrator.testaqua
Installing com.example.administrator.testaqua
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.administrator.testaqua"
pkg: /data/local/tmp/com.example.administrator.testaqua
Failure [INSTALL_FAILED_INVALID_URI]
Run Code Online (Sandbox Code Playgroud)

七个地狱中的错误是什么意思?

[编辑]我在另一个root设备上安装了我的应用程序,它运行良好; 看来问题是我的设备,android studio运行正常.

android android-studio

8
推荐指数
2
解决办法
2万
查看次数

信号处理程序不会看到全局变量

这是问题:这个程序应该从stdin接收输入并计算插入的字节数; SIGUSR1信号将停止主程序并在文件标准错误上打印当我发送SIGUSR1时已经复制了多少字节.

这就是我老师要我这样做的方式:在一种终端类型中

cat /dev/zero | ./cpinout | cat >/dev/null
Run Code Online (Sandbox Code Playgroud)

而从第二个终端发送信号

kill -USR1 xxxx
Run Code Online (Sandbox Code Playgroud)

其中xxxx是cpinout的pid.

我更新了以前的代码:

/* cpinout.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

#define BUF_SIZE 1024   

volatile sig_atomic_t countbyte = 0;
volatile sig_atomic_t sigcount = 0;

/* my_handler: gestore di signal */
static void sighandler(int signum) {
    if(sigcount != 0)
        fprintf(stderr, "Interrupted after %d byte.\n", sigcount);
    sigcount = contabyte;
}

int main(void) {

    int c;
    char buffer[BUF_SIZE];
    struct sigaction action;

    sigemptyset(&action.sa_mask);
    action.sa_flags = 0; …
Run Code Online (Sandbox Code Playgroud)

c scope signals signal-handling

5
推荐指数
1
解决办法
3327
查看次数

使用awk对重复的行值求和

我有一个具有以下结构的文件:

1486113768 3656
1486113768 6280
1486113769 530912
1486113769 5629824
1486113770 5122176
1486113772 3565920
1486113772 530912
1486113773 9229920
1486113774 4020960
1486113774 4547928
Run Code Online (Sandbox Code Playgroud)

我的目标是摆脱第一列中的重复值,将第二列中的值相加并使用新列值更新行:来自上面输入的工作输出将是:

1486113768 9936      # 3656 + 6280
1486113769 6160736   # 530912 + 5629824
1486113770 5122176   # ...
1486113772 4096832
1486113773 9229920
1486113774 8568888
Run Code Online (Sandbox Code Playgroud)

我知道cut,uniq到目前为止,我设法在第一列中找到重复值:

cut -d " " -f 1 file.log | uniq -d

1486113768
1486113769
1486113772
1486113774
Run Code Online (Sandbox Code Playgroud)

有没有"awk方式"来实现我的目标?我知道它是非常强大和简洁的工具:我之前使用它

awk '{print $2 " " $3 >> $1".log"}' log.txt
Run Code Online (Sandbox Code Playgroud)

扫描log.txt中的所有行并创建一个名为$ 1的.log文件,并用$ 2和$ 3值填充它们,所有这些都在一个bash行中(以read循环地狱!); 有没有办法找到第一列重复,加上第二列值并重写删除重复的行并打印第二列的结果总和?

bash awk

4
推荐指数
2
解决办法
3022
查看次数

Octave不会从外部文件绘图

如果我在终端上键入八度音,然后:

x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);
Run Code Online (Sandbox Code Playgroud)

图形正确显示了图表.这就是我尝试过的:我创建了一个名为gettingStarted.m的文本文件,在其中我在其中写了三行,以便用Octave执行这个文件.我输入octave gettingStarted.m但是没有出现情节.如果使用Octave运行外部文件,是否不绘制工作?

我正在研究Ubuntu 12.04,32位

plot octave

3
推荐指数
1
解决办法
1488
查看次数

标签 统计

bash ×2

c ×2

android ×1

android-studio ×1

awk ×1

execvp ×1

octave ×1

plot ×1

scope ×1

signal-handling ×1

signals ×1