因此,這裏是我的代碼,其目的是打開一個額外的GNOME終端,並在新打開的終端控制檯打印頭20支Fibonacci數:僞終端不打印輸出
#include <stdio.h>
#include "apue.h"
int Fibonacci(unsigned int n);
int main() {
char cmd[256];
char str[40][256];
char *name = tempnam(NULL, NULL);
char *line = "\n";
FILE *log;
mkfifo(name, 0777);
log = fopen(name, "w+");
for (unsigned int i = 0; i < 20; i++) {
sprintf(str[(2 * i)], "%s",line);
fputs(str[(2 * i)], log);
sprintf(str[(2 * i) + 1], "%u\n", Fibonacci(i));
fputs(str[(2 * i) + 1], log);
fflush(NULL);
}
if (fork() == 0) {
sprintf(cmd, "gnome-terminal -e cat %s", name);
system(cmd);
for (unsigned int j = 0; j < 40 ; j++) {
fgets(str[j], sizeof(cmd), log);
}
exit(0);
} else
if (fork() < 0) {
perror("fork() error");
}
}
int Fibonacci(unsigned int n) {
if (n == 0) {
return 0;
} else
if (n == 1) {
return 1;
} else
if (n > 1) {
return Fibonacci(n - 2) + Fibonacci(n - 1);
}
}
當我編譯它,我得到以下警告消息:
-*- mode: compilation; default-directory: "/usr/lib/gcc/x86_64-linux-gnu/4.8.4/include/" -*-
Compilation started at Sun Sep 3 15:46:28
gcc -o FIB0 Fibonacci.c
/tmp/ccobnJV9.o: In function `main':
Fibonacci.c:(.text+0x231f): warning: the use of `tempnam' is dangerous, better use `mkstemp'
Compilation finished at Sun Sep 3 15:46:28
當我從GNOME終端命令行執行它,新的終端彈開但沒有輸出!我該如何修復此代碼才能使其工作?
當我使用
sprintf(cmd, "xterm -e cat %s", name);
,而不是 「的gnome-terminal」,它工作正常。那麼如何使用GCC在gnome終端之間進行通信?
這與使用tempnam沒有任何關係。 – immibis
@immibis:好點。它在sprintf()函數中將「gnome-terminal」替換爲「xterm」時有效。 – SavedbyZer0