当前位置: 技术问答>linux和unix
关于sco unix下的curses编程问题:急,,,谁能教教我????
来源: 互联网 发布时间:2014-12-14
本文导语: 在sco unix下curses编程,如何实现在当前主画面区能腾出一块区域,专门实现一个时间显示的功能,我们做的任何操作都只是对主画面而言,但我又必须由主画面给一个信号让时间显示的那个进程能收到。 我试...
在sco unix下curses编程,如何实现在当前主画面区能腾出一块区域,专门实现一个时间显示的功能,我们做的任何操作都只是对主画面而言,但我又必须由主画面给一个信号让时间显示的那个进程能收到。
我试着时间显示的模块作为主画面的一个子进程,应该可以,但我没有试成功,各位给点建议。
另外,在curses编程里如何让闪烁的光标消失??
谢谢
我试着时间显示的模块作为主画面的一个子进程,应该可以,但我没有试成功,各位给点建议。
另外,在curses编程里如何让闪烁的光标消失??
谢谢
|
1、可以用newwin 开一个子窗口,正常运行时焦点在主窗口,然后设置一个alarm,定时调用子窗口显示当前时间。
2、attrset( A_BLINK );
2、attrset( A_BLINK );
|
你这里现在的问题应该是进程通信。
你这个要求用个最简单的pipe就可以了。父进程里写,子程序里用select检测,如果有父进程发来的信号就开始变化时间,否则就等待。
父子进程各自操作自己的窗口,不要把哪个作为另一个的subwindow。
如果想做得更好,可以用共享内存来通信。
pipe的用法如下:
/*****************************************************************************
Excerpt from "Linux Programmer's Guide - Chapter 6"
(C)opyright 1994-1995, Scott Burkett
*****************************************************************************
MODULE: pipe.c
*****************************************************************************/
#include
#include
#include
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
{
/* Child process closes up input side of pipe */
close(fd[0]);
/* Send "string" through the output side of pipe */
write(fd[1], string, (strlen(string)+1));
exit(0);
}
else
{
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
select的用法如下:
//Filename:TimeOut.c
//Designed by ZhouLifa From Computer Application Research Institution, South China University of Technology.
//Date:Aug 15, 2001
//Any bug please contact me at zhoulifa@yahoo.com
#include "TimeOut.h"
int TimeOut( int sock, int t ) {//把子进程的fd[1]当作sock传递过来,自己指定一个比较大的时间t即可了
fd_set readfds;
struct timeval tv;
tv.tv_sec = t;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
if((select(sock + 1, &readfds, NULL, NULL, &tv))
你这个要求用个最简单的pipe就可以了。父进程里写,子程序里用select检测,如果有父进程发来的信号就开始变化时间,否则就等待。
父子进程各自操作自己的窗口,不要把哪个作为另一个的subwindow。
如果想做得更好,可以用共享内存来通信。
pipe的用法如下:
/*****************************************************************************
Excerpt from "Linux Programmer's Guide - Chapter 6"
(C)opyright 1994-1995, Scott Burkett
*****************************************************************************
MODULE: pipe.c
*****************************************************************************/
#include
#include
#include
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
{
/* Child process closes up input side of pipe */
close(fd[0]);
/* Send "string" through the output side of pipe */
write(fd[1], string, (strlen(string)+1));
exit(0);
}
else
{
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
select的用法如下:
//Filename:TimeOut.c
//Designed by ZhouLifa From Computer Application Research Institution, South China University of Technology.
//Date:Aug 15, 2001
//Any bug please contact me at zhoulifa@yahoo.com
#include "TimeOut.h"
int TimeOut( int sock, int t ) {//把子进程的fd[1]当作sock传递过来,自己指定一个比较大的时间t即可了
fd_set readfds;
struct timeval tv;
tv.tv_sec = t;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
if((select(sock + 1, &readfds, NULL, NULL, &tv))