簡體   English   中英

為什么GNU Readline這么慢?

[英]Why GNU Readline so slow?

我寫了一個加密程序。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <readline/readline.h>

int main(void) {
    char * plain;
    char letter;
    int value;
    int index;

    plain = readline("Please input your plain text: ");
    printf("Please input your key (included negatives): ");
    scanf("%i", &value);

    for (index = 0; index < strlen(plain); index++) {
        letter = plain[index];

        if (letter >= 'A' && letter <= 'Z') {
            fprintf(stderr, "%c", (letter - 'A' + value) % 26 + 'A');
        }

        else if (letter >= 'a' && letter <= 'z') {
            fprintf(stderr, "%c", (letter - 'a' + value) % 26 + 'a');
        }
        else {
            fprintf(stderr, "%c", letter);
        }
    }
    fprintf(stderr, "\n");
    free(plain);
}

我做了一些基准測試:

biergaizi@localhost ~/learning_c/test $ time ./caesar_readline < lots_of_letters 2> c_readline_result > /dev/null

real    2m31.212s
user    2m30.776s
sys     0m0.165s

該程序花費太多時間從標准輸入中讀取文本。 如果刪除> /dev/null ,我可以看到程序正在從標准輸入中讀取,太慢了!

我也寫了沒有GNU Readline的版本,它非常快。

為什么? 我該如何解決呢?

因為它提供了功能。

提供了一組供應用程序使用的功能,這些功能允許用戶在鍵入命令時編輯命令行。Emacs和vi編輯模式均可用。

我認為您可以使用開放功能

if (!strcmp(*argv, "-"))
  fd = fileno(stdin);
else fd = open(*argv, O_RDONLY|O_NONBLOCK, 0);

並提供-作為文件名,如果您想從標准輸入中讀取

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM