■要求定義
– コマンドのマニュアルを表示する
$ man 調べる語句
/usr/share/man 直下にソースコードがある
man1 ユーザプログラム
man2 システム呼び出し
man3 ライブラリ呼び出し
man4 特殊ファイル
man5 ファイルフォーマット
man6 ゲーム
man7 その他
man8 システム管理者
e.g.
/usr/share/man/man1/ln.1.gz を解凍する
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. .TH LN "1" "January 2018" "GNU coreutils 8.28" "User Commands" .SH NAME ln \- make links between files .SH SYNOPSIS .B ln [\fI\,OPTION\/\fR]... [\fI\,-T\/\fR] \fI\,TARGET LINK_NAME (1st form)\/\fR .br .B ln [\fI\,OPTION\/\fR]... \fI\,TARGET (2nd form)\/\fR .br .B ln [\fI\,OPTION\/\fR]... \fI\,TARGET\/\fR... \fI\,DIRECTORY (3rd form)\/\fR .br .B ln [\fI\,OPTION\/\fR]... \fI\,-t DIRECTORY TARGET\/\fR... \fI\,(4th form)\/\fR .SH DESCRIPTION .\" Add any additional description here .PP In the 1st form, create a link to TARGET with the name LINK_NAME. // 省略
$ man ln
make links between files と書かれているのがわかります。
■検討
– gzファイルを配置して、解凍して中身を読み取るプログラムを書いていく
$ ls -l
total 20
-rwxrwxr-x 1 vagrant vagrant 8344 May 18 08:34 dev
-rw-rw-r– 1 vagrant vagrant 267 May 18 08:34 hello.c
-rw-rw-r– 1 vagrant vagrant 1728 May 18 10:53 ln.1.gz
#include <stdio.h> #include <stdlib.h> int main(){ char cmd[256]; char str[256]; char filename[] = "./ln.1.gz"; // /usr/share/man/man1/ln.1.gz sprintf(cmd, "gzip -d %s", filename); // gzip -d(ファイル展開)が指す書式文字列に従って cmdが指す文字配列へ書き込み FILE *fp; fp = popen(cmd, "r"); // popenはプロセスをオープンする while(fgets(str, 256, fp)){ printf("%s", str); } pclose(fp); return 0; }
zipオープンまではいくが、fgetsの出力がうまくいかんな。