我试图使用下一个代码将arduino(USB)的输出重定向到计算机上的某个文件:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int main()
{
pid_t pid;
pid = fork();
if (pid == 0) {
execl("/bin/cat","cat /dev/cu.usbmodem1421 - 9600 >> data.txt",NULL);
}
printf("Cuando desee terminar la recolección de datos presione cualquier tecla: ");
getchar();
kill(pid, SIGKILL);
return 0;
}
使用ps来验证一切是否正常,我可以看到在我的主程序后面运行的进程。停止程序后,数据文件中没有任何内容。我试图使用system()这有点讨厌,因为我需要使用OSX终端手动终止程序。我想也许结构是错误的,我需要的是添加另一个参数,但似乎没有任何工作。
答案 0 :(得分:0)
好像你正在做fork/execl
做一些你可以用简单的文件I / O做的事情。
那就是说... execl语法是,你分别传递每个参数,然后是空指针。所以,这样的事情(从字面上理解你的命令......):
execl("/bin/cat", "/dev/cu.usbmodem1421", "-", "9600", ">>", "data.txt", (char *) NULL);
答案 1 :(得分:0)
如上所述,您的代码使用以下名称(argv [0])执行/bin/cat
:
cat /dev/cu.usbmodem1421 - 9600 >> data.txt
并且没有其他参数,因此它从其标准输入读取并写入其标准输出并且一直存在,直到它在其标准输入上检测到EOF(或者你杀死它)。
最简单的选择是使用system()
来运行命令。
如果失败,您需要将字符串拆分为单独的参数,并处理子进程中的I / O重定向。请注意,代码将从3个文件中读取:
/dev/cu.usbmodem1421
-
9600
第二个将再次被解释为标准输入。如果9600是调制解调器速度或其他什么,cat
是错误的命令。