-3
試過每種終止程序的方法,但它沒有奏效。嘗試了ASCII選項,其中120 = x並且還單獨嘗試了'x'來退出,但它似乎不起作用。此外還有非規範的方式。我不確定這是否是我編寫代碼的方式。我的程序沒有運行,我希望它運行。目的是讓子進程先顯示時鐘然後顯示鬧鐘,然後倒計時直到完成。 'x'將終止程序,或者當倒數完成並且鬧鈴響起時。按「x」將終止程序
$
void CMode (void){
tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
}
//CanonicalMode and NonCanonicalMode
void NMode (void)
{
struct termios tattr;
tcgetattr (STDIN_FILENO, &saved_attributes);
atexit (CMode);
tcgetattr (STDIN_FILENO, &tattr);
tattr.c_lflag &= ~(ICANON|ECHO);
tattr.c_cc[VMIN] = 1;
tattr.c_cc[VTIME] = 0;
tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
}
void xfunc(char c)
{
while(TRUE)
{
read(STDIN_FILENO,&c,1);
if (c == 'x')
break;
else
putchar(c);
}
}
int main(int argc, char *argv[]) //argc: # of args passed, argv: vector array of each arg passed
{
char userInput;
if (pipe(fd) == -1) //create pipe & error check
exit(1);
if(argc==2)
{
ct = atoi(argv[1]);
}
else if(argc==4)
{
h = atoi(argv[1]);
m = atoi(argv[2]);
s = atoi(argv[3]);
}
else if(argc==5)
{
h = atoi(argv[1]);
m = atoi(argv[2]);
s = atoi(argv[3]);
ct = atoi(argv[4]);
}
if((child_one = fork()) == -1)
{
perror("fork failed");
exit(1);
}
else if(child_one > 0)
{
fc_clock();
exit(1);
}
if ((child_two = fork()) == -1)
{
perror("fork failed");
exit(1);
}
else if(child_two > 0)
{
sc_alarm(1);
exit(1);
}
if ((child_three = fork()) == -1)
{
perror("fork failed");
exit(1);
}
else if(child_three > 0)
{
tc_count(1);
exit(1);
}
NMode();
xfunc(userInput);
return 0;
}
你可以給你多一點信息,你正在試圖做什麼?比如,你在等待用戶按「x」的位置? –
這聽起來不像一個問題,但更像是寫我的代碼請求。你應該首先閱讀如何問問指南[這裏](http://stackoverflow.com/help/how-to-ask)。請只發布代碼的相關部分,並且@Shiva已經說過,告訴我們你想做什麼以及你已經嘗試過什麼。另外,爲什麼它不起作用?你不能讀取一個字符(你的案例中是'x')還是你無法檢測到它是'x'? – mame98
@Shiva用戶按下x的地方並不重要。但只要按下「x」,程序就完全終止 –