petardfs�ŃA�v���P�[�V�������e�X�g�����FPrograming Bible�i1/2 �y�[�W�j

petard�t�@�C���V�X�e���́A�G���[�����𐶐�����悤�ɐ݌v���ꂽ�t�@�C���V�X�e���ł���B�V�X�e���e�X�g�ƒP�̃e�X�g���s���̂ɖ𗧂B

» 2007�N09��27�� 01��30�� ���J
[Ben-Martin�COpen Tech Press]
SourceForge.JP Magazine

�@petard�t�@�C���V�X�e���ipetardfs�j�́A�G���[�����𐶐�����悤�ɐ݌v���ꂽ�t�@�C���V�X�e���ł���B�������A�G���[�𐶐���������Ɗ��҂����G���[�̎p��C�ӂɎw��ł���B���̂��߁Apetardfs�̓V�X�e���e�X�g�ƒP�̃e�X�g�ɕ֗��ł���B�Ⴆ�΁A�t�@�C�����J���̂Ɏ��s�����ꍇ��t�@�C����5000�o�C�g�ǂݍ��񂾂Ƃ���œǂݍ��݃G���[���N�����ꍇ�ɁA�A�v���P�[�V�������琳�����G���[���b�Z�[�W���\������邱�Ƃ��m�F�ł���B

�@petardfs�ł́A�Z�b�g�A�b�v�̊ȒP��FUSE�iFilesystem in Userspace�j���g���̂ŁA�J�[�l���̍ăR���p�C����V�����J�[�l�����W���[���̒lj��͕K�v�Ȃ��B�W���̐ݒ�Łg�x�[�X�t�@�C���V�X�e���h�ƃ}�E���g�|�C���g���w�肷��B�Ⴆ�΁A/home/ben/foo���x�[�X�t�@�C���V�X�e���ŁA�t�@�C���V�X�e����/home/ben/petard-foo�Ƀ}�E���g����Ƃ��悤�B����ȊO�̐ݒ���s��Ȃ��Ă��Afoo���ɂ���t�@�C����petard-foo�ł��̂܂܎g�p�ł���Bpetardfs�ł́AXML�ݒ�t�@�C�����g���āA�G���[��񍐂���t�@�C���Ǝg�p����G���[�R�[�h��ݒ肷��B�Ⴆ�΁Afoo.txt���o�C�g34�`37�̈ʒu��EIO�G���[�𔭐�����A�Ȃǂ̐ݒ肪�”\���B

�@petardfs�̃r���h�ƃC���X�g�[���́A�ʏ��configure�Amake�Amake install�̎菇�ōs���Bpetardfs��fuselagefs�t�@�C���V�X�e������ՂƂ��邪�A�����FUSE��C++���b�p�[�ł���A�x�[�X�t�@�C���V�X�e�����}�E���g�|�C���g�Ƀ}�b�s���O����@�\��񋟂���B���̂������ŁA�J���҂͂ق���FUSE�t�@�C���V�X�e����f�����쐬���A������኱�̋@�\���lj����ꂽ�x�[�X�t�@�C���V�X�e���Ƃ��Ē񋟂ł���B

�@petardfs��fuselagefs�́ASourceForge.net����_�E�����[�h�ł���B

petardfs��ł̎��s

�@petardfs�̍ŏd�v�I�v�V�����́A--error-definitions�i-e�j��--url�i-u�j�ł���B�O�҂̓G���[��`���i�[���ꂽXML�t�@�C�����w�肵�A��҂̓x�[�X�t�@�C���V�X�e�����w�肷��B�x�[�X�t�@�C���V�X�e���́A��ɐ�΃p�X�Ŏw�肷��B�܂��Apetardfs�t�@�C���V�X�e�����}�E���g����p�X���Ō�̈����Ƃ��Ďw�肷��B�O�f�̗�Ō����΁A�x�[�X�t�@�C���V�X�e�����w�肷��I�v�V�����́A-u /home/ben/foo�ɂȂ�B�R�}���h���C���̍Ō�̈����ɂ́Apetardfs���g�p����ꏊ�A�‚܂�/home/ben/petard-foo���w�肷��B

�@petardfs�R�}���h���C���I�v�V�����̒��ŁAFUSE�Ɏw����n�����͖̂��O��--fuse-�Ŏn�܂�B�ʏ�AFUSE�t�@�C���V�X�e����fusermount -d�ŃA���}�E���g�����܂ŁApetardfs�̓o�b�N�O���E���h�œ��삷��BFUSE�I�v�V�����́u--fuse-forground�v���g���ƁA�[���� fusermount�R�}���h�����s���邩Ctrl+C�������܂ŁApetardfs�͒[���̃t�H�A�O���E���h�ɗ��܂�B�u--fuse- forground�v�I�v�V�������g���̂́Apetardfs���̂Ƀo�O�̋^��������ꍇ����ł���Bpetardfs���t�H�A�O���E���h�Ŏ��s����ƁAstderr���b�Z�[�W���g�p�ł���Bpetardfs��GNU�f�o�b�K���璼�ڌĂяo�����Ƃ��ł���B

�ݒ�t�@�C��

�@petardfs�ł́A�t�@�C���V�X�e���Ɋ֘A�����v�Ȋ֐��ɃG���[�̃��X�g���w��ł���B�ݒ�t�@�C���̃g�b�v���x���̗v�f�́upetardfs-config�v�ł���B���̗v�f��1�‚́uerrors�v�v�f���܂܂��B�e�֐��́uerrors�v���ɗv�f�Ƃ��Č����B�֐����ƂɃG���[�����̃��X�g���w��ł���B

�@���ׂẴt�@�C���p�X�́A�x�[�X�t�@�C���V�X�e������̑��΃p�X�Ŏw�肷��B�t�@�C���V�X�e���p�X�̃��[�g�́A�x�[�X�t�@�C���V�X�e���ł�����B�Ⴆ�΁A�x�[�X�t�@�C���V�X�e����/home/ben/foo�ŁA�}�E���g�悪/home/ben/petard-foo�̏ꍇ�A���̃G���[������/home/ben/petard-foo/file2.txt�̓ǂݍ��ݎ���EIO�G���[�𐶐�����B


<petardfs-config>
    <errors>

      <read>     <error path="/file2.txt">       <n start-offset="4096" end-offset="4196" error-code="&EIO;"/>     </error>       <read>
    <errors> <petardfs-config>

�@����ɍׂ����G���[�������w�肷��ɂ́AEINTR��EAGAIN���g���B�ǂ�����A�A�v���P�[�V����������I/O�֐��Ăяo�����Ď��s���邱�Ƃ��Ӗ�����B�Ⴆ�΁A���̐ݒ�ł́Afile3.txt�t�@�C���̓ǂݍ��݂́A�A�v���P�[�V�������o�C�g20000�̓ǂݍ��݂�3�񎎂݂���ŁA���s�����‚����B


<error path="/file1.txt">
  <n start-offset="10000" end-offset="10000" error-code="&EINTR;" times="10"/>
</error>
<error path="/file3.txt">
  <n start-offset="20000" end-offset="20000" error-code="&EAGAIN;" times="3"/>
</error>

�@���̗�Ŏg�p���邷�ׂẴG���[�R�[�h�́AXML�G���e�B�e�B�ł���B�D������Ɍ��߂������G���[�R�[�h��XML�t�@�C���̂��������ɎU��΂�̂�����邽�߁A�G���[�R�[�h��XML�t�@�C���{�̂̃w�b�_�ɒ�`�����Bpetardfs�́A����̃G���[�����Ɋ֘A�Â���ꂽ���l�G���[�R�[�h�������Ԃ������ł���B


<!DOCTYPE petardfs-config [

<!ENTITY    EPERM         "1"> <!ENTITY    ENOENT        "2"> <!ENTITY    ESRCH         "3">         �F         �F

�@petardfs�̌��݂̃����[�X�ł́A�G���[�������֘A�Â�����L���Ȋ֐��́Aread�Awrite�Afsync�Amkdir�Asymlink�Aunlink�Armdir�Arename�Alink�Achmod�Achown�Aftruncate�Autime�Aopen�ł���B

�֘A�L�[���[�h

�e�X�g | �o�O | �P�̃e�X�g | Programing Bible


�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © 2010 OSDN Corporation, All Rights Reserved.

'; e_dlv.innerHTML = html; adRequest({position:dlv_pos,dom:true}); }else if(ad_type === 'gam'){ var html = '
'; e_dlv.innerHTML = html; refreshGam('InArtSpecialLink'); }else if(ad_type === 'logly'){ var html = '
'; e_dlv.innerHTML = html; loglySet(g_id); }else if(ad_type === 'google'){ var html = '
'; e_dlv.innerHTML = html; googletag.cmd.push(function(){ var slot8 = googletag.defineSlot('/43042345/nlab_artinsert_RT',[[336,280],[300,250],'fluid'],'div-gpt-ad-1551176482959-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display('div-gpt-ad-1551176482959-0'); googletag.pubads().refresh([slot8]); }); } }; var insert_ok = function(_target,_str){ var clearfix = d.createElement('div'); clearfix.className = 'colBoxClear'; if(ad_float_fix){ e_body.insertBefore(e_dlv,_target); e_body.insertBefore(clearfix,_target.nextElementSibling); }else{ e_body.insertBefore(e_dlv,_target); } set_dlv(); }; var insert_ng = function(_str){ e_dlv.style.display = 'none'; }; var main = function(){ var e_nodes = e_body.childNodes; // BODY �����q�v�f var e_tags = []; // BODY �����^�O var p_num = []; // BODY ���� P �^�O�ʒu var p_target_num; // �g�}����ʒu var o_float = {}; // ��荞�ݗv�f var o_this = {}; // �A�N�e�B�u�^�O var o_next = {}; // �A�N�e�B�u�^�O�̎��̃^�O var flag_insert = 0; // �}���t���O // ��荞�ݗv�f�`�F�b�N var check_float = function(_e){ var e = 0; if(_e.id.match(/^col\d{3}(l|r)$/)){ e = _e; } return e; }; // �v�f�� Y ���W�ƍ����̍��v�l var get_element_y = function(_e){ var ey = 0; var eh = _e.offsetHeight; while(_e){ ey += _e.offsetTop; _e = _e.offsetParent; } return ey + eh; }; var check_ptag = function(_e){ var e = 0; if(_e.tagName && _e.tagName === 'P'){ e = _e; } return e; }; var try_insert = function(){ p_target_num = Math.floor(p_num.length / 2) - 1; if(p_target_num >= _maxrange) p_target_num = _maxrange; if(dis_con) p_target_num = 0; for(var i = p_num[p_target_num]; i < e_tags.length; i++){ o_this.e = check_ptag(e_tags[i]); if(o_this.e){ o_next.e = check_ptag(e_tags[i + 1]); if(o_next.e){ if(!o_float.e || check_float(e_tags[i - 1])){ o_float.e = check_float(e_tags[i - 1]); o_float.n = i - 1; } if(o_float.e && o_float.n < i + 1){ o_float.y = get_element_y(o_float.e); o_this.y = get_element_y(o_this.e); set_line(o_float.y,'red'); set_line(o_this.y,'blue'); if(o_float.y < o_this.y){ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂���'); break; } }else{ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂Ȃ�'); break; } } }else{ o_float = {}; } } if(!flag_insert){ insert_ng('�}���ʒu�Ȃ�'); } }; // �S�q�v�f����^�O�̂ݔz��ɓ���� for(var i = 0; i < e_nodes.length; i++){ if(e_nodes[i].tagName){ e_tags.push(e_nodes[i]); } } // �S�^�O���� P �^�O�ʒu��z��ɓ���� for(var i = 0; i < e_tags.length; i++){ if(e_tags[i].tagName === 'P') p_num.push(i); // �ŏ��̉�荞�ݗv�f���i�[ if(!o_float.e){ o_float.e = check_float(e_tags[i]); o_float.y = get_element_y(o_float.e); o_float.n = i; } } if(p_num.length >= _threshold){ try_insert(); }else{ insert_ng('P �^�O ' + _threshold + ' �ȉ�'); } }; if(e_body){ main(); }else{ insert_ng('�L���{���Ȃ�'); } })(document,4,5);

���ڂ̃e�[�}

���Ȃ��ɂ������߂̋L��PR