0

下面给出的代码(process1)类似于actaul scanrio。我global_data使用 process1 的进程 ID 从另一个应用程序更新。

因为getchar()在process1中,当我运行这个进程时,

$ ./process1 &

显示以下信息。

[1]+ Stopped (tty input) ./process1

我无法删除getchar()。那么如何运行这两个应用程序。

注意:尝试了 telnet/ssh 选项。如果我通过 telnet 连接,那么只有那个 telnet 窗口处于活动状态。最多我只能通过一个终端工作。

#include <stdio.h>    
volatile int global_data = 0;

int main()
{

FILE *fp = NULL;
int data = 0;    
printf("\n Address of global_data:%x \n", &global_data);

        while(1)
        {
              if(global_data == 0)
                {
                getchar();
                continue;
                }
                else if(global_data == 2)
                {
                        fp = fopen("JeyTest.txt", "w+");
                        if(fp == NULL)
                        {
                           printf("\n Error in file creation..... \n");
                                break;
                        }

                        for(data = 0; data < 1000; data++)
                        {
                            fprintf(fp, "%d\n", data);
                        }

                        fclose(fp);
                        break;
                }
        }    

return 0;
}
4

2 回答 2

0

试图从标准输入读取的后台进程被挂起(显然)。所以首先,弄清楚为什么你想从标准输入中读取 - 这可以避免 - 通过说命令行参数 - 如果是这样,那么你应该这样做。在这种情况下,从您的代码来看,您似乎想等到 volatile 变量更新 - 您不想连续检查。如果是这种情况,请使用sleep.

否则,您必须通过以下方式解决此问题

  • 从文件重定向标准输入。

或者

于 2013-04-17T06:30:36.447 回答
0

使用要引入流程的数据创建一个文本文件,并重定向输入:

$ ./process1 < file_with_data &

此模式避免停止进程,因为标准输入将从文件中获取。输入文件必须有足够的数据来处理请求。

于 2013-04-17T06:36:55.510 回答