{"id":825,"date":"2011-01-18T20:35:51","date_gmt":"2011-01-18T20:35:51","guid":{"rendered":"https:\/\/guven.atbakan.net\/?p=825"},"modified":"2012-06-19T13:53:58","modified_gmt":"2012-06-19T13:53:58","slug":"linuxta-sikistirilmis-yedek-olusturma","status":"publish","type":"post","link":"https:\/\/guven.atbakan.com\/blog\/tr\/linuxta-sikistirilmis-yedek-olusturma\/","title":{"rendered":"Linux&#8217;ta S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f Yedek Olu\u015fturma"},"content":{"rendered":"<p>Zay\u0131f C++ bilgimle istenilen dosyay\u0131\/klas\u00f6r\u00fc istenilen klas\u00f6re yedekleyen bir program yazd\u0131m.<\/p>\n<p>Ancak bu program \u00f6yle ah\u0131m \u015fah\u0131m de\u011fil. Zaten Linux komut sat\u0131r\u0131n\u0131 kullan\u0131yor. Linuxta konsola yazd\u0131\u011f\u0131n\u0131z kodu k\u0131smen bu program i\u00e7erisine yaz\u0131yorsunuz. Bunu konsoldan da yapabilirim diyebilirsiniz, ancak isterseniz cronjob ile diledi\u011finiz zaman program\u0131n \u00e7al\u0131\u015ft\u0131r\u0131l\u0131p yedek almas\u0131n\u0131 sa\u011flayabilirsiniz. Ben bilgisayar kapan\u0131rken veya yeniden ba\u015flat\u0131l\u0131rken yedek almas\u0131n\u0131 sa\u011flamak i\u00e7in yapaca\u011f\u0131m bunu.<\/p>\n<p>Program\u0131n kodlar\u0131 a\u015f\u0131r\u0131 derece de amele usul\u00fc olabilir, kabul\u00fcmd\u00fcr. Malum \u00fcniversitemizde C++ \u00f6\u011fretece\u011fiz dediler ama for,while ve bir ka\u00e7 string fonksiyonu d\u0131\u015f\u0131nda hi\u00e7bir\u015fey g\u00f6stermediler. Buna ra\u011fmen ara\u015ft\u0131rmac\u0131 ki\u015filik olarak i\u015fimi g\u00f6recek bu program\u0131 yazmay\u0131 ba\u015fard\u0131m :) Kodlar\u0131n devam\u0131nda a\u00e7\u0131klamalarda bulunaca\u011f\u0131m.<!--more--><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;iostream&gt;\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;sys\/types.h&gt;\n#include &lt;sys\/wait.h&gt;\n#include &lt;string.h&gt;\n#include &lt;time.h&gt;\n\nusing namespace std;\n\nint RunCommand(const char *strCommand)\n{\n\tint iForkId, iStatus;\n\tiForkId = vfork();\n\tif (iForkId == 0)\t\/\/ This is the child \n\t{\n\t\tiStatus = execl(&quot;\/bin\/sh&quot;,&quot;sh&quot;,&quot;-c&quot;, strCommand, (char*) NULL);\n\t\texit(iStatus);\t\/\/ We must exit here, \n\t\t\t\t\/\/ or we will have multiple\n\t\t\t\t\/\/ mainlines running...  \n\t}\n\telse if (iForkId &gt; 0)\t\/\/ Parent, no error\n\t{\n\t\tiStatus = 0;\n\t}\n\telse\t\/\/ Parent, with error (iForkId == -1)\n\t{\n\t\tiStatus = -1;\n\t}\n\treturn(iStatus);\n} \n\nint main(int argc, char *argv&#x5B;])\n{\n\tint iNumProc = 0, iChildiStatus = 0, iStatus = 0, iDeadId = 0;\n\tint iExitFlag = 0;\n\t\t\n    time_t rawtime;\n\tstruct tm * timeinfo;\n\tchar buffer &#x5B;80];\n\n\ttime ( &amp;rawtime );\n\ttimeinfo = localtime ( &amp;rawtime );\n\n\tstrftime (buffer,80,&quot;%Y_%m_%d-%H.%M.tar.gz&quot;,timeinfo);\n\t\n\t\/\/puts (buffer);\n\t\/\/cout&lt;&lt;buffer;\n\t\n\t\t\n\tchar command&#x5B;100] = &quot;tar cvzf &quot;;\n\tchar topath&#x5B;100] = &quot;\/home\/guven\/yedekler\/&quot;;\n\tchar tocompress&#x5B;100] = &quot;\/home\/guven\/public_html\/&quot;;\n\tchar topath2&#x5B;200];\n\t\/\/ Yedek olu\u015fturulacak dosya\n\tstrcat(topath2,topath);strcat(topath2,buffer);\n\t\n\t\/\/komuta yedek dosyas\u0131 ekleniyor\n\tstrcat(command,topath2);\n\tstrcat(command,&quot; &quot;);\n\t\/\/dosyaya s\u0131k\u0131\u015ft\u0131r\u0131lacak konum-dosya ekleniyor\n\tstrcat(command,tocompress);\n\t\n\t\/\/if (Exists( topath ) )\n\t\/\/{\n\t\t\n\t\tclock_t baslangic = clock(); \/\/ performans bilgisi\n\t\t\n\t\tiStatus = RunCommand(command);\n\t\tif (!iStatus)\n\t\t\tiNumProc++;\n\t\/\/}\n\t\n\t\/\/ Wait till the commands complete\n\twhile (iNumProc &amp;&amp; !iExitFlag)\n\t{\n\t\tiDeadId = waitpid(-1, &amp;iChildiStatus, WNOHANG);\n\t\tif (iDeadId &lt; 0)\n\t\t{\n\t\t\t\/\/ Wait id error - exit the loop\n\t\t\tiExitFlag = 1;\n\t\t}\n\t\telse if (iDeadId &gt; 0)\n\t\t{\n\t\t\tiNumProc--;\n\t\t\t\/\/ You can check the process exit iStatus here - its in the\n\t\t\t\/\/ iChildiStatus variable\n\t\t}\n\t\telse  \/\/ iDeadId == 0, no processes died\n\t\t{\n\t\t\tsleep(3);\t\/\/ give them time to die\n\t\t}\n\t} \n\n\tclock_t bitis = clock(); \/\/ performans bilgisi\n\tcout&lt;&lt;endl&lt;&lt;&quot;Bu islem &quot;&lt;&lt;(((double)bitis - (double)baslangic) \/ (double)CLOCKS_PER_SEC)&lt;&lt;&quot; saniyede yapildi.&quot;&lt;&lt;endl;\n\t\n\treturn 0;\n}\n<\/pre>\n<ul>\n<li>Program\u0131n 52. sat\u0131r\u0131ndaki kodda yede\u011fin yap\u0131laca\u011f\u0131 hedefi belirtiyorsunuz. \u015e\u00f6yle ki ben \/home\/guven\/yedekler klas\u00f6r\u00fcne at\u0131yorum s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f dosyay\u0131.<\/li>\n<li>53. sat\u0131rdaki kodda ise yedek al\u0131nacak dosya veya klas\u00f6r\u00fc giriyorsunuz. \u00d6rne\u011fin ben public_html klas\u00f6r\u00fcm\u00fc yedekliyorum.<\/li>\n<li>Programda klas\u00f6r\u00fc\/dosya var m\u0131 yok mu kontrol\u00fc bulunmuyor. Dolay\u0131s\u0131yla hedef ve kaynak dosyalar\u0131n\u0131z\u0131n\/klas\u00f6rlerinizin mutlaka bulunmas\u0131 gerekmektedir, yoksa program hata verir ki normali de budur :)<\/li>\n<li>Yedek dosyas\u0131n\u0131n ismi \u015fu \u015fekilde olu\u015fturulmaktad\u0131r: 2011_01_18-19.31.tar.gz Yani Y\u0131l_Ay_G\u00fcn-Saat.Dakika.tar.gz.<\/li>\n<\/ul>\n<p>\u015eimdilik bunlar akl\u0131ma geldi, kafan\u0131za tak\u0131lan bir\u015fey olursa yorum b\u00f6l\u00fcm\u00fcnden sorabilirsiniz. Bir sonraki yaz\u0131mda bu program\u0131 bilgisayar\u0131n kapan\u0131\u015f servislerine eklemeyi g\u00f6sterece\u011fim, tabii ki \u00f6ncelikle bu i\u015flemi do\u011fru d\u00fczg\u00fcn yapabilmem gerekecek :)<\/p>\n<p><strong>Kaynak\u00e7a<\/strong><br \/>\n<a href=\"http:\/\/kengine.sourceforge.net\/tutorial\/g\/execute-command-eng.htm\" target=\"_blank\">Execute bash commands and running programs by c++<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zay\u0131f C++ bilgimle istenilen dosyay\u0131\/klas\u00f6r\u00fc istenilen klas\u00f6re yedekleyen bir program yazd\u0131m. Ancak bu program \u00f6yle ah\u0131m \u015fah\u0131m de\u011fil. Zaten Linux komut sat\u0131r\u0131n\u0131 kullan\u0131yor. Linuxta konsola yazd\u0131\u011f\u0131n\u0131z kodu k\u0131smen bu program i\u00e7erisine yaz\u0131yorsunuz. Bunu konsoldan da yapabilirim diyebilirsiniz, ancak isterseniz cronjob ile diledi\u011finiz zaman program\u0131n \u00e7al\u0131\u015ft\u0131r\u0131l\u0131p yedek almas\u0131n\u0131 sa\u011flayabilirsiniz. Ben bilgisayar kapan\u0131rken veya yeniden ba\u015flat\u0131l\u0131rken yedek [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4],"tags":[176,178,179,180,181],"class_list":["post-825","post","type-post","status-publish","format-standard","hentry","category-yazilim","tag-bash-ile-yedek-alma-islemi","tag-c-bash-komutlari-calistirma","tag-c-ile-konsol-kullanimi","tag-execute-bash-commands-and-running-programs-by-c","tag-linux-yedekleme"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/posts\/825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/comments?post=825"}],"version-history":[{"count":1,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/posts\/825\/revisions"}],"predecessor-version":[{"id":1154,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/posts\/825\/revisions\/1154"}],"wp:attachment":[{"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/media?parent=825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/categories?post=825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guven.atbakan.com\/blog\/wp-json\/wp\/v2\/tags?post=825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}