|
|
发表于 2006-12-14 20:39:44
|
显示全部楼层
真是不好意思,我从来没有在 minicom 中上传或下载过文件,都是用网线的
刚才看了一下 minicom 的代码,minicom 发送文件是是由 updown.c 中的 updown() 函数完成的,大体上来说,它在这里 fork 成了两个进程,父进程也就是我们能够看到的那个监视进程,而子进程则负责发送文件,其代码如下:- switch (udpid = fork()) {
- case 0: /* Child */
- if (P_PIORED(g) == 'Y') {
- dup2(portfd, 0);
- dup2(portfd, 1);
- }
- if (win) {
- dup2(pipefd[1], 2);
- close(pipefd[0]);
- if (pipefd[1] != 2)
- close(pipefd[1]);
- }
- for (n = 1; n < _NSIG; n++)
- signal(n, SIG_DFL);
- set_privs();
- setgid((gid_t)real_gid);
- setuid((uid_t)real_uid);
- fastexec(translate(cmdline));
- exit(1);
- }
复制代码 fastexec() 是在 util.c 中实现,它主要就是调用 execl 来调用 外部指令,比如 ascii-xfr,来传送文件,没有什么特殊的。
关键在于子进程中对于 portfd 的重定向,这里我没有细看其它相关的代码,只能猜测一下:子进程中的 portfd 被分别重定向到标准输入与输出,而父进程中某处可能对 portfd 进行重定向,使之与串口的输入与输出分别相连,于是 ascii-xfr 的输出最终得以输出到串口。这样说应该是讲得通的,楼主如果有兴趣可以进一步看看代码。
P.S. 我似乎没有楼主大,叫我小弟就好了 |
|