C++でechoを使う方法
C++でechoを使う方法を紹介します。
1.問題点
/proc/
#include <unistd.h>
#include <fstream>
#include <stdlib.h>
int main(int argc, char **argv) {
pid_t pid;
pid = getpid();
FILE *fp;
char data[100];
sprintf(data, "%s%d%s", "/proc/", (int)pid, "/coredump_filter");
fp = fopen(data, "w");
if(fp != NULL){
fprintf(fp, "%x", 0x3f);
fclose(fp);
}
return 1;
}
が、このプログラムを実行しても"3f"ではなく、"3"にしか書き替わりません。
$ ps -ef |grep a.out
root 2356 26996 0 00:11 pts/25 00:00:00 ./a.out
$ cat /proc/2356/coredump_filter
00000003
プログラムの問題ではなく、どうやら「mmapしたメモリの値がcoreに出力されない場合の対処」で紹介したとおり、coredump_filterはechoコマンドで書き替えないと期待する結果にならないようです。
が、C++でのechoコマンドの使い方が分かりません。
ということで、C++でechoを使う方法を紹介します。
2.C++でechoを使う
C++でechoを使うには、system()を利用します。
#include <unistd.h>
#include <fstream>
#include <stdlib.h>
int main(int argc, char **argv) {
pid_t pid;
pid = getpid();
char data[100];
sprintf(data, "echo 63 > %s%d%s", "/proc/", (int)pid, "/coredump_filter");
system(data);
return 1;
}
このプログラムを実行することで、期待通りの"3f"になりました。
$ ps -ef |grep a.out
root 2356 26996 0 00:11 pts/25 00:00:00 ./a.out
$ cat /proc/2356/coredump_filter
0000003f
Posted by yujiro このページの先頭に戻る
トラックバックURL
コメントする
greeting