在工程下,程式運作一段時間後,産生段錯誤.
定位到是由于定時調用system産生的.
經過無窮無盡的修改代碼,一直不行.
剛開始考慮是inline,後來又檢查棧,之後又用程序,後來改用守護程序.
在經過無窮無盡的探索後,最終僅僅是把system的庫代碼移植進工程裡面,不調用庫的system,而改為自己移植進的system,竟然好了.
而且程式運作時,音頻也不頓,性能也好了,百思不得其解.
寫在這裡面,以此紀念.緬懷我這幾天的努力.
int system_fuc(char *cmdstr)
{
int wait_state = -1;
int pid = -1;
__sighandler_t save_quit;
__sighandler_t save_int;
__sighandler_t save_chld;
if (NULL == cmdstr)
{
return 1;
}
save_quit = signal(SIGQUIT, SIG_IGN);
save_int = signal(SIGINT, SIG_IGN);
save_chld = signal(SIGCHLD, SIG_DFL);
if ((pid = vfork()) < 0)
{
signal(SIGQUIT, save_quit);
signal(SIGINT, save_int);
signal(SIGCHLD, save_chld);
return -1;
}
else if (0 == pid)
{
signal(SIGQUIT, SIG_DFL);
signal(SIGINT, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
execl("/bin/sh", "sh", "-c", cmdstr, (char *)0);
_exit(127);
}
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
if (waitpid(pid, &wait_state, 0) == -1)
{
wait_state = -1;
}
signal(SIGQUIT, save_quit);
signal(SIGINT, save_int);
signal(SIGCHLD, save_chld);
return wait_state;
}