我想编写一个程序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函数,我哪里出错了?
这是我在设备上安装应用程序时看到的内容(我使用的是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运行正常.
这是问题:这个程序应该从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) 我有一个具有以下结构的文件:
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
循环地狱!); 有没有办法找到第一列重复,加上第二列值并重写删除重复的行并打印第二列的结果总和?
如果我在终端上键入八度音,然后:
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位