表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
甘えん坊幼馴染と過ごすイチャイチャ大学生活  作者: 久野真一
第7章 アルバイト始めました
66/140

第65話 俺が低レベルな教えを乞うことにした件について

  初めてのバイトから帰って来てからというもの、ネットなどを調べて、ライブラリとシステムコールの違いについては、なんとなくはわかった気がするものの、なかなかわかった気がしない。


 博士後期課程1年の(しゅん)さんならうまく教えてくれるのではないかと思い、部室に行って教えを乞うことにした。後ろから、どこか心配そうなミユも着いて来ている。


「で、ライブラリとシステムコールの違いを知りたい、と」

「はい。ネットの情報とかは見たんですけど、いまいちピンと来ないんですよ」


 しばらく考え込んだあと、俊さんが言った。


「まず、高遠。C言語でファイルを1行読み込むプログラムを書けるか?」

「え、ええ。それくらいなら」

「じゃあ、書いてみせてくれ」


 意図がわからなかったが、とりあえず言われた通りに、書いてみる。


#include <stdio.h>

#include <stdlib.h>

#define SIZE 256


int main(void) {

FILE *fp;

char fname[] = "input.txt";

char line[SIZE] = {'\0'};


fp = fopen(fname, "r"); //ライブラリ

fgets(line, SIZE, fp); // ライブラリ

printf("line = %s", line);

fclose(fp); // ライブラリ


return 0;

}


 これで、"input.txt"というファイルから1行読み込んで表示できる。


「ファイルが開けなかったときの事は考えてませんが……」

「いや、上出来だ。なら、ライブラリを使った方法は理解してるわけだ」


 ふむふむとうなずく俊さん。


「なら、同じ事をシステムコールを使って書けるか?」

「え、いや。それがわからないから聞きに来たんですが」

「それもそうだな。じゃあ、試しに書いてみよう」


 タタタ、とタイプして素早くプログラムを書き出す俊さん。動きに迷いがないあたり、さすがだ。


「よし、と。まあ手抜きだが、こんなものだろう」


#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <fcntl.h>

#define SIZE 256


int main(void) {

char* file = "input.txt";

int fd;

int count;

char buffer[SIZE];

fd = open(file, O_RDONLY); // システムコール

while((count = read(fd, buffer, 1)) > 0) {

if(strcmp(buffer, "\n") == 0) break; // システムコール

write(0, buffer, count); // システムコール

}

close(fd);

return 0;

}


 俊さんが打ち込んだプログラムを眺める。


「で、この2つを比較すると、何か見えてこないか?」

「あ。ライブラリを使ったプログラムだとfgetsで「一行読み込む」が出来てますが、システムコールを使ったプログラムには見当たりませんね」


 後者を見ると、ファイルに改行記号が来ているかどうかで判定をしているようだ。


「要はライブラリが「一行読み込む」というのを代わりにやってくれてるわけだ」

「言われてみると、納得です。ということは、逆にいうと、システムコールには「一行読み込む」という機能がない?」

「その通り。だから、fgets()で「一行読み込む」を代行してくれてるんだ」

「なるほど。だいぶ納得できてきました」


 曖昧な説明だとどうにも納得できなかったが、コードを見るとその差は歴然だ。


「で、この、システムコールを実際に実行するのがOSの仕事だ」

「ようやく納得が行きました。ありがとうございます」

「お役に立てたなら何よりだ」


 つっかえていたところがわかって、どこか晴れ晴れとした気分で家への道を歩く。そういえば、いつの間にか夜になっていたな。


「リュウ君、良かったね」


 それまで、黙って話を聞いていたミユが、微笑んでそう言う。


「そういえば、置き去りにしてたな。ごめん」

「ううん。問題に真剣なリュウ君見てるのも楽しかったし、いいよ」

「それは助かる」


 そう答えた後、ぐぎゅるーという腹の虫が鳴る。


「あ、晩ごはん食べるの忘れてた」

「リュウ君も夢中になると、食べるの忘れるよね」

「ミユもよく食べ忘れるよな」

「集中すると、ほんとに忘れるんだもん」


 膨れっ面をするミユだが、機嫌は良さそうだ。


「とりあえず、すみ屋でも行くか」

「いいの?私、作るけど」

「今日は俺が奢るしさ」

「じゃあ、お言葉に甘えちゃおうかな」


 というわけで、行き先を牛丼「すみ屋」に変更。とはいえ、歩いて10分かからないので近いものだ。


「はー。生き返る」


 すみ屋にて。キムチ牛丼とお味噌汁をかきこんで、水を飲んで一息つく。


「集中した後のご飯って美味しいよね」

「そうだな。おまえも、徹夜でプログラムした後、おまえ、ガツガツ食べてるよな」

「ガツガツって、そんな意地汚くないよー」

「いや、まさにガツガツって感じだったぞ」


 徹夜でプログラムを書いていたミユを店に連れて行くと、それはもう凄い勢いで食べていたものだった。最近はあまり見ないが。


「なんていうか、もやもやとしたのが晴れるとほんとすっきりする」

「私も同感。ずっと悩んでいたのが嘘みたいな感じがするもんね」


 家への道を歩きながら、語り合う。ミユの腕に俺は遥かに及ばないが、そのあたりの感覚は、プログラマー同士、共有できている。


「これで、ミユの足手まといにならずに済みそうだ」

「……やっぱり、気にしてたんだね」


 やっぱり気づかれていたか。


「俺が勝手に気にしてるだけだから」

「そうなんだけど。もっと頼ってくれたって……」

「でも、プログラムはミユに任せても俺が上手くならないだろ」

「……!」

「ちょっと焦ってたんだ。ミユと対等になれるようにって」


 仕事を任された当日に、というのは我ながら焦りすぎだと思うが。


「そっか。あ、ありがと」


 何故だか、頬を赤らめてそんな事を言い出すミユ。

 

「別にお礼言われることじゃないと思うが?」

「私のために頑張ってくれたんでしょ?」

「まあ、な」

「やっぱり、ありがとうだよ。でも……」

「?」

「ううん。何でもない」


 ぷい、と顔をそむけてしまうミユ。


 機嫌が悪いわけじゃないと思うんだが、どうにも様子に違和感がある。喉の奥につかえていた疑問が取れて、清々しい気持ちだったのだが、どうにも釈然としないミユの様子に疑問を覚えながら帰宅したのだった。


 帰省している間、欲求不満気味だったミユが何を考えているかも知らずに。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ