Linuxのカーソルの前に端末の文字を削除するにはどうすればよいですか?過去に私は次のようなものを使用しました:C言語のLinux端末から文字を削除する方法
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define KEY_BACKSPACE 127
int main(){
printf("%s", "abc"); // add something so we can see if delete works
char * buf = malloc(3*sizeof(char));
*(buf+0)=KEY_BACKSPACE;
*(buf+1)=' ';
*(buf+2)=KEY_BACKSPACE;
write(1,buf,3);
free(buf);
}
これはこのテクニックを実証する小さな例です。元のプログラムでは、標準モードを無効にして、すべてのキーストロークを自分で処理しました。だから私は文字を削除する必要があった。
元のプログラムでは、バックスペース、スペース、バックスペースを書き込んでも問題ありませんでした。今私は数年後に同じプログラムを実行すると、何も削除されませんでした。何が変わったの?これを修正するにはどうすればよいですか?
「削除」キーコードを使用してバックスペースを行うのは変です。ほとんどのシステムでバックスペース ''\ b' 'を使う必要があります。 'write()'が画面の一部を上書きする前に 'abc'文字列を画面に表示するには' fflush(stdout) 'する必要があります。あるいは 'write()'を使って 'abc'文字列を出力してください。 –
バッファを解放し、* printf *の代わりに* write *を使用しました。それは私が実証しようとした問題ではありませんでした。コメントが指摘するように、問題は文字127を使用していることです(なぜこれがこれまでに機能したのか分かりません)。 – user224348
可能な説明は、未加工の127を解釈するために途中で終了した端末エミュレータ(または端末)を使用していたこと、そして今日の端末エミュレータの作物はもはやそれをしていないことです。 – user4815162342