36-1-¶ó.ÆÄÀÏ ÀÔÃâ·Â

ÀÔÃâ·Â ½ºÆ®¸²À¸·Î ÆÄÀÏ ÀÔÃâ·Âµµ ÇÒ ¼ö Àִµ¥ C¿¡¼­¿Í ¸¶Âù°¡Áö·Î ÆÄÀÏÀ̳ª ÄܼÖÀ̳ª ¾îÂ÷ÇÇ ½ºÆ®¸²À̶ó´Â ¸é¿¡¼­´Â µ¿ÀÏÇϹǷΠ¶È°°Àº ¹æ¹ýÀ¸·Î ´Ù·ê ¼ö ÀÖ´Ù. C ¼öÁØ¿¡¼­ ÆÄÀÏ ÀÔÃâ·ÂÀ» ÀÌ¹Ì ÇØ º» °æÇèÀÌ ÀÖ´Ù¸é ÀÌ Ç×ÀÇ ³»¿ëÀº Çü½Ä¸¸ Á¶±Ý ´Ù¸¥ Á¤µµ¿¡ ºÒ°úÇϹǷΠÆÄÀÏ ÀÔÃâ·Â °úÁ¤¿¡ ´ëÇÑ »ó¼¼ÇÑ ¼³¸íÀº »ý·«ÇÏ°í °£·«ÇÏ°Ô »ç¿ë¹ý Á¤µµ¸¸ ¼Ò°³Çϵµ·Ï ÇÑ´Ù.

¾ÕÂÊ ÀÔÃâ·Â ½ºÆ®¸²ÀÇ Å¬·¡½º °èÃþµµ¸¦ º¸¸é ÆÄÀÏ ÀÔÃâ·Â ½ºÆ®¸²ÀÎ basic_i(o)streamÀº Äֿܼë ÀÔÃâ·Â Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓµÈ´Ù. µû¶ó¼­ >>, << ¿¬»êÀÚ ¹× ¸â¹ö ÇÔ¼ö, Á¶Á¤ÀÚ µîÀ» ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸ ÀÔÃâ·Â ´ë»óÀÌ ÆÄÀÏÀ̶ó´Â ¸Þ¸ð¸® ¿ÜºÎÀÇ ÀåÄ¡À̹ǷΠºü¸¥ ¾×¼¼½º¸¦ À§ÇØ ¿­°í ´Ý´Â µ¿ÀÛ°ú ¼¶¼¼ÇÑ ¿¡·¯ 󸮸¦ ÇØ¾ß ÇÑ´Ù´Â Á¤µµ¸¸ ´Ù¸£´Ù. ÀϹÝÈ­¸¦ À§ÇØ ÆÄÀÏ ÀÔÃâ·Â Ŭ·¡½ºµµ ÅÛÇø´À¸·Î Á¤ÀǵǾî ÀÖÀ¸¸ç ÀÌ ÅÛÇø´À¸·ÎºÎÅÍ ³× °³ÀÇ Æ¯¼öÈ­ ¹öÀüÀ» Á¤ÀÇÇÑ´Ù.

 

typedef basic_ifstream<char, char_traits<char> > ifstream;

typedef basic_ofstream<char, char_traits<char> > ofstream;

typedef basic_ifstream<wchar_t, char_traits<wchar_t> > wifstream;

typedef basic_ofstream<wchar_t, char_traits<wchar_t> > wofstream;

 

i(o)fstream Ŭ·¡½º´Â char ŸÀÔÀ» ´ë»óÀ¸·Î ÇÏ´Â ÆÄÀÏ ÀÔÃâ·Â Ŭ·¡½ºÀ̸ç wi(o)fstreamÀº wchar_t ŸÀÔÀ» ´ë»óÀ¸·Î ÇÏ´Â À¯´ÏÄÚµå ÆÄÀÏ ÀÔÃâ·Â Ŭ·¡½ºÀÌ´Ù. ÀÌ Å¬·¡½ºµéÀº fstream Çì´õ ÆÄÀÏ¿¡ ¼±¾ðµÇ¾î ÀÖÀ¸¹Ç·Î ÆÄÀÏ ÀÔÃâ·ÂÀ» ÇÏ·Á¸é ¹Ýµå½Ã ÀÌ Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµåÇØ¾ß ÇÑ´Ù. ¸ÕÀú ÆÄÀÏ Ãâ·Â ¿¹Á¦ºÎÅÍ ÀÛ¼ºÇØ º¸ÀÚ. C¿¡¼­¿Í ¸¶Âù°¡Áö·Î ÆÄÀÏ ÀÔÃâ·ÂÀ» Çϱâ À§Çؼ­´Â ¹öÆÛ¸¦ ÁغñÇØ¾ß ÇϹǷΠÆÄÀÏÀ» ¿­°í ´Ý´Â 󸮰¡ ÇÊ¿äÇÏ´Ù.

 

¿¹ Á¦ : cppfilewrite

#include <Turboc.h>

#include <iostream>

#include <fstream>

using namespace std;

 

void main()

{

     ofstream f;

 

     f.open("c:\\cpptest.txt");

     f << "String " << 1234 << endl;

     f.close();

}

 

ofstreamÀÇ °´Ã¼ f¸¦ ¼±¾ðÇÏ°í open ÇÔ¼ö·Î Ãâ·ÂÇÏ°íÀÚ ÇÏ´Â ÆÄÀÏÀ» ¿¬´Ù. open ÇÔ¼öÀÇ Àμö·Î ¿­°íÀÚ ÇÏ´Â ÆÄÀÏÀÇ À̸§À» Àü´ÞÇϴµ¥ ¿ÏÀü °æ·Î¸¦ ÁÙ ¼öµµ ÀÖ°í »ó´ë °æ·Î¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. open ÇÔ¼ö´Â ÆÄÀÏÀÌ ¾øÀ¸¸é »õ·Î ¸¸µé°í ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é µ¤¾î¾´´Ù. °´Ã¼¸¦ ¼±¾ðÇÏ°í open ÇÔ¼ö·Î ÆÄÀÏÀ» ¿©´Â µÎ °úÁ¤À» °ÅÄ¡´Â ´ë½Å »ý¼ºÀÚ·Î ¿ÀÇÂÇÒ ÆÄÀÏÀÇ À̸§À» °ð¹Ù·Î Àü´ÞÇÒ ¼öµµ ÀÖ´Ù.

 

ofstream f("c:\\cpptest.txt");

 

ÀÌ ¹®Àå¿¡ ÀÇÇØ Ãâ·Â °´Ã¼ f´Â µð½ºÅ©»óÀÇ cpptest.txt ÆÄÀÏ°ú ¿¬°áµÇ¸ç ÀÌ °´Ã¼·Î Ãâ·ÂÀ» º¸³»¸é ¹°¸®ÀûÀÎ ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù. Ãâ·ÂÇÒ ¶§´Â << ¿¬»êÀÚ¸¦ »ç¿ëÇϴµ¥ Äֿܼ¡¼­¿Í ¸¶Âù°¡Áö·Î ¸ðµç ±âº» ŸÀÔ¿¡ ´ëÇØ Ãâ·ÂÇÒ ¼ö ÀÖÀ¸¸ç ¿¬¼âÀûÀÎ Ãâ·Âµµ °¡´ÉÇÏ´Ù. Ãâ·ÂÀ» ¿Ï·áÇßÀ¸¸é close ÇÔ¼ö·Î ÆÄÀÏÀ» ´Ý´Â´Ù. ¿¹Á¦¸¦ ½ÇÇàÇϸé C µå¶óÀ̺êÀÇ ·çÆ® µð·ºÅ丮¿¡ cpptest.txt¶ó´Â ÆÄÀÏÀÌ »ý¼ºµÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº ÀÌ ÆÄÀÏÀ» ´Ù½Ã ÀÐ¾î º¸ÀÚ.

 

¿¹ Á¦ : cppfileread

#include <Turboc.h>

#include <iostream>

#include <fstream>

using namespace std;

 

void main()

{

     ifstream f;

     char str[128];

     int i;

 

     f.open("c:\\cpptest.txt");

     f >> str >> i;

     cout << str << i << endl;

     f.close();

}

 

ÆÄÀϷκÎÅÍÀÇ ÀÔ·ÂÀ» À§ÇØ ifstream Ŭ·¡½ºÀÇ °´Ã¼ f¸¦ ¼±¾ðÇÏ°í open ÇÔ¼ö·Î ÆÄÀÏÀ» ¿­¾ú´Âµ¥ »ý¼ºÀÚ¿¡¼­ ¹Ù·Î ´ë»ó ÆÄÀÏÀ» ÁöÁ¤ÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. f·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÀÐÀ» ¶§´Â >> ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹Á¦¿¡¼­´Â str ¹è¿­¿¡ ¹®ÀÚ¿­À» Àаí i¿¡ Á¤¼ö¸¦ ÀÐÀº ÈÄ È®ÀÎÀ» À§ÇØ È­¸éÀ¸·Î ´Ù½Ã Ãâ·ÂÇØ º¸¾Ò´Ù. ÀÔÃâ·ÂÀ» ¿Ï·áÇÑ ÈÄ close·Î ÆÄÀÏÀ» ´Ý´Â´Ù.

ÆÄÀÏÀº ¸Þ¸ð¸® ¿ÜºÎ¿¡ Á¸ÀçÇϱ⠶§¹®¿¡ ¿¡·¯°¡ ¹ß»ýÇÒ È®·üÀÌ ¾ÆÁÖ ³ôÀ¸¹Ç·Î ¿ÀÇÂÇÒ ¶§ ÆÄÀÏÀÌ Á¦´ë·Î ¿­·È´ÂÁö Ç×»ó È®ÀÎÇØ¾ß ÇÑ´Ù. ¿¡·¯ ¹ß»ý ¿©ºÎ´Â ¿ÀÇ Á÷ÈÄ¿¡ °´Ã¼ÀÇ is_open ¸â¹ö ÇÔ¼ö·Î È®ÀÎÇÒ ¼ö Àִµ¥ ÀÌ ÇÔ¼ö´Â Àμö¸¦ ÃëÇÏÁö ¾ÊÀ¸¸ç ¼º°ø ¿©ºÎ¸¦ Ç¥ÇöÇÏ´Â bool°ªÀ» ¸®ÅÏÇÑ´Ù. is_open È£Ãâ¹®À» if¹®ÀÇ Á¶°Ç½Ä¿¡ »ç¿ëÇÏ¸é ¼º°ø ¿©ºÎ¿¡ µû¸¥ µ¿ÀÛÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : is_open

#include <Turboc.h>

#include <iostream>

#include <fstream>

using namespace std;

 

void main()

{

     ifstream f;

 

     f.open("c:\\neverexist.txt");

     if (f.is_open()) {

          cout << "ÆÄÀÏ ¿­±â ¼º°ø" << endl;

          f.close();

     } else {

          cout << "ÆÄÀÏ ¿­±â ½ÇÆÐ" << endl;

     }

}

 

¿¹Á¦¿¡¼­´Â ¿¡·¯¸¦ À¯µµÇϱâ À§ÇØ ½ÇÁ¦·Î Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀ» ¿­¾î º¸¾Ò´Âµ¥ ÀÌ °æ¿ì is_open ÇÔ¼ö´Â ¿­±â¿¡ ½ÇÆÐÇß´Ù´Â Àǹ̷Πfalse¸¦ ¸®ÅÏÇÑ´Ù. ÇÁ·Î±×·¥Àº ÆÄÀÏ ¿­±â¿¡ ¼º°øÇßÀ» ¶§¸¸ ÆÄÀÏÀ» ¾×¼¼½ºÇØ¾ß ÇÏ¸ç ½ÇÆÐÇßÀ» °æ¿ì´Â ÀûÀýÇÏ°Ô ¿¡·¯ ó¸®ÇØ¾ß ÇÑ´Ù.

ÆÄÀÏÀ» ¿©´Â open ÇÔ¼öÀÇ ¿ÏÀüÇÑ ¿øÇüÀº ´ÙÀ½°ú °°´Ù. ´ë»ó ÆÄÀÏÀÇ °æ·Î ¿Ü¿¡µµ ÆÄÀÏÀ» ¾î¶»°Ô ¿­ °ÍÀÎÁö ÆÄÀÏ ¸ðµå¸¦ ÁöÁ¤ÇÏ´Â µÎ ¹ø° Àμö°¡ ÀÖÀ¸¸ç µðÆúÆ®°ªÀÌ ÁöÁ¤µÇ¾î ÀÖ´Ù. Ãâ·Â¿ë°ú ÀԷ¿ëÀÇ µðÆúÆ® ¸ðµå°¡ ´Ù¸£°Ô ¼³Á¤µÇ¾î Àִµ¥ ÀԷ¿ëÀº ÀÐÀ» ¼ö¸¸ ÀÖ°í Ãâ·Â¿ëÀº ¾µ ¼ö¸¸ ÀÖ´Ù.

 

void ifstream::open(const char *s, ios_base::openmode mode = ios_base::in);

void ofstream::open(const char *s, ios_base::openmode mode = ios_base::out | ios_base::trunc);

 

open ÇÔ¼ö¿Í µ¿ÀÏÇÑ µ¿ÀÛÀ» ÇÏ´Â »ý¼ºÀÚÀÇ ¿øÇüµµ ÀÌ¿Í °°´Ù. ÆÄÀÏ ¸ðµå´Â ios_base¿¡ Á¤ÀÇµÈ »ó¼öµéÀÌ¸ç ¿©·¯ °³ÀÇ ¸ðµå¸¦ OR ¿¬»êÀÚ·Î ¹­¾î¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏ ¸ðµåÀÇ Á¾·ù´Â ´ÙÀ½°ú °°´Ù.

 

¸ðµå

¼³¸í

ios_base::out

Ãâ·Â¿ëÀ¸·Î ÆÄÀÏÀ» ¿¬´Ù.

ios_base::in

ÀԷ¿ëÀ¸·Î ÆÄÀÏÀ» ¿¬´Ù.

ios_base::app

ÆÄÀÏ ³¡¿¡ µ¥ÀÌÅ͸¦ µ¡ºÙÀδÙ. µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â °Í¸¸ °¡´ÉÇÏ´Ù.

ios_base::ate

ÆÄÀÏÀ» ¿­ÀÚ ¸¶ÀÚ ÆÄÀÏ ³¡À¸·Î FP¸¦ º¸³½´Ù. FP¸¦ ÀÓÀÇ À§Ä¡·Î ¿Å±æ ¼ö ÀÖ´Ù.

ios_base::trunc

ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÒ °æ¿ì Å©±â¸¦ 0À¸·Î ¸¸µç´Ù.

ios_base::binary

ÀÌÁø ÆÄÀÏ ¸ðµå·Î ¿¬´Ù.

 

open ÇÔ¼ö¿¡ µðÆúÆ®·Î ÁöÁ¤µÇ¾î ÀÖ´Â ÆÄÀÏ ¸ðµå¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é µÎ ¹ø° Àμö¿¡ ¸í½ÃÀûÀ¸·Î ¿øÇÏ´Â ÆÄÀÏ ¸ðµå¸¦ ÁöÁ¤ÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î ÆÄÀÏÀ» ¿­ÀÚ ¸¶ÀÚ µÚ¿¡ µ¡ºÙÀ̱⸦ ÇÏ°í ½ÍÀ¸¸é out ¸ðµå¿Í app ¸ðµå¸¦ °°ÀÌ ÁöÁ¤ÇÑ´Ù. ÀԷ°ú Ãâ·ÂÀ» ¸ðµÎ ÇÒ ¼ö ÀÖ´Â ¸ðµå·Î ¿­°í ½ÍÀ¸¸é fstream °´Ã¼¸¦ »ý¼ºÇÏ°í in, out ¸ðµå¸¦ ¸ðµÎ ÁöÁ¤ÇÏ¸é µÈ´Ù. fstreamÀº istream, ostreamÀ¸·ÎºÎÅÍ ´ÙÁß »ó¼ÓµÈ iostreamÀ¸·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æ ÀÔ·Â, Ãâ·Â¿ë ¹öÆÛ¸¦ °¢°¢ Çϳª¾¿ °¡Áö¹Ç·Î ÀÔÃâ·Â °â¿ëÀÇ °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ´Ù.

´ÙÀ½ ¿¹Á¦´Â ÆÄÀÏ ÀÔÃâ·Â °´Ã¼¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ» º¹»çÇÑ´Ù. C µå¶óÀ̺êÀÇ ·çÆ®¿¡ ÀÖ´Â dummy.txt¸¦ º¹»ç ¿øº»À¸·Î »ç¿ëÇϹǷΠÀÌ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸·Á¸é ¾Æ¹« ÆÄÀÏÀ̳ª ·çÆ®¿¡ º¹»çÇØ ³õ°í À̸§À» ¹Ù²ã ³õ¾Æ¾ß ÇÑ´Ù. ¿¹Á¦¸¦ ½ÇÇàÇÏ¸é ¶È°°Àº ³»¿ëÀ» °¡Áö´Â dummy2.txt ÆÄÀÏÀÌ »ý¼ºµÇ¾î ÀÖÀ» °ÍÀÌ´Ù.

 

¿¹ Á¦ : cppfilecopy

#include <Turboc.h>

#include <iostream>

#include <fstream>

using namespace std;

 

void main()

{

     ifstream src("c:\\dummy.txt",ios_base::in | ios_base::binary);

     if (!src.is_open()) {

          cout << "¿øº» ÆÄÀÏÀÌ ¾ø½À´Ï´Ù." << endl;

     }

     ofstream dest("c:\\dummy2.txt",ios_base::out | ios_base::trunc | ios_base::binary);

     char buf[10000];

     int nread;

 

     for (;;) {

          src.read(buf,10000);

          nread=src.gcount();

          if (nread==0) break;

          dest.write(buf,nread);

     }

     src.close();

     dest.close();

}

 

¿øº»°ú ´ë»ó ÆÄÀÏÀ» À§ÇØ µÎ °³ÀÇ ÆÄÀÏ °´Ã¼¸¦ ¼±¾ðÇ쵂 ¿øº»Àº Àб⠸ðµå·Î ¿­°í ´ë»óÀº ¾²±â ¸ðµå·Î ¿¬´Ù. ÆÄÀÏ º¹»ç´Â ÆÄÀÏ¿¡ ÀÖ´Â ³»¿ëÀ» ±×´ë·Î Àо »çº»À» ¸¸µå´Â °ÍÀ̹ǷΠÀÐ°í ¾²´Â Áß¿¡ ¾î¶°ÇÑ º¯È¯µµ ÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç ±×·¡¼­ binary Ç÷¡±×¸¦ ÁöÁ¤ÇÏ¿© ÀÌÁø ¸ðµå·Î ¿­¾ú´Ù. ÀÌÁø ¸ðµåÀÇ ÆÄÀÏÀ» ÀÐ°í ¾µ ¶§´Â ´ÙÀ½ ÇÔ¼öµéÀ» »ç¿ëÇÑ´Ù.

 

basic_istremm& read(char *s, streamsize n);

basic_ostream& write(const char *s, streamsize n);

 

ÀÐ°í ¾µ µ¥ÀÌÅÍÀÇ ½ÃÀÛ ¹øÁö¿Í Å©±â¸¦ Àμö·Î Àü´ÞÇÑ´Ù. º¹»çÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ ¿ø·ÐÀûÀε¥ ¿øº»¿¡¼­ Àо ´ë»ó ÆÄÀÏ·Î Ãâ·ÂÇϱ⸦ ¿øº»À» ´Ù ÀÐÀ» ¶§±îÁö ¹Ýº¹ÇÏ¸é µÈ´Ù. ¿¹Á¦¿¡¼­´Â 10K Å©±âÀÇ ¹öÆÛ¸¦ ÁغñÇÏ°í 10K ´ÜÀ§·Î ¿øº»À» ÀÐ¾î ´ë»ó ÆÄÀÏ·Î º¸³»´Âµ¥ ´Ü, ÆÄÀÏ ³¡¿¡¼­´Â ½ÇÁ¦ ÀÐÀº ¹ÙÀÌÆ®¸¸Å­¸¸ Ãâ·ÂÇØ¾ß ÇÑ´Ù. read ÇÔ¼ö°¡ ½ÇÁ¦ ÀÐÀº ±æÀÌ´Â gcount ÇÔ¼ö·Î Á¶»çÇÒ ¼ö ÀÖ´Ù. º¹»ç°¡ ³¡³ª¸é close ÇÔ¼ö·Î µÎ ÆÄÀÏÀ» ¸ðµÎ ´Ý´Â´Ù.

ÆÄÀÏ ¾×¼¼½º ÇÔ¼öµéÀº Ç×»ó ÆÄÀÏÀÇ ÇöÀç À§Ä¡(FP)¸¦ ÂüÁ¶Çϸç ÀÐ°í ¾´ ÈÄ¿¡ FP¸¦ µÚÂÊÀ¸·Î ¿Å±â¹Ç·Î ¼øÂ÷ÀûÀ¸·Î ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. FP¸¦ ÀÓÀÇÀÇ À§Ä¡·Î ¿Å±æ ¶§´Â ´ÙÀ½ µÎ ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ÀԷ¿ë, Ãâ·Â¿ëÀÇ FP¸¦ µû·Î À¯ÁöÇϹǷΠÇÔ¼ö°¡ µÎ °³·Î ³ª´©¾îÁ® ÀÖ´Ù. ´ÙÁß »ó¼Ó¹Þ´Â fstream °´Ã¼´Â ¹öÆÛ°¡ µÎ °³À̹ǷΠÇöÀç À§Ä¡¿¡ ÇØ´çÇÏ´Â FPµµ µÎ °³¸¦ °¡Áø´Ù.

 

basic_istream& seekg(off_type off, ios_base::seek_dir way);

basic_ostream& seekp(off_type off, ios_base::seek_dir way);

 

ù ¹ø° Àμö off´Â ¾îµð·Î À̵¿ÇÒ °ÍÀÎÁö °Å¸®¸¦ ÁöÁ¤ÇÏ¸ç µÎ ¹ø° Àμö´Â À̵¿ÀÇ ±âÁØÁ¡Àε¥ ios_base::beg´Â ÆÄÀÏÀÇ ¼±µÎ¸¦ ±âÁØÀ¸·Î Çϸç ios_base::cur´Â ÇöÀç À§Ä¡, iso_base::end´Â ÆÄÀÏÀÇ ³¡À» ±âÁØÀ¸·Î ÇÑ´Ù. FP¸¦ ÁöÁ¤ÇÏ´Â ¹æ½ÄÀº CÀÇ fseek ÇÔ¼ö¿Í »ç½Ç»ó µ¿ÀÏÇÏ´Ù. FPÀÇ ÇöÀç À§Ä¡¸¦ Á¶»çÇÏ´Â ÇÔ¼ö´Â tellp, tellgÀε¥ ¿ª½Ã µÎ °³ÀÇ FP¿¡ ´ëÇØ ÇÔ¼ö°¡ °¢°¢ Á¦°øµÈ´Ù.