C_8 (1115141)
Текст из файла
- 167 - 8. ����䥩� ��⥬� UNIX ���ਠ� �⮩ ����� �⭮���� � ����䥩�� ����� �-�ண- ࠬ���� � ����樮���� ��⥬�� UNIX. ��� ��� ����設�⢮ ���짮��⥫�� �몠 "C" ࠡ���� �� ��⥬� UNIX, �� ����� �������� �������� ��� ����設�⢠ ��⥫��. ���� � �� �ᯮ���� �-��������� �� ��㣮� ��設�, ���祭�� �ਢ���- ��� ����� �ਬ� ������ ������ ��� ��㡦� ������� � ��- ⮤� �ணࠬ������ �� �몥 "C". �� ����� ������� �� �� �᭮��� ���: ����/�뢮�, ��⥬� 䠩��� � ��।������ �����. ���� ��� ��� �।�������� ������讥 �������⢮ � ���譨�� �ࠪ���⨪�- �� ��⥬� UNIX. � ����� 7 �� ����� ���� � ��⥬�� ����䥩ᮬ, ����� �������� ��� �ᥣ� �������ࠧ�� ����樮���� ��⥬. �� ���- ��� �����⭮� ��⥬� �㭪樨 �⠭���⭮� ������⥪� ������ ���� ����ᠭ� � �ନ��� �����-�뢮��, ����㯭�� �� ������ ��設�. � ����� ���쪨� ࠧ����� �� ���襬 �᭮���� ��⥬� �易���� � ������ � �뢮��� �祪 �室� ����樮�- ��� ��⥬� UNIX � �ந�������㥬, ��� � �� ������� ����� ���� ॠ�������� ࠧ���� ��� �⠭���⭮� ������⥪�. 8.1. ���ਯ��� 䠩��� � ����樮���� ��⥬� UNIX ���� ���� � �뢮� ������- ����� ���।�⢮� �⥭�� 䠩��� ��� �� �����, ��⮬� �� �� ������ ���ன�⢠, ������ ���� �ନ��� ���짮��- ⥫�, ����� 䠩���� ��।������� 䠩����� ��⥬�. �� ����砥�, �� ���� ����த�� ����䥩� �ࠢ��� �ᥬ� ��- �ﬨ ����� �ணࠬ��� � �����묨 ���ன�⢠��. � �������� ��饬 ��砥 ��। �⥭��� �� 䠩�� ��� ��- ����� � 䠩� ����室��� ᮮ���� ��⥬� � ��襬 ����७��; ��� ����� ���뢠���� "����⨥�" 䠩��. ���⥬� �����- ��,����� �� �� �ࠢ� ����㯠�� ⠪�� ��ࠧ�� (������� �� ��� 䠩�? ������� �� � ��� ࠧ�襭�� �� ���饭�� � ��- ��?), � � �� � ���浪�, �����頥� � �ணࠬ�� ������讥 ������⥫쭮� 楫�� �, ���뢠���� ���ਯ� 䠩��. ��直� ࠧ, ����� ��� 䠩� �ᯮ������ ��� ����� ��� �뢮- ��, ��� �����䨪�樨 䠩�� 㯮�ॡ����� ���ਯ�� 䠩��, � �� ��� ���. (����� ������� �ਬ�ୠ� �������� � �ᯮ��- �������� READ (5,...) � WRITE (6,...) � ���࠭�). ��� ��- �ଠ�� �� ����⮬ 䠩�� ᮤ�ন��� � ��⥬�; �ணࠬ�� ���짮��⥫� ���頥��� � 䠩�� ⮫쪮 �१ ���ਯ�� 䠩- ��. ��� 㤮��⢠ �믮������ ������ ����権 ����� � �뢮�� � ������� �ନ���� ���짮��⥫� �������� ᯥ樠��� ᮣ- ��襭��. ����� �������� ������ ("SHELL") �ண���� �ணࠬ��, �� ���뢠�� �� 䠩��, ���뢠��� �⠭����� ������, �⠭����� �뢮��� � �⠭����� �뢮��� �訡��, ����� ����� ᮮ⢥��⢥��� � 0, 1 � 2 � ����⢥ ���- ਯ� ��� 䠩���. � ��ଠ�쭮� ���ﭨ� �� ��� �易�� � �ନ�����, ⠪ �� � �ணࠬ�� �⠥� � ���ਯ� 䠩�� 0 � ���� � ���ਯ�ࠬ� 䠩��� 1 � 2, � ��� ����� �����⢫��� ���� � �뢮� � ������� �ନ����, �� �������� �� ����⨨ ᮮ⢥������� 䠩���. - 168 - ���짮��⥫� �ணࠬ�� ����� ��७��ࠢ���� ���� � �뢮� �� 䠩��, �ᯮ���� ����樨 ���������� �������� SHELL "<" � ">" : PROG <INFILE>OUTFILE � �⮬ ��砥 �������� ������ SHELL ������� ��ᢠ���- ��� �� 㬮�砭�� ���ਯ� 䠩��� 0 � 1 � �ନ���� �� 㪠����� 䠩��. ��ଠ�쭮 ���ਯ�� 䠩�� 2 ��⠥��� ��- ����� � �ନ�����, ⠪ �� ᮮ�饭�� �� �訡��� ����� ���- �㯠�� �㤠. ������� ����砭�� �ࠢ������ � ⮣��, ����� ���� � �뢮� �易� � �������. ������ �⬥���, �� �� ��� ����� �ਪ९����� 䠩��� ���������� ������� SHELL, � �� �ணࠬ���. ���� �ணࠬ��, ���� ��� �ᯮ���� 䠩� 0 ��� ����� � 䠩�� 1 � 2 ��� �뢮��, �� ����� �� ���- �� ��室�� �� ����, �� �㤠 ����㯠�� �� �뤠�. 8.2. ���������� ����/�뢮� - ������� READ � WRITE. ���� ������ ���� �����/�뢮�� � ��⥬� UNIX �� ��- ��ᬠ�ਢ��� �� �����-���� ���ਧ�樨, �� ������-���� ���- ���� �ࢨ�; �� �� ������ ���� �����।�⢥��� ��- ��� � ����樮���� ��⥬�. ���� ���� � �뢮� �����⢫���� ���� �㭪�ﬨ: READ � WRITE. ���� ��㬥�⮬ ����� �㭪- 権 ���� ���ਯ�� 䠩��. ���� ��㬥�⮬ ���� ���� � ��襩 �ணࠬ��, ��㤠 ��� �㤠 ������ ����㯠�� �����. ��⨩ ��㬥�� - �� � ��������� ����뫪� ���⮢. ���饭�� � �⨬ �㭪�� ����� ���: N_READ=READ(FD,BUF,N); N_WRITTEN=WRITE(FD,BUF,N); �� ������ ���饭�� �����頥��� ���稪 ���⮢, 㪠�뢠�- 騩 䠪��� � ��।����� ���⮢. �� �⥭�� �����- 饭��� � ���⮢ ����� ��������� �����, 祬 ����襭��� �. �����饭��� �㫥��� � ���⮢ ����砥� ����� 䠩- ��, � "-1" 㪠�뢠�� �� ����稥 �����-���� �訡��. �� ����- � �����饭��� ���祭�� ࠢ�� ��� 䠪��᪨ ����ᠭ��� ���⮢; ��ᮢ������� �⮣� � � �� ���⮢, ��� �।���������� �������, ���筮 ᢨ��⥫����� �� �訡��. ������⢮ ���⮢, ��������� �⥭�� ��� �����, ����� ���� ᮢ��襭�� �ந������. ���� ᠬ묨 �����࠭���묨 ����稭��� ����� "1", ����� ����砥� ��।��� ������ ᨬ���� �� ���饭�� (�.�. ��� �ᯮ�짮����� ����), � "512", ����� ᮮ⢥����� 䨧���� ࠧ���� ����� �� ������ ������� ���ன�⢠�. ��� ������ ࠧ��� �㤥� �������� ��䥪⨢��, �� ���� ���� ��� �뢮� �� ������ ᨬ- ���� �� ���饭�� �� �㤥� ����몭������ ��ண��. ��ꥤ���� �� �� 䠪��, �� ����ᠫ� ������ �ணࠬ�� ��� �������� ����� �� �뢮�, ��������� �ணࠬ�� ��- ���� 䠩���, ����ᠭ��� � ����� 1. �� ��⥬� UNIX �� �ணࠬ�� �㤥� ������� �� 㣮��� �㤠 㣮���, ��⮬� �� ���� � �뢮� ����� ���� ��७��ࠢ���� �� �� 䠩� ��� ���ன�⢮. - 169 - #DEFINE BUFSIZE 512 /*BEST SIZE FOR PDP-11 UNIX*/ MAIN() /*COPY INPUT TO OUTPUT*/ \( CHAR BUF[BUFSIZE]; INT N; WHILE((N=READ(0,BUF,BUFSIZE))>0) WRITE(1,BUF,N); \) � ࠧ��� 䠩�� �� �㤥� ��⥭ BUFSIZE, � �� ����� ���饭�� � READ �㤥� �����饭� ����襥 � ���⮢, ��- ��� ��⥬ �����뢠���� � ������� WRITE; �� ���饬 ���- �� �⮣� ���饭�� � READ �㤥� �����饭 ���. ����⥫쭮 ࠧ�������, ��� ����� �ᯮ�짮���� �㭪樨 READ � WRITE ��� ������� ��楤�� ����� ��᮪��� ���, ⠪�� ��� GETCHAR, PUTCHAR � �.�. ���, ���ਬ��, ��ਠ�� �㭪樨 GETCHAR, �����⢫��騩 ���� ��� �ᯮ�짮����� ���- �. #DEFINE CMASK 0377 /*FOR MAKING CHAR'S > 0*/ GETCHAR() /*UNBUFFERED SINGLE CHARACTER INPUT*/ \( CHAR C; RETURN((READ(0,&C,1)>0 7 & CMASK : EOF); \) ��६����� "C" ������ ���� ���ᠭ� ��� CHAR, ��⮬� �� ��- ��� READ �ਭ����� 㪠��⥫� �� ᨬ����. �����頥�� ᨬ- ��� ������ ���� ��᪨�� �� 0377 ��� ��࠭⨨ ��� ��- ����⥫쭮��; � ��⨢��� ��砥 ������� ࠧ�� ����� ᤥ- ���� ��� ���祭�� ����⥫��. (����⠭� 0377 ���室�� ��� PDP-11, �� �� ��易⥫쭮 ��� ��㣨� ��設). ��ன ��ਠ�� �㭪樨 GETCHAR �����⢫�� ���� �����- �� ����ﬨ, � �뤠�� ᨬ���� �� ������ �� ���饭��. #DEFINE CMASK 0377 /*FOR MAKING CHAR'S>0*/ #DEFINE BUFSIZE 512 GETCHAR() /*BUFFERED VERSION*/ \( STATIC CHAR BUF[BUFSIZE]; STATIC CHAR *BUFP = BUF; STATIC INT N = 0; IF (N==0) \( /*BUFFER IS EMPTY*/ N=READ(0,BUF,BUFSIZE); BUFP = BUF; \) RETURN((--N>=0) ? *BUFP++ & CMASK : EOF); \) 8.3. ����⨥, ᮧ�����, �����⨥ � ��楯����� (UNLINK). �� ����, ����� �� 㬮�砭�� ��।����� �⠭����� 䠩�� �����, �뢮�� � �訡��, �� ������ � ���뢠�� 䠩- ��, �⮡� ��⥬ ���� �� ��� ��� ����� � ���. ��� �⮩ �- �� �������� ��� �窨 �室�: OPEN � CREAT. - 170 - �㭪�� OPEN ���쬠 �室�� � �㭪樥� FOPEN, ��ᬮ�७- ��� � ����� 7, �� �᪫�祭��� ⮣�, �� ����� �����饭�� 㪠��⥫� 䠩�� ��� �����頥� ���ਯ�� 䠩��, ����� �- ����� ���� 楫� ⨯� INT. INT FD; FD=OPEN(NAME,RWMODE); ��� � � ��砥 FOPEN, ��㬥�� NAME ���� ᨬ���쭮� ��ப��, ᮮ⢥�����饩 ���譥�� ����� 䠩��. ������ ���- ����, ��।����騩 ०�� ����㯠, �⫨祭: RWMODE ࠢ��: 0 - ��� �⥭��, 1 - ��� �����, 2 - ��� �⥭�� � �����. � �ந�室�� �����-� �訡��, �㭪�� OPEN �����頥� "-1"; � ��⨢��� ��砥 ��� �����頥� ����⢨⥫�� ���ਯ�� 䠩��. ����⪠ ������ 䠩�, ����� �� �������, ���� �訡���. ��窠 �室� CREAT �।��⠢��� ����������� ᮧ��- ��� ����� 䠩��� ��� ��१���� �����. � १���� ����- ��� FD=CREAT(NAME,PMODE); �����頥� ���ਯ�� 䠩��, � ��������� �������� ᮧ- ���� 䠩� � ������ NAME, � "-1" � ��⨢��� ��砥. � 䠩� � ⠪�� ������ 㦥 �������, CREAT ���� ��� �� ��- ����� �����; ᮧ����� 䠩��, ����� 㦥 �������, �� �- ����� �訡���. � 䠩� ���� ᮢ��襭�� ����, � CREAT ᮧ���� ��� � ��।������ ०���� �����, ᯥ����㥬� ��㬥�- ⮬ PMODE. � ��⥬� 䠩��� �� UNIX � 䠩��� ��뢠���� ��- ���� ��⮢ ����� ���ଠ樨, ����� �ࠢ���� ࠧ�襭��� �� �⥭��, ������ � �믮������ ��� �������� 䠩��, ��� ��㯯� �������楢 � ��� ��� ��⠫��� ���짮��⥫��. ����� ��ࠧ��, ��姭�筮� ���쬥�筮� � �������� 㤮��� ��� ᯥ�䨪�樨 ࠧ�襭��. ���ਬ��, � 0755 ᢨ��⥫����- �� � ࠧ�襭�� �� �⥭��, ������ � �믮������ ��� �������� � � ࠧ�襭�� �� �⥭�� � �믮������ ��� ��㯯� � ��� ��- ⠫���. ��� �������樨 ���� �ਢ������ �ணࠬ�� �������� ������ 䠩�� � ��㣮�, ������ ��饭�� ��ਠ�⮬ ��- ���� CP ��⥬� UNIX. (�᭮���� ��饭�� �����砥��� � ⮬, �� ��� ��ਠ�� ������� ⮫쪮 ���� 䠩� � �� ��ன ���- ���� �� ������ ���� �ࠢ�筨���). #DEFINE NULL 0 #DEFINE BUFSIZE 512 #DEFINE PMODE 0644/*RW FOR OWNER,R FOR GROUP,OTHERS*/ MAIN(ARGC,ARGV) /*CP: COPY F1 TO F2*/ INT ARGC; CHAR *ARGV[]; \( INT F1, F2, N; CHAR BUF[BUFSIZE]; - 171 - IF (ARGC ! = 3) ERROR("USAGE:CP FROM TO", NULL); IF ((F1=OPEN(ARGV[1],0))== -1) ERROR("CP:CAN'T OPEN %S", ARGV[1]); IF ((F2=CREAT(ARGV[2],PMODE))== -1) ERROR("CP: CAN'T CREATE %S", ARGV[2]); WHILE ((N=READ(F1,BUF,BUFSIZE))>0) IF (WRITE(F2,BUF,N) !=N) ERROR("CP: WRITE ERROR", NULL); EXIT(0); \) ERROR(S1,S2) /*PRINT ERROR MESSAGE AND DIE*/ CHAR *S1, S2; \( PRINTF(S1,S2); PRINTF("\N"); EXIT(1); \) ������� ��࠭�祭�� (���筮 15 - 25) �� ������⢮ 䠩���, ����� �ணࠬ�� ����� ����� �����묨 �����६��- ��. � ᮮ⢥��⢨� � �⨬ �� �ணࠬ��, ᮡ������� �- ����� � ������� 䠩����, ������ ���� �����⮢���� � ���- �୮�� �ᯮ�짮����� ���ਯ� 䠩���. ��楤�� CLOSE ���뢠�� ��� ����� ���ਯ� 䠩�� � ������ 䠩��� � �������� ���ਯ�� 䠩�� ��� �ᯮ�짮����� � ������� ��㣨� 䠩���. �����襭�� �믮������ �ணࠬ�� �१ EXIT ��� � १���� ������ �� ����饩 �ணࠬ�� �ਢ���� � ������� ��� ������� 䠩���. �㭪�� ��楯����� UNLINK (FILENAME) 㤠��� �� ��⥬� 䠩��� 䠩� � ������ FILENAME ( �� ������� �ࠢ�筮�� 䠩- ��. ���� ����� ���� �楯��� � ��㣨� �ࠢ�筨���, ��������, ��� ��㣨� ������ - �ਬ��.��ॢ��稪�). ��ࠦ����� 8-1. -------------- ��९��� �ணࠬ�� CAT �� ����� 7, �ᯮ���� �㭪樨 READ, WRITE, OPEN � CLOSE ����� �� ������⮢ �� �⠭���- ⭮� ������⥪�. ����� �ᯥਬ���� ��� ��।������ ��- ���⥫쭮� ��� ࠡ��� ��� ���� ��ਠ�⮢. 8.4. �ந������ ����� - SEEK � LSEEK. ��ଠ�쭮 �� ࠡ�� � 䠩���� ���� � �뢮� �����⢫�- ���� ������⥫쭮: �� ������ ���饭�� � �㭪�� READ � WRITE �⥭�� ��� ������ ��稭����� � ����樨, �����।�⢥�- �� ���饩 �� �।��饩 ��ࠡ�⠭���. �� �� ����室����- � 䠩� ����� ������ ��� �����뢠���� � �� �ந����쭮� ���浪�. ���饭�� � ��⥬� � ������� �㭪樨 LSEEK �����- ��� ��।�������� �� 䠩��, �� �ந����� 䠪���� ��- ��� ��� �����. � १���� ���饭�� LSEEK(FD,OFFSET,ORIGIN); - 172 - ⥪��� ������ � 䠩�� � ���ਯ� FD ��।�������� �� ������ OFFSET (ᬥ饭��), ����� �����뢠���� �� ����, 㪠�뢠����� ��㬥�⮬ ORIGIN (��砫� �����). �����饥 �⥭�� ��� ������ ���� ⥯��� ��稭����� � �⮩ ����樨. ��㬥�� OFFSET ����� ⨯ LONG; FD � ORIGIN ����� ⨯ INT. ��㬥�� ORIGIN ����� �ਭ����� ���祭�� 0,1 ��� 2, 㪠�뢠� �� �, �� ����稭� OFFSET ������ �����뢠���� ᮮ⢥���- ����� �� ��砫� 䠩��, �� ⥪�饩 ����樨 ��� �� ���� 䠩- ��. ���ਬ��, �⮡� ��������� 䠩�, ��� ��। ������� ���� ��� �����: LSEEK(FD,0L,2); �⮡� �������� � ��砫� ("��६���� ���⭮"), ����� ����- ���: LSEEK(FD,0L,0); ����� �������� �� ��㬥�� 0L; ��� ����� �뫮 �� ������� � � ���� (LONG) 0. �㭪�� LSEEK �������� �������� � 䠩���� �ਬ�୮ ⠪ ��, ��� � ����訬� ���ᨢ���, �ࠢ�� 業�� ����� ������- ���� ����㯠. ����� ����� �㭪��, ���ਬ��, ���뢠�� �� ������⢮ ���⮢, ��稭�� � �ந����쭮�� ���� � 䠩��. GET(FD,POS,BUF,N) /*READ N BYTES FROM POSITION POS*/ INT FD, N; LONG POS; CHAR *BUF; \( LSEEK(FD,POS,0); /*GET TO POS*/ RETURN(READ(FD,BUF,N)); \) � ����� ࠭��� ।�����, 祬 ।���� 7 ��⥬� UNIX, �᭮���� �窠 �室� � ��⥬� �����-�뢮�� ���뢠���� SEEK. �㭪�� SEEK �����筠 �㭪樨 LSEEK, �� �᪫�祭��� ⮣�, �� ��㬥�� OFFSET ����� ⨯ INT, � �� LONG. � ᮮ⢥��⢨� � �⨬, ����� �� PDP-11 楫� ����� ⮫쪮 16 ��⮢, ��- �㬥�� OFFSET, 㪠�뢠��� �㭪樨 SEEK, ��࠭�祭 ����稭�� 65535; �� �⮩ ��稭� ��㬥�� ORIGIN ����� ����� ���祭�� 3, 4, 5, ����� ���⠢���� �㭪�� SEEK 㬭����� �������� ���祭�� OFFSET �� 512 (������⢮ ���⮢ � ����� 䨧��� �����) � ��⥬ ��������� ORIGIN, ��� � �� 0, 1 ��� 2 ᮮ⢥��⢥���. �������⥫쭮, �⮡� ������ �ந�- ���쭮�� ���� � ����讬 䠩��, �㦭� ��� ���饭�� � SEEK: ᭠砫� ����, ��� �뤥��� �㦭� ����, � ��⥬ ��, ��� ORIGIN ����� ���祭�� 1 � ��� �����⢫�� ��।��- ����� �� ������� ���� ����� �����. ��ࠦ����� 8-2. --------------- �祢����, �� SEEK ����� ���� ����ᠭ� � �ନ����� LSEEK � �������. ������ ������ �㭪�� �१ �����. - 173 - 8.5. �ਬ�� - ॠ������ �㭪権 FOPEN � GETC. ������ ⥯��� �� �ਬ�� ॠ����樨 �㭪権 FOPEN � GETC �� �⠭���⭮� ������⥪� ����ணࠬ� �த��������㥬, ��� ������� �� ���ᠭ��� ���⮢ ��ꥤ������� �����. ��������, �� � �⠭���⭮� ������⥪� 䠩�� ����뢠��� ���।�⢮� 㪠��⥫�� 䠩���, � �� ���ਯ�. �����⥫� 䠩�� ���� 㪠��⥫�� �� ��������, ����� ᮤ�ন� ���쪮 ���⮢ ���ଠ樨 � 䠩��: 㪠��⥫� ����, �⮡� 䠩� ��� ������ ����訬� ����ﬨ; ���稪 � ᨬ�����, ��⠢���� � ����; 㪠��⥫� ���饩 ����樨 ᨬ���� � ����; ������� �ਧ����, 㪠�뢠�騥 ०�� ��- ��� ��� ����� � �.�.; ���ਯ�� 䠩��. ����뢠��� 䠩� ������� ������ ᮤ�ন��� � 䠩�� STDIO.H, ����� ������ ��������� (���।�⢮� #INCLUDE) � �� ��室�� 䠩�, � ��� �ᯮ������� �㭪樨 �� �⠭- ���⭮� ������⥪�. �� ⠪�� ����砥��� �㭪�ﬨ �⮩ ���- ���⥪�. � �ਢ������ ���� �뤥প� �� 䠩�� STDIO.H �����, �।�����砥�� ⮫쪮 ��� �ᯮ�짮����� �㭪�ﬨ �������- ��, ��稭����� � ����ન�����, � ⥬ �⮡� 㬥����� ���- �⭮��� ᮢ������� � ������� � �ணࠬ�� ���짮��⥫�. DEFINE _BUFSIZE 512 DEFINE _NFILE 20 /*FILES THAT CAN BE HANDLED*/ TYPEDEF STRUCT _IOBUF \( CHAR *_PTR; /*NEXT CHARACTER POSITION*/ INT _CNT; /*NUMBER OF CHARACTERS LEFT*/ CHAR *_BASE; /*LOCATION OF BUFFER*/ INT _FLAG; /*MODE OF FILE ACCESS*/ INT _FD; /*FILE DESCRIPTOR*/ ) FILE; XTERN FILE _IOB[_NFILE]; DEFINE STDIN (&_IOB[0]) DEFINE STDOUT (&_IOB[1]) DEFINE STDERR (&_IOB[2]) DEFINE _READ 01 /* FILE OPEN FOR READING */ DEFINE _WRITE 02 /* FILE OPEN FOR WRITING */ DEFINE _UNBUF 04 /* FILE IS UNBUFFERED */ DEFINE _BIGBUF 010 /* BIG BUFFER ALLOCATED */ DEFINE _EOF 020 /* EOF HAS OCCURRED ON THIS FILE */ DEFINE _ERR 040 /* ERROR HAS OCCURRED ON THIS FILE */ DEFINE NULL 0 DEFINE EOF (-1) DEFINE GETC(P) (--(P)->_CNT >= 0 \ ? *(P)->_PTR++ & 0377 : _FILEBUF(P)) DEFINE GETCHAR() GETC(STDIN) DEFINE PUTC(X,P) (--(P)->_CNT >= 0 \ ? *(P)->_PTR++ = (X) : _FLUSHBUF((X),P)) DEFINE PUTCHAR(X) PUTC(X,STDOUT) - 174 - � ��ଠ�쭮� ���ﭨ� ����� GETC ���� 㬥��蠥� ���稪, ��।������ 㪠��⥫� � �����頥� ᨬ���. (� ��।������ #DEFINE 誮� �������, � ��� �த�������� � ������� ���⭮� ��ᮩ ����). � ������ ���稪 �⠭����- �� ����⥫��, � GETC ��뢠�� �㭪�� _FILEBUF, ����� ᭮�� �������� ����, २��樠������� ᮤ�ন��� �������� � �����頥� ᨬ���. �㭪�� ����� �।��⠢���� ��७�ᨬ� ����䥩� � � � �� �६� ᮤ�ঠ�� ����७�ᨬ� �������- 樨: GETC ��᪨��� ᨬ��� �� 0377, ��� �������� �������� ���७��, �����⢫塞�� �� PDP-11, � ⥬ ᠬ� ��࠭���� ������⥫쭮��� ��� ᨬ�����. ���� �� �� ᮡ�ࠥ��� ���㦤��� �����-���� ��⠫�, �� �� �� ����稫� � ��।������ ����� PUTC, ��� ⮣� ��- �� ��������, �� ��� ࠡ�⠥� � �᭮���� �筮 ⠪��, ��� � GETC, ������� �� ���������� ���� � �㭪樨 _FLUSHBUF. ������ ����� ���� ����ᠭ� �㭪�� FOPEN. ������ ���� �ணࠬ�� �㭪樨 FOPEN �易�� � ���뢠���� 䠩�� � �ᯮ- �������� ��� � �㦭�� ����, � ⠪�� � ��⠭�������� ��⮢ �ਧ����� ⠪�� ��ࠧ��, �⮡� ��� 㪠�뢠�� �㦭�� ����- ���. �㭪�� FOPEN �� �뤥��� �����-���� ���୮� �����; �� �������� �㭪樥� _FILEBUF �� ��ࢮ� �⥭�� �� 䠩��. #INCLUDE <STDIO.H> #DEFINE PMODE 0644 /*R/W FOR OWNER;R FOR OTHERS*/ FILE *FOPEN(NAME,MODE) /*OPEN FILE,RETURN FILE PTR*/ REGISTER CHAR *NAME, *MODE; \( REGISTER INT FD; REGISTER FILE *FP; IF(*MODE !='R'&&*MODE !='W'&&*MODE !='A') \( FPRINTF(STDERR,"ILLEGAL MODE %S OPENING %S\N", MODE,NAME); EXIT(1); \) FOR (FP=_IOB;FP<_IOB+_NFILE;FP++) IF((FP->_FLAG & (_READ \! _WRITE))==0) BREAK; /*FOUND FREE SLOT*/ IF(FP>=_IOB+_NFILE) /*NO FREE SLOTS*/ RETURN(NULL); IF(*MODE=='W') /*ACCESS FILE*/ FD=CREAT(NAME,PMODE); ELSE IF(*MODE=='A') \( IF((FD=OPEN(NAME,1))==-1) FD=CREAT(NAME,PMODE); LSEEK(FD,OL,2); \) ELSE FD=OPEN(NAME,0); IF(FD==-1) /*COULDN'T ACCESS NAME*/ RETURN(NULL); FP->_FD=FD; FP->_CNT=0; FP->_BASE=NULL; FP->_FLAG &=(_READ \! _WRITE); FP->_FLAG \!=(*MODE=='R') ? _READ : _WRITE; RETURN(FP); \) - 175 - �㭪�� _FILEBUF ���쪮 ����� ����. �᭮���� ���- ����� �����砥��� � ⮬, �� _FILEBUF ��६���� ࠧ���� ����� � 䠩�� � � ⮬ ��砥, ����� ����� �� ��������� ���- ��筮 ���� � ����� ��� ���ਧ�樨 ����� ��� �뢮��. ��- �� ����࠭�⢮ ��� ������ ���� ����� ���� ����祭� ���- 饭��� � �㭪樨 CALLOC, � �� �⫨筮; � �� ���, � _FILEBUF �����⢫�� �����ਧ������ ����/ �뢮�, �ᯮ��- ��� �⤥��� ᨬ���, ����饭�� � �����쭮� ���ᨢ�. #INCLUDE <STDIO.H> _FILLBUF(FP) /*ALLOCATE AND FILL INPUT BUFFER*/ REGISTER FILE *FP; ( STATIC CHAR SMALLBUF(NFILE);/*FOR UNBUFFERED 1/0*/ CHAR *CALLOC(); IF((FR->_FLAG&_READ)==0\!\!(FP->_FLAG&(EOF\!_ERR))\!=0 RETURN(EOF); WHILE(FP->_BASE==NULL) /*FIND BUFFER SPACE*/ IF(FP->_FLAG & _UNBUF) /*UNBUFFERED*/ FP->_BASE=&SMALLBUF[FP->_FD]; ELSE IF((FP->_BASE=CALLOC(_BUFSIZE,1))==NULL) FP->_FLAG \!=_UNBUF; /*CAN'T GET BIG BUF*/ ELSE FP->_FLAG \!=_BIGBUF; /*GOT BIG ONE*/ FP->_PTR=FP->_BASE; FP->_CNT=READ(FP->_FD, FP->_PTR, FP->_FLAG & _UNBUF ? 1 : _BUFSIZE); FF(--FP->_CNT<0) \( IF(FP->_CNT== -1) FP->_FLAG \! = _EOF; ELSE FP->_FLAG \! = _ ERR; FP->_CNT = 0; RETURN(EOF); \) RETURN(*FP->_PTR++ & 0377); /*MAKE CHAR POSITIVE*/ ) �� ��ࢮ� ���饭�� � GETC ��� �����⭮�� 䠩�� ���稪 ����뢠���� ࠢ�� ���, �� �ਢ���� � ���饭�� � _FILEBUF. � �㭪�� _FILEBUF ������, �� ��� 䠩� �� ��- ���� ��� �⥭��, ��� ���������� �����頥� EOF. � ��⨢��� ��砥 ��� ��⠥��� �뤥���� ����让 ����, � � �� �� �� 㤠����, � ���� �� ������ ᨬ����. �� �⮬ ��� ������ � _FLAG ᮮ⢥�������� ���ଠ�� � ���ਧ�樨. ��� ���� 㦥 ᮧ���, �㭪�� _FILEBUF ���� ��뢠�� �㭪�� READ ��� ��� ����������, ��⠭�������� ���稪 � 㪠��⥫� � �����頥� ᨬ��� �� ��砫� ����. �����⢥��� ��⠢訩�� �����᭥��� ����� ��⮨� � ⮬, ��� �� ��稭�����. ���ᨢ _IOB ������ ���� ��।���� � ���樠������ ��� STDIN, STDOUT � STDERR: - 176 - FILE _IOB[NFILE] = \( (NULL,0,_READ,0), /*STDIN*/ (NULL,0,NULL,1), /*STDOUT*/ (NULL,0,NULL,_WRITE \! _UNBUF,2) /*STDERR*/ ); �� ���樠����樨 ��� _FLAG �⮣� ���ᨢ� ������� �����, �� 䠩� STDIN �।�����祭 ��� �⥭��, 䠩� STDOUT - ��� ����� � 䠩� STDERR - ��� ����� ��� �ᯮ�짮����� ����. ��ࠦ����� 8-3. -------------- ��९��� �㭪樨 FOPEN � _FILEBUF, �ᯮ���� ���� ����� �� ����⮢�� ����権. ��ࠦ����� 8-4. --------------- ���ࠡ�⠩� � ������ �㭪樨 _FLUSHBUF � FCLOSE. ��ࠦ����� 8-5. --------------- �⠭���⭠� ������⥪� ᮤ�ন� �㭪�� FSEEK(FP, OFFSET, ORIGIN) ����� �����筠 �㭪樨 LSEEK, �᪫��� �, �� FP ��- �� 㪠��⥫�� 䠩��, � �� ���ਯ� 䠩��. ������ FSEEK. ��������, �� ��� FSEEK �ࠢ��쭮 ᮣ������� � ��- �ਧ�樥�, ᤥ������ ��� ��㣨� �㭪権 ������⥪�. 8.6. �ਬ�� - �ᯥ�⪠ �ࠢ�筨��� ������ �ॡ���� ��㣮� ��� ����������⢨� � ��⥬�� 䠩��� - ��।������ ���ଠ樨 � 䠩��, � �� ⮣�, �� � ��� ᮤ�ন���. �ਬ� ����� �㦨�� ������� LS ("ᯨ᮪ �ࠢ�筨��") ��⥬� UNIX. �� �⮩ ������� �ᯥ��뢠���� ����� 䠩��� �� �ࠢ�筨�� �, ����易⥫쭮, ��㣠� ����- ����, ⠪�� ��� ࠧ����, ࠧ�襭�� � �.�. �����, �� �ࠩ��� ���, �� ��⥬� UNIX �ࠢ�筨� ���� ���� 䠩���, � � ⠪�� �������, ��� LS ��� ���- �� �ᮡ������; ��� �⠥� 䠩� � �뤥��� �㦭� ��� �� ��室�饩�� ⠬ ���ଠ樨. ������ �ଠ� ���ଠ樨 ��।�- ����� ��⥬��, ⠪ �� LS ������ �����, � ����� ���� �� �।�⠢����� � ��⥬�. �� �� ���筮 �ந�������㥬 �� ����ᠭ�� �ணࠬ�� FSIZE. �ணࠬ�� FSIZE �।�⠢��� ᮡ�� ᯥ樠���� ��� LS, ����� ���⠥� ࠧ���� ��� 䠩���, 㪠������ � ᯨ᪥ �� ��㬥�⮢. � ���� �� 䠩��� ���� �ࠢ�筨���, � ��� ��ࠡ�⪨ �⮣� �ࠢ�筨�� �ணࠬ�� FSIZE ���頥��� ᠬ� � ᥡ� ४��ᨢ��. � �� ��㬥��� ����� ��������- ��, � ��ࠡ��뢠���� ⥪�騩 �ࠢ�筨�. ��� ��砫� ����� ��⪨� ����� �������� ��⥬� 䠩���. ��ࠢ�筨� - �� 䠩�, ����� ᮤ�ন� ᯨ᮪ ���� 䠩��� � ����� 㪠����� � ⮬, ��� ��� ࠧ�������. �����᪨ �� 㪠����� ���� �����ᮬ ��� ��㣮� ⠡����, ������ ���뢠�� "I - 㧫���� ⠡��楩". ��� 䠩�� I-㧥� - �� �, - 177 - ��� ᮤ�ন��� ��� ���ଠ�� � 䠩��, �� �᪫�祭��� ��� �����. ������ � �ࠢ�筨�� ��⮨� ⮫쪮 �� ���� ���- ⮢: ����� I-㧫� � ����� 䠩��. ��筠� ᯥ�䨪��� �����- ���� �� ����祭�� 䠩�� SYS/DIR.H, ����� ᮤ�ন� #DEFINE DIRSIZ 14 /*MAX LENGTH OF FILE NAME*/ STRUCT DIRECT /*STRUCTURE OF DIRECTORY ENTRY*/ \( INO_T&_INO; /*INODE NUMBER*/ CHAR &_NAME[DIRSIZ]; /*FILE NAME*/ \); "���" INO_T - �� ��।��塞� ���।�⢮� TYPEDEF ⨯, ����� ����뢠�� ������ I-㧫���� ⠡����. �� PDP-11 UNIX �⨬ ⨯�� ����뢠���� UNSIGNED, �� �� �� �� ��� ���ଠ- 樨, ����� ������� ������ �ணࠬ��: �� ࠧ��� ��⥬�� ��� ⨯ ����� ���� ࠧ����. ���⮬� � ��� �ᯮ�짮- ���� TYPEDEF. ����� ����� "��⥬���" ⨯�� ��室���� � 䠩�� SYS/TUPES.H. �㭪�� STAT ���� ��� 䠩�� � �����頥� ��� ᮤ�ঠ��- ��� � I-�� 㧫� ���ଠ�� �� �⮬ 䠩�� (��� -1, � ���- ���� �訡��). ����� ��ࠧ��, � १���� STRUCT STAT STBUF; CHAR *NAME; STAT(NAME,&STBUF); ������� STBUF ���������� ���ଠ樥� �� I-�� 㧫� � 䠩�� � ������ NAME. �������, ����뢠��� �����頥��� �㭪樥� STAT ���ଠ��, ��室���� � 䠩�� SYS/STAT.H � �룫廊� ���騬 ��ࠧ��: STRUCT STAT /*STRUCTURE RETURNED BY STAT*/ \( DEV_T ST_DEV; /* DEVICE OF INODE */ INO_T ST_INO; /* INODE NUMBER */ SHORT ST_MODE /* MODE BITS */ SHORT ST_NLINK; / *NUMBER OF LINKS TO FILE */ SHORT ST_UID; /* OWNER'S USER ID */ SHORT ST_GID; /* OWNER'S GROUP ID */ DEV_T ST_RDEV; /* FOR SPECIAL FILES */ OFF_T ST_SIZE; /* FILE SIZE IN CHARACTERS */ TIME_T ST_ATIME; /* TIME LAST ACCESSED */ TIME_T ST_MTIME; /* TIME LAST MODIFIED */ TIME_T ST_CTIME; /* TIME ORIGINALLY CREATED */ \) ������ ���� �⮩ ���ଠ樨 ��������� � ����������. ������� ST.MODE ᮤ�ন� ����� 䫠���, ����뢠��� 䠩�; ��� 㤮��⢠ ��।������ 䫠��� ⠪�� ��室���� � 䠩�� SYS/STAT.H. - 178 - #DEFINE S_IFMT 0160000 /* TYPE OF FILE */ #DEFINE S_IFDIR 0040000 /* DIRECTORY */ #DEFINE S_IFCHR 0020000 /* CHARACTER SPECIAL */ #DEFINE S_IFBLK 0060000 /* BLOCK SPECIAL */ #DEFINE S_IFREG 0100000 /* REGULAR */ #DEFINE S_ISUID 04000 /* SET USER ID ON EXECUTION */ #DEFINE S_ISGID 02000 /* SET GROUP ID ON EXECUTION */ #DEFINE S_ISVTX 01000 /*SAVE SWAPPED TEXT AFTER USE*/ #DEFINE S_IREAD 0400 /* READ PERMISSION */ #DEFINE S_IWRITE 0200 /* WRITE PERMISSION */ #DEFINE S_IEXEC 0100 /* EXECUTE PERMISSION */ ������ �� � ���ﭨ� ������� �ணࠬ�� FSIZE. � ��- ��祭�� �� �㭪樨 STAT ०�� 㪠�뢠��, �� 䠩� �� �- ���� �ࠢ�筨���, � ��� ࠧ��� 㦥 ��� �㪮� � ����� ���� �����⠭ �����।�⢥���. � �� �� ����뢠���� �ࠢ�筨- ���, � �� ������ ��ࠡ��뢠�� ��� �ࠢ�筨� �⤥�쭮 ��� ������� 䠩��; ⠪ ��� �ࠢ�筨� ����� � � ��।� �- ��ঠ�� ����ࠢ�筨��, ��� ����� ��ࠡ�⪨ ���� �- ���ᨢ��. ��� ���筮, ������ �ணࠬ�� ������ ��ࠧ�� ����� ���� � ��������� ��ப�� ��㬥�⮢; ��� ��।��� ����� ��㬥�� �㭪樨 FSIZE � ����让 ����. #INCLUDE <STDIO.H.> #INCLUDE <SYS/TYPES.H> /*TYPEDEFS*/ #INCLUDE <SYS/DIR.H> /*DIRECTORY ENTRY STRUCTURE*/ #INCLUDE <SYS/STAT.H> /*STRUCTURE RETURNED BY STAT*/ #DEFINE BUFSIZE 256 MAIN(ARGC,ARGV) /*FSIZE:PRINT FILE SIZES*/ CHAR *ARGV[]; \( CHAR BUF[BUFSIZE]; IF(ARGC==1) \( /*DEFAULT:CURRENT DIRECTORY*/ ATRCPY(BUF,"."); FSIZE(BUF); \) ELSE WHILE(--ARGC>0) \( STRCPY(BUF,*++ARGV); FSIZE(BUF); \) \) �㭪�� FSIZE ���⠥� ࠧ��� 䠩��. � ������ 䠩� ����뢠���� �ࠢ�筨���, � FSIZE ᭠砫� ��뢠�� �㭪�� DIRECTORY ��� ��ࠡ�⪨ ��� 㪠������ � ��� 䠩���. ����- � �������� �� �ᯮ�짮����� ���� 䫠��� S_IFMT � _IFDIR �� 䠩�� STAT.H. - 179 - FSIZE(NAME) /*PRINT SIZE FOR NAME*/ CHAR *NAME; \( STRUCT STAT STBUF; IF(STAT(NAME,&STBUF)== -1) \( FPRINTF(STDERR,"FSIZE:CAN'T FIND %S\N",NAME); RETURN; \) IF((STBUF.ST_MODE & S_IFMT)==S_IFDIR) DIRECTORY(NAME); PRINTF("%8LD %S\N",STBUF.ST_SIZE,NAME); \) �㭪�� DIRECTORY ���� ᠬ�� ����. ������ ����- ⥫쭠� �� ���� �易�� � ᮧ������ ��� ��ࠡ��뢠����� � ����� ������ 䠩�� ��� ������� �����, �� ���� ����� ����⠭����� ���� � ��ॢ�. DIRECTORY(NAME) /*FSIZE FOR ALL FILES IN NAME*/ CHAR *NAME; ( STRUCT DIRECT DIRBUF; CHAR *NBP, *NEP; INT I, FD; NBP=NAME+STRLEN(NAME); *NBP++='/'; /*ADD SLASH TO DIRECTORY NAME*/ IF(NBP+DIRSIZ+2>=NAME+BUFSIZE) /*NAME TOO LONG*/ RETURN; IF((FD=OPEN(NAME,0))== -1) RETURN; WHILE(READ(FD,(CHAR *)&DIRBUF,SIZEOF(DIRBUF))>0) \( IF(DIRBUF.D_INO==0) /*SLOT NOT IN USE*/ CONTINUE; IF(STRCMP (DIRBUF.D_NAME,".")==0 \!\! STRCMP(DIRBUF.D_NAME,"..")==0 CONTINUE; /*SKIP SELF AND PARENT*/ FOR (I=0,NEP=NBP;I<DIRSIZ;I++) *NEP++=DIRBUF.D_NAME[I]; *NEP++='\0'; FSIZE(NAME); \) CLOSE(FD); *--NBP='\0'; /*RESTORE NAME*/ ) � ������� ��� � �ࠢ�筨�� � �����饥 �६� �� �ᯮ������ (��⮬� �� 䠩� �� 㤠���), � � ᮮ⢥����- �饥 I-㧫���� � ࠢ�� ���, � �� ������ �ய�᪠����. ����� �ࠢ�筨� ⠪�� ᮤ�ন� ������ � ᠬ�� ᥡ�, ����- ������ ".", � � �� த�⥫�, ".."; ���, �祢����, ⠪�� ������ ���� �ய�饭�, � � �ணࠬ�� �㤥� ࠡ���� ���쬠 � ���쬠 �����. - 180 - ���� �ணࠬ�� FSIZE �����쭮 ᯥ樠��������, ��� �� �� ����������� ���� ������ ����. ��-�����, ������ �ண- ࠬ�� �� ����� "��⥬�묨 �ணࠬ����"; ��� ⮫쪮 ��- ������� ���ଠ��, �ଠ ��� ᮤ�ঠ��� ���ன ��।���- ���� ����樮���� ��⥬��. ��-�����, ��� ⠪�� �ணࠬ� ����⢥���, �� �।�⠢����� �⮩ ���ଠ樨 �室�� ⮫쪮 � �⠭����� "���������� 䠩��", ⠪�� ��� STAT.H � DIR.H, � �� �ணࠬ�� ������� �� 䠩��, � �� ������� 䠪��᪨� ���ᠭ�� ������ ᠬ�� �ணࠬ�. 8.7. �ਬ�� - ��।���⥫� �����. � ����� 5 �� ����ᠫ� ��������� ��ਠ�� �㭪樨 ALLOC. ��ਠ��, ����� �� ����襬 ⥯���, �� ᮤ�ন� ���- ��祭��: ���饭�� � �㭪�� ALLOC � FREE ����� ��६�����- �� � �� ���浪�; ����� �� ����室���, �㭪�� ALLOC ��- �頥��� � ����樮���� ��⥬� �� �������⥫쭮� �������. �� ⮣�, �� �� ��楤��� ������� ᠬ� �� ᥡ�, ��� ⠪- �� ����������� ������� ᮮ�ࠦ����, �易��� � ����ᠭ�- �� ��設��-����ᨬ�� �ணࠬ� �⭮�⥫쭮 ��設��-�������- �� ��ࠧ��, � �����뢠�� �ࠪ��� �ਬ������ �������, ��ꥤ������ � �������権 TYPEDEF. ����� ⮣�, �⮡� �뤥���� ������ �� ����������� ����� ���ᨢ� 䨪������� ࠧ���, �㭪�� ALLOC �㤥� �� ��� ����室����� �������� �� ������� � ����樮���� ��⥬�. ����� ࠧ���� ᮡ��� � �ணࠬ�� ����� ��- ������ �ᨭ����� �뤥����� �����, � ������, �ࠢ�塞�� ALLOC, �� ����� ���� �����뢭��. � ᨫ� �⮣� ������ ��- ���� �࠭���� � ���� 楯�窨 ������ ������. ����� ���� ����砥� ࠧ���, 㪠��⥫� ���饣� ����� � ᠬ� ������ ������. ����� 㯮�冷稢����� � ���浪� �����⠭�� ���ᮢ �����, ��祬 ������ ���� (� �������訬 ���ᮬ) 㪠��- ���� �� ����, ⠪ �� 楯�窠 䠪��᪨ ����뢠���� ����- 殬. �� ����㯫���� ����� ᯨ᮪ ������ ������ ��ᬠ�- ਢ����� �� �� ���, ���� �� �㤥� ������ �����筮 ����让 ����. � ��� ���� ����� � �筮�� �ॡ㥬� ࠧ���, � �� ��楯����� �� ᯨ᪠ � ��।����� ���짮��⥫�. � �� ��� ���� 誮� �����, � �� ࠧ�������, �㦭�� �������- �� ��।����� ���짮��⥫�, � ���⮪ �����頥��� � ���- �� ᯨ᮪. � �����筮 ����讣� ����� ���� �� 㤠����, � ����樮���� ��⥬�� �뤥����� ���� ����, ����� ����砥��� � ᯨ᮪ ������ ������; ��⥬ ���� ��������- �����. ��������� ����� ⠪�� ����� �� ᮡ�� ��ᬮ�� - ������� ᯨ᪠ � ���᪥ ���室�饣� ���� ��� �������� �- ���������� �����. � ��� ������訩�� ���� � �����-���� ��� �ਬ몠�� � ����� �� ᯨ᪠ ������ ������, � ��� ��ꥤ������� � ���� ���� ����襣� ࠧ���, ⠪ �� ������ �� �⠭������ 誮� ࠧ�������. �����㦨�� ᬥ��� ����� ����, ��⮬� �� ����� ᯨ᮪ ᮤ�ন��� � ���浪� �����⠭�� ���ᮢ. - 181 - ���� �� ����, � ���ன �� 㯮������ � ����� 5, ���- ��砥��� � ���ᯥ祭�� ⮣�, �⮡� �����頥��� �㭪樥� ALLOC ������ �뫠 ������ ���室�騬 ��ࠧ�� ��� �� ��ꥪ⮢, ����� ���� � ��� �࠭�����. ���� ��設� � ࠧ- �������, ��� ������ ��設� ������� ⨯, �ॡ��騩 ���- ������ ��࠭�祭�� �� ࠧ��饭�� �����, � ����� ᠬ��� ��࠭��⥫쭮�� ⨯� ����� �������� � ������� ��।����- �� ����, � �� �� �������� � ��� ��� ��⠫��� ⨯��. ���ਬ��, �� IBM 360/370,HONEYWELL 6000 � ������ ��㣨� ��- 設�� �� ��ꥪ� ����� �࠭����� � �࠭���, ᮮ⢥�����- 騬 ��६���� ⨯� DOUBLE; �� PDP-11 ���� ������� ���- ����� ⨯� INT. �������� ���� ᮤ�ন� 㪠��⥫� ���饣� ����� � �- ��窥, ������ � ࠧ��� ����� � ᠬ� ������ ����࠭�⢮; �ࠢ����� ���ଠ�� � ��砫� ���뢠���� ����������. ��� ��饭�� ��ࠢ������� �� ����� ���� ࠧ���� ���������, � ᠬ ��������� ����� �������騬 ��ࠧ��. �� ���⨣����� � ������� ��ꥤ������, ��� ᮤ�ন� �������� �������� ��- ������� � ��ࠧ�� �������� ��࠭��⥫쭮�� �� ��ࠢ������� ⨯�: TYPEDEF INT ALIGN; /*FORCES ALIGNMENT ON PDP-11*/ UNION HEADER \( /*FREE BLOCK HEADER*/ STRUCT \( UNION HEADER *PTR; /*NEXT FREE BLOCK*/ UNSIGNED SIZE; /*SIZE OF THIS FREE BLOCK*/ \) S; ALIGN X; /*FORCE ALIGNMENT OF BLOCKS*/ \); TYPEDEF UNION HEADER HEADER; �㭪�� ALLOC ���㣫�� �ॡ㥬� ࠧ��� � ᨬ����� �� �㦭��� � ������ ࠧ��� ���������; 䠪��᪨� ����, ����� �㤥� �뤥���, ᮤ�ন� �� ���� ������� �����, �।�����砥��� ��� ᠬ��� ���������, � �� � ���� ���祭��, ��� �����뢠���� � ���� SIZE ���������. �����⥫�, ����- �頥�� �㭪樥� ALLOC, 㪠�뢠�� �� ������ ����࠭��- ��, � �� �� ᠬ ���������. STATIC HEADER BASE; /*EMPTY LIST TO GET STARTED*/ STATIC HEADER *ALLOCP=NULL; /*LAST ALLOCATED BLOCK*/ CHAR *ALLOC(NBYTES)/*GENERAL-PURPOSE STORAGE ALLOCATOR*/ UNSIGNED NBYTES; \( HEADER *MORECORE(); REGISTER HEADER *P, *G; REGISTER INT NUNITS; NUNITS=1+(NBYTES+SIZEOF(HEADER)-1)/SIZEOF(HEADER); IF ((G=ALLOCP)==NULL) \( /*NO FREE LIST YET*/ BASE.S PTR=ALLOCP=G=&BASE; BASE.S.SIZE=0; \) - 182 - FOR (P=G>S.PTR; ; G=P, P=P->S.PTR) \( IF (P->S.SIZE>=NUNITS) \( /*BIG ENOUGH*/ IF (P->S.SIZE==NUNITS) /*EXACTLY*/ G->S.PTR=P->S.PTR; ELSE \( /*ALLOCATE TAIL END*/ P->S.SIZE-=NUNITS; P+=P->S.SIZE; P->S.SIZE=NUNITS; \) ALLOCP=G; RETURN((CHAR *)(P+1)); \) IF(P==ALLOCP) /*WRAPPED AROUND FREE LIST*/ IF((P=MORECORE(NUNITS))==NULL) RETURN(NULL); /*NONE LEFT*/ \) \) ��६����� BASE �ᯮ������ ��� ��砫� ࠡ���. � ALLOCP ����� ���祭�� NULL, ��� � ��砥 ��ࢮ�� ���饭�� � ALLOC, � ᮧ������ ������� ����� ᯨ᮪: �� ��⮨� �� ������� ����� ࠧ��� ��� � 㪠��⥫� �� ᠬ��� ᥡ�. � �� ��砥 ��⥬ ������� ����� ᯨ᮪. ���� ������� ����� ���室�饣� ࠧ��� ��稭����� � ⮣� ���� (ALLOCP), ��� �� ������ ������ ����; ⠪�� ���⥣�� ��- ������ ��࠭��� ����த����� ��᪠. � ������ 誮� ����让 ����, � ���짮��⥫� �।�������� ��� 墮�⮢�� ����; �� �ਢ���� � ⮬�, �� � ��������� ��室���� ����� �㦭� �������� ⮫쪮 ��� ࠧ���. �� ��� ����� �����頥- �� ���짮��⥫� 㪠��⥫� 㪠�뢠�� �� ����⢨⥫쭮 - ������ �������, ������� �� ������� ����� ���������. ����- � �������� �� �, �� �㭪�� ALLOC ��। �����饭��� "P" �८�ࠧ�� ��� � 㪠��⥫� �� ᨬ����. �㭪�� MORECORE ����砥� ������ �� ����樮���� ���- ��. ��⠫� ⮣�, ��� �� �����⢫����, ��������, ����筮, �� ��⥬� � ��⥬�. �� ��⥬� UNIX �窠 �室� SBRK(N) �����頥� 㪠��⥫� �� "N" �������⥫��� ���⮢ ����- �.(㪠��⥫� 㤢���⢮��� �ᥬ ��࠭�祭�� �� ��ࠢ����- ���). ��� ��� ����� � ��⥬� �� �뤥����� ����� ���� �ࠢ��⥫쭮 ��ண�� ����樥�, �� �� �⨬ ������ �� �� ������ ���饭�� � �㭪樨 ALLOC. ���⮬� �㭪�� MORECORE ���㣫�� ���ॡ������� � ������ �� ����襣� ���祭��; ��� ����訩 ���� �㤥� ��⥬ ࠧ����� ⠪, ��� ����室���. ����⠡������ ����稭� ���� ��ࠬ��, ����� ����� ���� �����࠭ � ᮮ⢥��⢨� � ����室�������. - 183 - #DEFINE NALLOC 128 /*#UNITS TO ALLOCATE AT ONCE*/ STATIC HEADER *MORECORE(NU) /*ASK SYSTEM FOR MEMORY*/ UNSIGNED NU; \( CHAR *SBRK(); REGISTER CHAR *CP; REGISTER HEADER *UP; REGISTER INT RNU; RNU=NALLOC*((NU+NALLOC-1)/NALLOC); CP=SBRK(RNU*SIZEOF(HEADER)); IF ((INT)CP==-1) /*NO SPACE AT ALL*/ RETURN(NULL); UP=(HEADER *)CP; UP->S.SIZE=RNU; FREE((CHAR *)(UP+1)); RETURN(ALLOCP); \) � ����� �� ��⠫��� ������� ����࠭�⢠, � ��- ��� SBRK �����頥� "-1", ��� NULL �� �� ���訬 �롮. ��� ��������� �ࠢ����� "-1" ������ ���� �८�ࠧ����� � ⨯� INT. ����� ��室���� �������⭮ �ᯮ�짮���� � �८�ࠧ������ (��ॢ��) ⨯��, �⮡� ���ᯥ��� ��।����- ��� ������ᨬ���� �㭪権 �� ��⠫�� �।�⠢����� 㪠���- ��� �� ࠧ����� ��設��. � ������ - ᠬ� �㭪�� FREE. ��稭�� � ALLOCP, ��� ���� ��ᬠ�ਢ��� ����� ᯨ᮪ � ���᪥ ���� ��� �������� ������� �����. �� ���� ��室���� ���� ����� ���� �������騬� �������, ���� � ����� �� ���殢 ᯨ᪠. � �� ��砥, � ������訩�� ���� �ਬ몠�� � ������ �� �ᥤ���, ᬥ��� ����� ��ꥤ�������. ������� �㦭� ⮫�- �� ��⥬, �⮡� 㪠��⥫� 㪠�뢠�� �� �, �� �㦭�, � ��- �� ࠧ���� �뫨 ��⠭������ �ࠢ��쭮. FREE(AP) /*PUT BLOCKE AP IN FREE LIST*/ CHAR *AP; \( REGISTER HEADER *P, *G; P=(HEADER*)AP-1; /*POINT TO HEADER*/ FOR (G=ALLOCP; !(P>G && P>G->S.PTR);G=G->S.PTR) IF (G>=G->S.PTR && (P>G \!\! P<G->S.PTR)) BREAK; /*AT ONE END OR OTHER*/ IF (P+P->S.SIZE==G->S.PTR)\(/*JOIN TO UPPER NBR*/ P->S.SIZE += G->S.PTR->S.SIZE; P->S.PTR = G->S.PTR->S.PTR; \) ELSE P->S.PTR = G->S.PTR; IF (G+G->S.SIZE==P) \( /*JOIN TO LOWER NBR*/ G->S.SIZE+=P->S.SIZE; G->S.PTR=P->S.PTR; \) ELSE G->S.PTR=P; ALLOCP = G; \) - 184 - ���� ��।������ ����� �� �� ��� ������ �� ��- ����㥬�� ��設�, �ਢ������� ��� �ணࠬ�� �����뢠��, ��� ��� ����ᨬ���� ����� ॣ㫨��� � ��࠭���� ���쬠 ������让 ����� �ணࠬ��. �ᯮ�짮����� TYPEDEF � UNION �������� �ࠢ����� � ��ࠢ�������� (�� ����, �� �㭪- �� SBRK ���ᯥ稢��� ���室�騩 㪠��⥫�). ��ॢ��� ⨯�� �࣠������ �믮������ ��� �८�ࠧ������ ⨯�� � ���� �ࠢ������ � ��㤠筮 ࠧࠡ�⠭�� ��⥬�� ����䥩ᮬ. � ��� ��ᬮ�७�� ����� ������� �易�� � ��।���- ���� �����, ��騩 ���室 ࠢ�� ��ࠧ�� �ਬ���� � � ��㣨� �����. ��ࠦ����� 8-6. -------------- �㭪�� �� �⠭���⭮� ������⥪� CALLOC(N,SIZE) �����- 頥� 㪠��⥫� �� "N" ��ꥪ⮢ ࠧ��� SIZE, ��祬 ᮮ⢥�- ������ ������ ���樠��������� �� ���. ������ �ணࠬ�� ��� CALLOC, �ᯮ���� �㭪�� ALLOC ���� � ����⢥ ��ࠧ�, ���� ��� �㭪��, � ���ன �ந�室�� ���饭��. ��ࠦ����� 8-7. --------------- �㭪�� ALLOC �ਭ����� ���ॡ������ ࠧ���, �� ��- ��� ��� �ࠢ�����������; �㭪�� FREE ��������, �� �� ����, ����� ��� ������ �������, ᮤ�ন� �ࠢ��쭮� ���祭�� � ���� ࠧ���. �ᮢ��襭���� �� ��楤���, ����⨢ ����� �ᨫ�� �� ���� �訡��. ��ࠦ����� 8-8. --------------- ������ �㭪�� BFREE(P,N), ����� ����砥� �ந�����- �� ���� "P" �� "N" ᨬ����� � ᯨ᮪ ������ ������, �- ࠢ�塞� �㭪�ﬨ ALLOC � FREE. � ������� �㭪樨 BFREE ���짮��⥫� ����� � �� �६� ��������� � ����� ᯨ- ᮪ ����᪨� ��� ���譨� ���ᨢ.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.