c - 如何正确使用execl?

标签 c exec fork os.execl

我试图使用以下代码将 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 终端手动终止程序。我认为语法可能是错误的,我需要的只是添加另一个参数,但似乎没有任何效果。

最佳答案

正如所写,您的代码执行 /bin/cat ,其名称 (argv[0]) 为:

cat /dev/cu.usbmodem1421 - 9600 >> data.txt

并且没有其他参数,因此它从标准输入读取并写入其标准输出,并一直等待,直到检测到标准输入上的 EOF(或者您杀死它)。

最简单的选项是使用 system() 运行命令。

如果做不到这一点,您需要将字符串拆分为单独的参数,并在子进程中处理 I/O 重定向。请注意,代码将从 3 个文件中读取:

/dev/cu.usbmodem1421
-
9600

第二个将再次被解释为标准输入。如果 9600 意味着调制解调器速度或其他什么,cat 是错误的命令。

关于c - 如何正确使用execl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078529/

相关文章:

c - 如何在没有 * 或 - 运算符的情况下否定 C 中的正整数?

php - 延迟 20 秒运行第二个 php 文件

C: fork 新进程失败

c - AVL 树未正确平衡

c++ - "Segmentation fault"与 "run time"错误?

c - 宏观守卫

java - 如何使用Java执行

Python eval 在函数内部不起作用

c - 为什么数组不能通过使用 fork() 函数来工作?

c - 将长值从 fork 进程传递给其父进程