#ctime #time.h #time
🔵زمان (time)
🔹تابع time
این تابع زمان فعلی سیستم را داخل متغیری که ما مشخص می کنیم قرار می دهد ولی این تابع زمان را بر حسب ثانیه بر می گرداند.
یعنی مثلا اگر زمان فعلی سیستم 00:02:34 باشد این تابع مقدار 153 را بر می گرداند به این دلیل که زمان دو دقیقه و سی و چهار ثانیه از 153 ثانیه تشکیل شده است.
حال باید با استفاده از تابع localtime و یک متغیر دیگر(که یک struct از نوع tm هست) به زمان استاندارد آن را تبدیل کنیم.
🔹پارامتر ها :
🔻مفهوم timer* :
این همان اشاره گر ازنوع time_t هست که می خواهیم زمان را داخل آن نگه داریم.
🔹مقادیر بازگشتی :
اگر تابع بتواند زمان را بگیرد تعداد ثانیه هایش را بر می گرداند ولی اگر نتواند مقدار منفی یک (1-) را بر می گرداند.
Output :
1742940573
این برنامه ابتدا یک متغیر از نوع time_t تعریف می کند بعد آدرس آن را (منظور یک اشاره گر به جایی که tim داخلش ذخیره شده) به تابع time می دهد.
این تابع هم زمان را بر حسب ثانیه داخل جایی که tim اشاره می کند قرار می دهد سپس آن نمایش می دهد.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع time
time_t time (time_t* timer);
این تابع زمان فعلی سیستم را داخل متغیری که ما مشخص می کنیم قرار می دهد ولی این تابع زمان را بر حسب ثانیه بر می گرداند.
یعنی مثلا اگر زمان فعلی سیستم 00:02:34 باشد این تابع مقدار 153 را بر می گرداند به این دلیل که زمان دو دقیقه و سی و چهار ثانیه از 153 ثانیه تشکیل شده است.
حال باید با استفاده از تابع localtime و یک متغیر دیگر(که یک struct از نوع tm هست) به زمان استاندارد آن را تبدیل کنیم.
🔹پارامتر ها :
🔻مفهوم timer* :
این همان اشاره گر ازنوع time_t هست که می خواهیم زمان را داخل آن نگه داریم.
🔹مقادیر بازگشتی :
اگر تابع بتواند زمان را بگیرد تعداد ثانیه هایش را بر می گرداند ولی اگر نتواند مقدار منفی یک (1-) را بر می گرداند.
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
Time_t tim;
Time(&tim);
cout<<tim<<endl;
}
Output :
1742940573
این برنامه ابتدا یک متغیر از نوع time_t تعریف می کند بعد آدرس آن را (منظور یک اشاره گر به جایی که tim داخلش ذخیره شده) به تابع time می دهد.
این تابع هم زمان را بر حسب ثانیه داخل جایی که tim اشاره می کند قرار می دهد سپس آن نمایش می دهد.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #clock
🔵زمان (time)
🔹تابع clock
آیا دوست دارید بدانید برنامه تان چند ثانیه برای اجرا زمان گرفته است ؟؟؟
این تابع به این صورت کار می کند که زمان سپری شده توسط CPU که برای برنامه ی شما مصرف شده را بر می گرداند ولی مقداری که این تابع بر می گرداند بر حسب clock_t هست.
🔹مقادیر بازگشتی :
تابع اگر بتواند زمان را محاسبه کند یک عدد در قالب clock برای ما می فرستد اگر نتواند مقدار منفی یک (1-) را بر می گرداند.
⚠️ ممکن است شما یک برنامه را روی چند تا کامپیوتر تست کنید اگر جواب های مختلف گرفتید تعجب نکنید چون ممکن است سرعت پردازنده ها با هم فرق کند یا اگر روی دو کامپیوتر کاملا مشابه در دو محیط مختلف تست کردید و جواب متفاوتی دیدید ممکن است شرایط محیطی روی کار پردازنده تاثیر گذاشته باشد...
Output :
1001
در خط 8 حلقه اعداد 0 تا 9999 را چاپ می کند تا زمانی تلف شود.
در خط 12 زمان را داخل متغیر clk قرار می دهیم و سپس آن چاپ می کنیم.
اما همان طور که می بینید یک عدد بر می گرداند که امکان ندارد زمان برنامه باشد یعنی یک حلقه ی کوچک 1001 ثانیه طول می کشد ؟؟؟
خوب پس چطوری به یک عدد معقول تبدیلش کنیم ؟؟؟
برای این کار باید clk را به یک عدد float تبدیل کنیم بعد بر ثابت CLOCKS_PER_SEC تقسیمش کنیم.
برای درک بهتر به مثال پایین توجه کنید:
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع clock
clock_t clock(void);
آیا دوست دارید بدانید برنامه تان چند ثانیه برای اجرا زمان گرفته است ؟؟؟
این تابع به این صورت کار می کند که زمان سپری شده توسط CPU که برای برنامه ی شما مصرف شده را بر می گرداند ولی مقداری که این تابع بر می گرداند بر حسب clock_t هست.
🔹مقادیر بازگشتی :
تابع اگر بتواند زمان را محاسبه کند یک عدد در قالب clock برای ما می فرستد اگر نتواند مقدار منفی یک (1-) را بر می گرداند.
⚠️ ممکن است شما یک برنامه را روی چند تا کامپیوتر تست کنید اگر جواب های مختلف گرفتید تعجب نکنید چون ممکن است سرعت پردازنده ها با هم فرق کند یا اگر روی دو کامپیوتر کاملا مشابه در دو محیط مختلف تست کردید و جواب متفاوتی دیدید ممکن است شرایط محیطی روی کار پردازنده تاثیر گذاشته باشد...
1. #include <iostream>
2. #include <ctime>
3. using namespace std;
4. int main( )
5. {
6. clock clk;
7. for(int i=0;i<=9999;i++)
8. {
9. cout<<i<<endl;
10. }
11. clk=clock( );
12. cout<<clk<<endl;
13. return 0;
14. }
Output :
1001
در خط 8 حلقه اعداد 0 تا 9999 را چاپ می کند تا زمانی تلف شود.
در خط 12 زمان را داخل متغیر clk قرار می دهیم و سپس آن چاپ می کنیم.
اما همان طور که می بینید یک عدد بر می گرداند که امکان ندارد زمان برنامه باشد یعنی یک حلقه ی کوچک 1001 ثانیه طول می کشد ؟؟؟
خوب پس چطوری به یک عدد معقول تبدیلش کنیم ؟؟؟
برای این کار باید clk را به یک عدد float تبدیل کنیم بعد بر ثابت CLOCKS_PER_SEC تقسیمش کنیم.
برای درک بهتر به مثال پایین توجه کنید:
cout<<((float)clk)/ CLOCKS_PER_SEC<<endl;
1. #include <iostream>
2. #include <ctime>
3. using namespace std;
4. int main( )
5. {
6. clock clk;
7. for(int i=0; i<=999; i++)
8. {
9.// دستورات
10. }
11. clk=clock( );
12. for(int j=0;j<=99999;j++)
13. {
14.// دستورات
15. }
16. clk=clock( )–clk;
17. cout<<((float)clk)/CLOCKS_PER_SEC<<endl;
18. return 0;
19. }
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #difftime
🔵زمان (time)
🔹تابع difftime
این تابع اختلاف دو زمان را که به صورت زمان غیر استاندارد(یا همان time_t است)را محاسبه می کند.
البته درست این است که این تابع فقط نوع time_t که همان ثانیه ها هست را محاسبه می کند ولی می توانیم کاری کنیم که حتی اختلاف ماه و سال و روز را هم محاسبه کنیم.
🔹پارامتر ها :
🔻مفهوم end :
این همان زمان اولیه است که می خواهیم اختلافش تا زمان ثانویه را محاسبه کنیم.
🔻مفهوم beginning :
این همان زمان ثانویه است.
🔹مقادیر بازگشتی :
یک مقدار از نوع double که همان اختلاف زمان به ثانیه است
مثال بالا زمان تلف شده توسط یک تکه کد را محاسبه می کند.
Output:
3777291 seconds since new year in the current timezone.
برنامه بالا یک مثال برای پیدا کردن اختلاف روز است.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع difftime
double difftime(time_t end,time_t beginning);
این تابع اختلاف دو زمان را که به صورت زمان غیر استاندارد(یا همان time_t است)را محاسبه می کند.
البته درست این است که این تابع فقط نوع time_t که همان ثانیه ها هست را محاسبه می کند ولی می توانیم کاری کنیم که حتی اختلاف ماه و سال و روز را هم محاسبه کنیم.
🔹پارامتر ها :
🔻مفهوم end :
این همان زمان اولیه است که می خواهیم اختلافش تا زمان ثانویه را محاسبه کنیم.
🔻مفهوم beginning :
این همان زمان ثانویه است.
🔹مقادیر بازگشتی :
یک مقدار از نوع double که همان اختلاف زمان به ثانیه است
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
time_t tim1,tim2;
double s;
time(&tim1);
for(int i=0;i<=9999;i++)
{
//دستورات
}
time(&tim2);
s=difftime(tim1,tim2);
cout<<s<<endl;
return 0;
}
مثال بالا زمان تلف شده توسط یک تکه کد را محاسبه می کند.
#include <iostream>
#include <time.h>
/* time_t, struct tm, difftime, time, mktime */
using namespace std;
int main ( )
{
time_t now;
struct tm newyear;
double seconds;
time(&now);
/*get current time;same as:now=time(NULL) */
newyear=*localtime(&now);
newyear.tm_hour=0;
newyear.tm_min=0;
newyear.tm_sec=0;
newyear.tm_mon=0;
newyear.tm_mday=1;
seconds=difftime(now,mktime(&newyear));
cout<<seconds since new year in the current timezone.\n"<<seconds;
return 0;
}
Output:
3777291 seconds since new year in the current timezone.
برنامه بالا یک مثال برای پیدا کردن اختلاف روز است.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #asctime
🔵زمان (time)
🔹تابع asctime
این تابع می تواند یک زمان استاندارد را تبدیل به یک رشته کند.
اگر یک زمان را به فرمت struct tm بنویسیم برای نمایش دادن آن مجبوریم هر کدام از واحد های زمانی را جدا جدا نمایش دهیم ولی این تابع همه ی آنها را کنار هم قرار داده و سپس به رشته تبدیل می کند.
🔹پارامتر ها :
🔻مفهوم timeptr* :
این همان زمان استانداردی است که می خواهیم آن را به رشته تبدیل کنیم.
🔹مقادیر بازگشتی :
مقدار بازگشتی این تابع یک اشاره گر به ابتدای یک رشته است که حاوی زمان است.
فرمت زمانی که بر می گرداند به صورت زیر است:
Www Mmm dd hh:mm:ss yyyy
www هفته
mmm ماه
dd روز
hh:mm:ss زمان
yyyy سال
🔻کد تابع asctime :
Output:
The current date/time is: Wed Feb 13 15:46:11 2013
در این مثال ابتدا یک زمان را که غیر استاندارد است را با استفاده از تابع time می گیریم سپس با localtime آن را به یک زمان استاندارد تبدیل می کنیم، در آخر با asctime به یک رشته تبدیلش می کنیم و سپس آن را نمایش می دهیم.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع asctime
char* asctime (const struct tm * timeptr);
این تابع می تواند یک زمان استاندارد را تبدیل به یک رشته کند.
اگر یک زمان را به فرمت struct tm بنویسیم برای نمایش دادن آن مجبوریم هر کدام از واحد های زمانی را جدا جدا نمایش دهیم ولی این تابع همه ی آنها را کنار هم قرار داده و سپس به رشته تبدیل می کند.
🔹پارامتر ها :
🔻مفهوم timeptr* :
این همان زمان استانداردی است که می خواهیم آن را به رشته تبدیل کنیم.
🔹مقادیر بازگشتی :
مقدار بازگشتی این تابع یک اشاره گر به ابتدای یک رشته است که حاوی زمان است.
فرمت زمانی که بر می گرداند به صورت زیر است:
Www Mmm dd hh:mm:ss yyyy
www هفته
mmm ماه
dd روز
hh:mm:ss زمان
yyyy سال
🔻کد تابع asctime :
char *asctime(const struct tm *timeptr)
{
static const char wday_name[ ][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
static const char mon_name[ ][4]={"Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"};
static char result[26];
Cout<<result<<\n
<<wday_name[timeptr->tm_wday]
<<mon_name[timeptr->tm_mon]
<<timeptr->tm_mday
<<timeptr->tm_hour
<<timeptr->tm_min
<<timeptr->tm_sec
<<1900 + timeptr->tm_year;
return result;
}
#include <iostream>
#include <ctime>
using namespace std;
int main ( )
{
time_t rawtime;
struct tm *timeinfo;
time (&rawtime);
timeinfo=localtime(&rawtime);
cout<<"The current date/time is:"<<asctime(timeinfo));
return 0;
}
Output:
The current date/time is: Wed Feb 13 15:46:11 2013
در این مثال ابتدا یک زمان را که غیر استاندارد است را با استفاده از تابع time می گیریم سپس با localtime آن را به یک زمان استاندارد تبدیل می کنیم، در آخر با asctime به یک رشته تبدیلش می کنیم و سپس آن را نمایش می دهیم.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #ctime
🔵زمان (time)
🔹تابع ctime
این تابع شبیه تابع asctime است.
تنها تفاوتش این است که ورودی تابع asctime یک struct tm است،
ولی ورودی تابع ctime یک time_t است حتی مقادیر بازگشتی هر دو تابع مثل هم هستند.
زمانی که از این تابع استفاده می کنید مثل این است که از دستور زیر استفاده می کنید :
Output:
The current local time is: Wed Feb 13 16:06:10 2013
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع ctime
char *ctime(const time_t *timer);
این تابع شبیه تابع asctime است.
تنها تفاوتش این است که ورودی تابع asctime یک struct tm است،
ولی ورودی تابع ctime یک time_t است حتی مقادیر بازگشتی هر دو تابع مثل هم هستند.
زمانی که از این تابع استفاده می کنید مثل این است که از دستور زیر استفاده می کنید :
asctime(localtime(timer));
#include <iostream>
#include <ctime>
using namespace std;
int main ( )
{
time_t rawtime;
time(&rawtime);
cout<<"The current local time is:"<<ctime(&rawtime);
return 0;
}
Output:
The current local time is: Wed Feb 13 16:06:10 2013
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #localtime
🔵زمان (time)
🔹تابع localtime
آموزش مبحث تبدیل زمان :
اگر بخاطر بیاورید در آموزش های قبلی گفته شد که تابعی به نام time داریم که کار این تابع این است که زمان فعلی سیستم را بر حسب ثانیه به ما بدهد اما آن زمان را به زمان استاندارد تبدیل می کردیم.
حالا با تابع localtime می توانیم آن را به زمان استاندارد تبدیل کنیم.
و اما struct tm چیست ؟؟؟
این یک ساختاره داده ای است که فیلدهایی دارد و با استفاده از این فیلدها می توانیم به مقادیر ساعت، دقیقه و ثانیه دسترسی داشته باشیم البته به روز و ماه و سال هم می توانیم دسترسی داشته باشیم.
🔹پارامتر ها :
🔻مفهوم timer* :
این دقیقا همان زمانی است که با استفاده از تابع ( )time به دست می آوریم.
🔹مقادیر بازگشتی :
این تابع یک اشاره گر به یک struct با نام tm می دهد که داخل آن struct زمان های استانداردی مثل ثانیه و دقیقه نگهداری می شود.
اگر بخواهیم به زبان ساده تر بیان کنیم در اصل فیلدهای struct tm را با مقادیر استاندارد پر می کند.
Output :
00:21:38
ابتدا زمان غیر استاندارد سیستم، که فقط شامل ثانیه ها می شود را به اضافه تابع time در tim می ریزیم سپس با استفاده از localtime زمان استاندارد را در stim می ریزیم حال می توانیم با استفاده از فیلدهای stim به زمان های استاندارد دقیقه، ساعت و ... هم دسترسی داشته باشیم.
با سرچ بیشتر می توانید بهتر متوجه مطلب شوید.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع localtime
struct tm * localtime (const time_t * timer);
آموزش مبحث تبدیل زمان :
اگر بخاطر بیاورید در آموزش های قبلی گفته شد که تابعی به نام time داریم که کار این تابع این است که زمان فعلی سیستم را بر حسب ثانیه به ما بدهد اما آن زمان را به زمان استاندارد تبدیل می کردیم.
حالا با تابع localtime می توانیم آن را به زمان استاندارد تبدیل کنیم.
و اما struct tm چیست ؟؟؟
این یک ساختاره داده ای است که فیلدهایی دارد و با استفاده از این فیلدها می توانیم به مقادیر ساعت، دقیقه و ثانیه دسترسی داشته باشیم البته به روز و ماه و سال هم می توانیم دسترسی داشته باشیم.
🔹پارامتر ها :
🔻مفهوم timer* :
این دقیقا همان زمانی است که با استفاده از تابع ( )time به دست می آوریم.
🔹مقادیر بازگشتی :
این تابع یک اشاره گر به یک struct با نام tm می دهد که داخل آن struct زمان های استانداردی مثل ثانیه و دقیقه نگهداری می شود.
اگر بخواهیم به زبان ساده تر بیان کنیم در اصل فیلدهای struct tm را با مقادیر استاندارد پر می کند.
#include <iostream>
#include <ctime>
using namespace std;
int main ( )
{
time_t tim;
tm *stim;
time(&tim);
stim=localtime(&tim);
cout<<stim->tm_hour<<":"
<<stim->tm_min<<":"
<<stim->tm_sec<<endl;
return 0;
}
Output :
00:21:38
ابتدا زمان غیر استاندارد سیستم، که فقط شامل ثانیه ها می شود را به اضافه تابع time در tim می ریزیم سپس با استفاده از localtime زمان استاندارد را در stim می ریزیم حال می توانیم با استفاده از فیلدهای stim به زمان های استاندارد دقیقه، ساعت و ... هم دسترسی داشته باشیم.
با سرچ بیشتر می توانید بهتر متوجه مطلب شوید.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #strftime
🔵زمان (time)
🔹تابع strftime
این تابع هم برای تبدیل کردن زمان به رشته با فرمتی خاص به کار می رود.
در این تابع دقیقا عین تابع ( )printf عمل می کنیم، یعنی برای هر کدام از زمان ها مثل ماه، سال یا روز باید یک کاراکتر خاص را بلد باشیم.
مثل تابع ( )printfکه برای نشان دادن هرکدام از انواع داده ها باید از یک کاراکتر فرمت خاصی راحفظ باشیم.
🔹پارامتر ها :
🔻مفهوم ptr* :
این یک اشاره گر به ابتدا آرایه ای است که می خواهیم زمان را داخلش بریزیم.
🔻مفهوم Maxsize :
همان طول آرایه است که وارد تابع می شود تا تابع بداند چه مقدار حافظه برای نوشتن دارد.
🔻مفهوم format* :
همانطور که می دانید یک رشته حاوی کاراکترهایی است که به طور منظم کنار هم قرار گرفته تا معنی دار باشند، به همین نظم و ترتیب خاص فرمت رشته می گوییم.
حال می توانیم به طرق مختلف فرمت رشته را عوض کنیم مثلا یک رشته را به عدد تبدیل کنیم یا برعکس حالا گاهی لازم است یک زمان را به رشته تبدیل کنیم باید به strftime بگوییم که این کدام نوعِ زمان است مثل تابع ( )printf شما لیست کاراکتر های فرمت را داخل( )printf می دانید ولی این کاراکتر ها در strftime متفاوت است.
این میشود :
🔻مفهوم timeptr* :
همان زمانی است که می خواهیم فرمت آن را عوض کنیم.
🔹مقادیر بازگشتی :
اگر برای این تابع مشکلی پیش نیاید (که معمولا مشکل کم بودن طول آرایه یا نامفهوم بودن محتوای format می شود) و به اندازه ای فضا داشته باشد که بتواند آخر آرایه را با کاراکتر null پر کند، تعداد کاراکتر های نوشته شده در ptr را برمیگرداند و اگر تابع درکار خود شکست بخورد مقدار صفر را برمیگرداند.
output:
Now it's 03:21PM.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع strftime
size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
این تابع هم برای تبدیل کردن زمان به رشته با فرمتی خاص به کار می رود.
در این تابع دقیقا عین تابع ( )printf عمل می کنیم، یعنی برای هر کدام از زمان ها مثل ماه، سال یا روز باید یک کاراکتر خاص را بلد باشیم.
مثل تابع ( )printfکه برای نشان دادن هرکدام از انواع داده ها باید از یک کاراکتر فرمت خاصی راحفظ باشیم.
🔹پارامتر ها :
🔻مفهوم ptr* :
این یک اشاره گر به ابتدا آرایه ای است که می خواهیم زمان را داخلش بریزیم.
🔻مفهوم Maxsize :
همان طول آرایه است که وارد تابع می شود تا تابع بداند چه مقدار حافظه برای نوشتن دارد.
🔻مفهوم format* :
همانطور که می دانید یک رشته حاوی کاراکترهایی است که به طور منظم کنار هم قرار گرفته تا معنی دار باشند، به همین نظم و ترتیب خاص فرمت رشته می گوییم.
حال می توانیم به طرق مختلف فرمت رشته را عوض کنیم مثلا یک رشته را به عدد تبدیل کنیم یا برعکس حالا گاهی لازم است یک زمان را به رشته تبدیل کنیم باید به strftime بگوییم که این کدام نوعِ زمان است مثل تابع ( )printf شما لیست کاراکتر های فرمت را داخل( )printf می دانید ولی این کاراکتر ها در strftime متفاوت است.
این میشود :
specifier Replaced by Example
🔹%a
Abbreviated weekday name *Thu
🔹%A
Full weekday name *Thursday
🔹%b
Abbreviated month name *Aug
🔹%B
Full month name
*August
🔹%c
Date and time
representation
*Thu Aug 23 14:55:02 2001
🔹%C
Year divided by 100 and truncated to integer (00-99) 20
🔹%d
Day of the month, zero-padded (01-31) 23
🔹%D
Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
🔹%e
Day of the month, space-
padded ( 1-31) 23
🔹%F
Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
🔹%g
Week-based year, last two digits (00-99) 01
🔹%G
Week-based year 2001
🔹%h
Abbreviated month name * (same as %b) Aug
🔹%H
Hour in 24h format (00-23)
14
🔹%I
Hour in 12h format (01-12) 02
🔹%j
Day of the year (001-366) 235
🔹%m
Month as a decimal number (01-12) 08
🔹%M
Minute (00-59) 55
🔹%n
New-line character ('\n')
🔹%p
AM or PM designation PM
🔹%r
12-hour clock time * 02:55:02 pm
🔹%R
24-hour HH:MM time, equivalent to %H:%M 14:55
🔹%S
Second (00-61) 02
🔹%t
Horizontal-tab character ('\t')
🔹%T
ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55:02
🔹%u
ISO 8601 weekday as number with Monday as 1 (1-7) 4
🔹%U
Week number with the first Sunday as the first day of week one (00-53) 33
🔹%V
ISO 8601 week number (00-53) 34
🔹%w
Weekday as a decimal number with Sunday as 0 (0-6) 4
🔹%W
Week number with the first Monday as the first day of week one (00-53) 34
🔹%x
Date representation * 08/23/01
🔹%X
Time representation * 14:55:02
🔹%y
Year, last two digits (00-99) 01
🔹%Y
Year 2001
🔹%z
ISO 8601 offset from UTC in timezone (1 minute=1, 1 hour=100)
If timezone cannot be determined, no characters ت +100
🔹%Z
Timezone name or abbreviation *
If timezone cannot be determined, no characters CDT
%% A % sign %
🔻مفهوم timeptr* :
همان زمانی است که می خواهیم فرمت آن را عوض کنیم.
🔹مقادیر بازگشتی :
اگر برای این تابع مشکلی پیش نیاید (که معمولا مشکل کم بودن طول آرایه یا نامفهوم بودن محتوای format می شود) و به اندازه ای فضا داشته باشد که بتواند آخر آرایه را با کاراکتر null پر کند، تعداد کاراکتر های نوشته شده در ptr را برمیگرداند و اگر تابع درکار خود شکست بخورد مقدار صفر را برمیگرداند.
#include <stdio.h>/* puts */
#include <time.h>/* time_t, struct tm, time, localtime, strftime */
int main ( )
{
time_t rawtime;
struct tm *timeinfo;
char buffer[80];
time (&rawtime);
timeinfo=localtime(&rawtime);
strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
puts (buffer);
return 0;
}
output:
Now it's 03:21PM.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #clock_t
🔵زمان (time)
🔹تابع clock_t
تعریفی ابتدایی برای یک حسابگر با قابلیت بالا در ارائه ی تعداد تیک تاک های ساعت
تیک تاک های ساعت واحد هایی از نوع
ثابت(constant) ولی در عین حال تابع سیستم هستند که با تابع clock ارائه می شوند.
🔰ترجمه شده ازسایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع clock_t
type clock_t
تعریفی ابتدایی برای یک حسابگر با قابلیت بالا در ارائه ی تعداد تیک تاک های ساعت
تیک تاک های ساعت واحد هایی از نوع
ثابت(constant) ولی در عین حال تابع سیستم هستند که با تابع clock ارائه می شوند.
🔰ترجمه شده ازسایت
www.cplusplus.com
@Learncpp
#ctime #time.h #time_t
🔵زمان (time)
🔹تابع time_t
تعریفی ابتدایی برای یک حسابگر با قابلیت بالا در ارائه ی زمان ها، که با تابع time ارائه می شود.
بنا به دلایلی، به طور کلی به عنوان یک متغیر از نوع عدد صحیح (integer) که حاوی ثانیه های سپری شده از زمان 00:00 و تاریخ یک ژانویه سال 1970 است، تعریف می شود،گرچه بعضی از کتابخانه ها می توانند به شکل دیگری هم آن را ارائه دهند.
برنامه های portable بهتر است که از مقادیر این تابع به صورت مستقیم استفاده نکنند و در عوض از کتابخانه های استاندارد دیگری برای ترجمه ی این تابع به صورت portable بهره بگیرند.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع time_t
type time_t
تعریفی ابتدایی برای یک حسابگر با قابلیت بالا در ارائه ی زمان ها، که با تابع time ارائه می شود.
بنا به دلایلی، به طور کلی به عنوان یک متغیر از نوع عدد صحیح (integer) که حاوی ثانیه های سپری شده از زمان 00:00 و تاریخ یک ژانویه سال 1970 است، تعریف می شود،گرچه بعضی از کتابخانه ها می توانند به شکل دیگری هم آن را ارائه دهند.
برنامه های portable بهتر است که از مقادیر این تابع به صورت مستقیم استفاده نکنند و در عوض از کتابخانه های استاندارد دیگری برای ترجمه ی این تابع به صورت portable بهره بگیرند.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #struct_tm #struct_time
🔵زمان (time)
🔹تابع Struct tm
این ساختار مقادیر استاندارد زمان را داخل خودش دارد و داخل چندین تابع مجبوریم از آن استفاده کنیم.
البته همه ی این مقادیر جدا از هم هستند.
این ساختار 9 عضو دارد که از این قرار
(www.tg-me.com/Learncpp/1377)
هستند.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع Struct tm
این ساختار مقادیر استاندارد زمان را داخل خودش دارد و داخل چندین تابع مجبوریم از آن استفاده کنیم.
البته همه ی این مقادیر جدا از هم هستند.
این ساختار 9 عضو دارد که از این قرار
(www.tg-me.com/Learncpp/1377)
هستند.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h #struct_tm #struct_time
🔵زمان (time)
🔹تابع Struct tm
🔻نمایش 9 عضو تابع struct tm
(www.tg-me.com/Learncpp/1376)
@Learncpp
🔵زمان (time)
🔹تابع Struct tm
🔻نمایش 9 عضو تابع struct tm
(www.tg-me.com/Learncpp/1376)
@Learncpp
#ctime #time.h #struct_tm #struct_time
🔵زمان (time)
🔹تابع Struct tm
پرچم ساعت تابستانی (The Daylight Saving Time flag یا tm_isdst) می تواند مقادیر زیر را داشته باشد.
1.مقداری بزرگتر از صفر که نشان دهنده ی روشن بودن این قابلیت در سیستم می باشد.
2.مقدار صفر که نشان دهنده ی خاموش بودن این قابلیت در سیستم می باشد.
3.مقداری کوچکتر از صفر که نشان دهنده ی عدم وجود اطلاعات کافی در سیستم می باشد.
همچنین tm_sec به طور کلی در بازه ی(0 _59)تعریف می شود و مقادیر اضافی برای همسان سازی پرش های ثانیه در سیستم های مختلف استفاده می شود.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵زمان (time)
🔹تابع Struct tm
پرچم ساعت تابستانی (The Daylight Saving Time flag یا tm_isdst) می تواند مقادیر زیر را داشته باشد.
1.مقداری بزرگتر از صفر که نشان دهنده ی روشن بودن این قابلیت در سیستم می باشد.
2.مقدار صفر که نشان دهنده ی خاموش بودن این قابلیت در سیستم می باشد.
3.مقداری کوچکتر از صفر که نشان دهنده ی عدم وجود اطلاعات کافی در سیستم می باشد.
همچنین tm_sec به طور کلی در بازه ی(0 _59)تعریف می شود و مقادیر اضافی برای همسان سازی پرش های ثانیه در سیستم های مختلف استفاده می شود.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#ctime #time.h
📚فهرست آموزش کتابخانه time (زمان)
#mktime
www.tg-me.com/Learncpp/1206
#time
www.tg-me.com/Learncpp/1216
#clock
www.tg-me.com/Learncpp/1233
#difftime
www.tg-me.com/Learncpp/1249
#asctime
www.tg-me.com/Learncpp/1261
#ctime
www.tg-me.com/Learncpp/1277
#localtime
www.tg-me.com/Learncpp/1293
#strftime
www.tg-me.com/Learncpp/1304
#clock_t
www.tg-me.com/Learncpp/1346
#time_t
www.tg-me.com/Learncpp/1347
#struct_tm
1. www.tg-me.com/Learncpp/1376
2. www.tg-me.com/Learncpp/1377
3. www.tg-me.com/Learncpp/1393
📝ترجمه کتابخانه از سایت رسمی برنامه نویسان C++
www.cplusplus.com
🔸کمک به بچه های سرطانی
💝 @tabligh_cpp
🔹آموزش تخصصی ++C
🛡@Learncpp
📚فهرست آموزش کتابخانه time (زمان)
#mktime
www.tg-me.com/Learncpp/1206
#time
www.tg-me.com/Learncpp/1216
#clock
www.tg-me.com/Learncpp/1233
#difftime
www.tg-me.com/Learncpp/1249
#asctime
www.tg-me.com/Learncpp/1261
#ctime
www.tg-me.com/Learncpp/1277
#localtime
www.tg-me.com/Learncpp/1293
#strftime
www.tg-me.com/Learncpp/1304
#clock_t
www.tg-me.com/Learncpp/1346
#time_t
www.tg-me.com/Learncpp/1347
#struct_tm
1. www.tg-me.com/Learncpp/1376
2. www.tg-me.com/Learncpp/1377
3. www.tg-me.com/Learncpp/1393
📝ترجمه کتابخانه از سایت رسمی برنامه نویسان C++
www.cplusplus.com
🔸کمک به بچه های سرطانی
💝 @tabligh_cpp
🔹آموزش تخصصی ++C
🛡@Learncpp
Telegram
Learning ©➕➕
#ctime #time.h #mktime
🔵زمان (time)
🔹تابع mktime
time_t mktime(struct tm *timeptr);
این دقیقا برعکس تابع localtime است، ما به این تابع یک زمان استاندارد می دهیم و این تابع می گوید که این زمان از چند ثانیه تشکیل شده است.
🔹پارامتر ها :
🔻مفهوم timeptr*…
🔵زمان (time)
🔹تابع mktime
time_t mktime(struct tm *timeptr);
این دقیقا برعکس تابع localtime است، ما به این تابع یک زمان استاندارد می دهیم و این تابع می گوید که این زمان از چند ثانیه تشکیل شده است.
🔹پارامتر ها :
🔻مفهوم timeptr*…
زحمت ترجمه کتابخانه "Signal" را آقای فردین مارابی کشیدن از این بزرگوار بخاطر کمکشون سپاسگزاریم 🙏🌺
@Learncpp
@Learncpp
🔸ترجمه کتابخانه "Signal (سیگنال)" از سایت رسمی برنامه نویسان ++C به آدرس
www.cplusplus.com/reference
@Learncpp
www.cplusplus.com/reference
@Learncpp
#csignal #signal.h
🔵سیگنال (Signal)
🔹کتابخانه Signal
🔸کتابخانه ی سی به منظور مدیریت سیگنال :
🔻بعضی از محیط های اجرایی از سیگنال ها به منظور آگاه سازی از پروسه های در حال اجرای رویدادها مشخص استفاده می کنند.
🔻این رویداد ها ممکن است مربوط به آن خطاهایی باشند که به وسیله ی کد برنامه ایجاد شده اند مثل یک عملیات جبری ناصحیح (مانند تقسیم بر صفر) و یا استثنایی از قبیل یک درخواست برای توقف برنامه.
🔻سیگنال ها عموما حالتی هستند که برنامه مجبور به پایان است و یا یک خطای غیر قابل برگشت روی داده است بنابراین مدیریت یک سیگنال منجر به این می شود که برنامه عملیات پاک سازی قبل از کنسلی را اجرا کند و یا تلاش به ادامه ی کار پس از روی دادن خطا کند.
🔻همه ی محیط های اجرایی ملزوم به تولید سیگنال ها برای موقعی که در کتابخانه ی سی طراحی شده اند نیستند.
🔻بعضی دیگر از محیط ها نه تنها این نوع از سیگنال ها را تولید می کنند بلکه بسیاری از سیگنال ها مشخصه دیگری را نیز تولید می کنند.
🔻ولی در تمامی موارد سیگنال ها به طور صریح از فراخوانی تابعی که مطابق با آن سیگنال بخصوص است تولید می شوند.
🔹توابع
🔻تابع Raise : وضع تابعی که سیگنال را مدیریت می کند.
🔻تابع Signal : یک سیگنال را تولید می کند.
🔹نوع :
Sig-atomic-t (داده ی صحیح)
🔹ثابت های بزرگ
type : macro : signal
🔹int : SIGABRT : توقف های غیر عادی
🔹int : SIGFPE : عملیات های جبری نادرست
🔹int : SIGLLL : تصویر تابع نامعتبر از قبیل ساختار ناصحیح
🔹int : SIGINT : سیگنال های تاثیر گذار برهم
🔹int : SIGSEGV : دسترسی نامعتبر به حافظه
🔹int : SIGTERM : درخواست توقف برنامه
🔹function : SIG_DFL : مدیریت استثنا با یک عمل قراردادی
🔹function : SIG_IGN : رد کردن یک سیگنال
🔹function : SIG_ERR : یک بازگشت بخصوص که نشانگر شکست است
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵سیگنال (Signal)
🔹کتابخانه Signal
🔸کتابخانه ی سی به منظور مدیریت سیگنال :
🔻بعضی از محیط های اجرایی از سیگنال ها به منظور آگاه سازی از پروسه های در حال اجرای رویدادها مشخص استفاده می کنند.
🔻این رویداد ها ممکن است مربوط به آن خطاهایی باشند که به وسیله ی کد برنامه ایجاد شده اند مثل یک عملیات جبری ناصحیح (مانند تقسیم بر صفر) و یا استثنایی از قبیل یک درخواست برای توقف برنامه.
🔻سیگنال ها عموما حالتی هستند که برنامه مجبور به پایان است و یا یک خطای غیر قابل برگشت روی داده است بنابراین مدیریت یک سیگنال منجر به این می شود که برنامه عملیات پاک سازی قبل از کنسلی را اجرا کند و یا تلاش به ادامه ی کار پس از روی دادن خطا کند.
🔻همه ی محیط های اجرایی ملزوم به تولید سیگنال ها برای موقعی که در کتابخانه ی سی طراحی شده اند نیستند.
🔻بعضی دیگر از محیط ها نه تنها این نوع از سیگنال ها را تولید می کنند بلکه بسیاری از سیگنال ها مشخصه دیگری را نیز تولید می کنند.
🔻ولی در تمامی موارد سیگنال ها به طور صریح از فراخوانی تابعی که مطابق با آن سیگنال بخصوص است تولید می شوند.
🔹توابع
🔻تابع Raise : وضع تابعی که سیگنال را مدیریت می کند.
🔻تابع Signal : یک سیگنال را تولید می کند.
🔹نوع :
Sig-atomic-t (داده ی صحیح)
🔹ثابت های بزرگ
type : macro : signal
🔹int : SIGABRT : توقف های غیر عادی
🔹int : SIGFPE : عملیات های جبری نادرست
🔹int : SIGLLL : تصویر تابع نامعتبر از قبیل ساختار ناصحیح
🔹int : SIGINT : سیگنال های تاثیر گذار برهم
🔹int : SIGSEGV : دسترسی نامعتبر به حافظه
🔹int : SIGTERM : درخواست توقف برنامه
🔹function : SIG_DFL : مدیریت استثنا با یک عمل قراردادی
🔹function : SIG_IGN : رد کردن یک سیگنال
🔹function : SIG_ERR : یک بازگشت بخصوص که نشانگر شکست است
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#csignal #signal.h #raise
🔵سگینال (signal)
🔹تابع Raise
🔸تولید یک سیگنال :
سیگنال (سیگ) را به برنامه در حال اجرا می فرستد و سیگنال توسط تابع سیگنال مدیریت می شود.
🔹پارامترها
🔻پارامتر Sig :
مقدار سیگنال برای ارسال به تابع است.
ثابت های مارکرو که در پایین معرفی می کنیم مقدار استاندارد سیگنال را شناسایی می کنند.
macro : Signal
▫️SIGABRT :
توقف های غیر عادی
▫️SIGFPE :
عملیات های جبری نادرست
▫️SIGILL :
تصویر تابع نامعتبر از قبیل ساختار ناصحیح
▫️SIGINT :
سیگنال های تاثیر گذار برهم
▫️SIGSEGV :
دسترسی نامعتبر به حافظه
▫️SIGTERM :
درخواست توقف برنامه
پیاده سازی هر کتابخانه امکان فراهم آوردن مقدار سیگنال های اضافه تری را که با این تابع استفاده شود را فراهم می آورد.
🔻مقدار بازگشتی :
اگر موفقیت آمیز باشد صفر را بر می گرداند و در غیر اینصورت یک مقدار غیر صفر را برمی گرداند.
🔻مسیر(گردش) داده :
فراخوانی همزمان این تابع بلا اشکال است و باعث ایجاد اشتباه و دور نمی شود توجه داشته باشید که به هرحال امکان دارد که فرآیند مدیریت بر تمامی قسمت ها اثر گذار باشد.
🔻استثناء ها (++C) :
اگر هیچ تابعی برای مدیریت سیگنال تعریف نشده باشد آن تابع هرگز استثنا تولید نمی کند و در باقی حالت ها رفتار و برخورد تابع بستگی به تابع پیاده سازی شده دارد.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵سگینال (signal)
🔹تابع Raise
int raise(int seg);
🔸تولید یک سیگنال :
سیگنال (سیگ) را به برنامه در حال اجرا می فرستد و سیگنال توسط تابع سیگنال مدیریت می شود.
🔹پارامترها
🔻پارامتر Sig :
مقدار سیگنال برای ارسال به تابع است.
ثابت های مارکرو که در پایین معرفی می کنیم مقدار استاندارد سیگنال را شناسایی می کنند.
macro : Signal
▫️SIGABRT :
توقف های غیر عادی
▫️SIGFPE :
عملیات های جبری نادرست
▫️SIGILL :
تصویر تابع نامعتبر از قبیل ساختار ناصحیح
▫️SIGINT :
سیگنال های تاثیر گذار برهم
▫️SIGSEGV :
دسترسی نامعتبر به حافظه
▫️SIGTERM :
درخواست توقف برنامه
پیاده سازی هر کتابخانه امکان فراهم آوردن مقدار سیگنال های اضافه تری را که با این تابع استفاده شود را فراهم می آورد.
🔻مقدار بازگشتی :
اگر موفقیت آمیز باشد صفر را بر می گرداند و در غیر اینصورت یک مقدار غیر صفر را برمی گرداند.
🔻مسیر(گردش) داده :
فراخوانی همزمان این تابع بلا اشکال است و باعث ایجاد اشتباه و دور نمی شود توجه داشته باشید که به هرحال امکان دارد که فرآیند مدیریت بر تمامی قسمت ها اثر گذار باشد.
🔻استثناء ها (++C) :
اگر هیچ تابعی برای مدیریت سیگنال تعریف نشده باشد آن تابع هرگز استثنا تولید نمی کند و در باقی حالت ها رفتار و برخورد تابع بستگی به تابع پیاده سازی شده دارد.
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
#csignal #signal.h #raise
🔵سیگنال (Signal)
🔹تابع Raise
🔹پارامترها
🔻پارامتر Sig
مطالب بیشتر در
www.tg-me.com/Learncpp/1590
@Learncpp
🔵سیگنال (Signal)
🔹تابع Raise
🔹پارامترها
🔻پارامتر Sig
مطالب بیشتر در
www.tg-me.com/Learncpp/1590
@Learncpp
#Csignal #signal.h #signal
🔵 سیگنال (signal)
🔹تابع Signal :
🔸قراردادن تابعی به منظور مدیریت سیگنال :
تعیین کردن راهی برای مدیریت سیگنال از شماره ی سیگنال که به سیگ معروف است.
🔸تابع پارامتری شده یکی از سه راهی که می شود سیگنال ها را در برنامه مدیریت کرد را مشخص می کند :
1️⃣ مدیریت اختیار(sig_def) :
سیگنال یک کار دلخواه و رندوم برای یک نوع بخصوص سیگنال انجام می دهد.
2️⃣ نادیده گرفتن (sig_ign) :
سیگنال نادیده گرفته می شود و برنامه به کار خود ادامه می دهد حتی اگر ادامه ی کار بی معنی به نظر برسد.
3️⃣ تابع مدیریت کننده :
تابع بخصوصی برای مدیریت سیگنال تعریف می شود.
🔹پارامترها
🔻پارامتر Sig :
مقدار سیگنالی که برای تابع مدیریت کننده وضع شده است.
🔘 عبارت های ثابت ماکروی زیر مقدارهای استاندارد سیگنال را معرفی می کنند.
macro : Signal
▫️SIGABRT :
توقف های غیر عادی
▫️SIGFPE :
عملیات های جبری نادرست
▫️SIGILL :
تصویر تابع نامعتبر از قبیل ساختار ناصحیح
▫️SIGINT :
سیگنال های تاثیر گذار برهم
▫️SIGSEGV :
دسترسی نامعتبر به حافظه
▫️SIGTERM :
درخواست توقف برنامه
🔸 با پیاده سازی کتابخانه ها امکان دارد مقدار سیگنال های اضافه تری را فراهم آورد که از طریق ثابت های ماکرو قابل استفاده هستند.
⚠️ دقت کنید که همه ی محیط های اجرایی مجبور به تولید اتوماتیک سیگنال ها نیستند، همه ی محیط های اجرایی باید سیگنال های تولید شده توسط تابع raise را دریافت کنند.
🔻تابع Func:
یک اشاره گر به تابع، این ممکن است که یک تابع تعریف شده توسط برنامه نویس باشد و یا یکی از تابع های از قبل تعریف شده ی زیر باشد :
1️⃣ sig_def
2️⃣ sig_ign
▶️ اگر تابعی باشد که توسط برنامه نویس تعریف شده باشد باید فرمی به شکل زیر داشته باشد :
🔻نوع بازگشتی :
نوع بازگشتی درست مانند پارامتر های تابع است، اگر درخواست موفقیت آمیز باشد تابع یک اشاره گر به یک نوع مشخص تابع مدیریت کننده است که در راس مدیریت این سیگنال قبل از اظهار هیچ یا یکی از دو تابع Sig_def ,Sig_ign قرار دارد.
سیگنال فراخوانی شده به صورت دلخواه اجرا می شود و یا نادیده گرفته می شود، اگر تابع در فعال سازی و اجرای تابع های جدید سیگنال به صورت موفقیت آمیز عمل نکند Sib_ebr را بازگشت می دهد و یک عدد مثبت به errno اختصاص می دهد.
مثال )
🔻مسیر داده :
فراخوانی این تابع در چندین موقعیت رفتار نامشخصی را به دنبال دارد.
🔻استثناء ها (++C) :
این تابع هرگز یک استثناء را بیرون نمی اندازد.
No-throw guarantee
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp
🔵 سیگنال (signal)
🔹تابع Signal :
void (*signal(int sig, void (*func)(int)))(int);
🔸قراردادن تابعی به منظور مدیریت سیگنال :
تعیین کردن راهی برای مدیریت سیگنال از شماره ی سیگنال که به سیگ معروف است.
🔸تابع پارامتری شده یکی از سه راهی که می شود سیگنال ها را در برنامه مدیریت کرد را مشخص می کند :
1️⃣ مدیریت اختیار(sig_def) :
سیگنال یک کار دلخواه و رندوم برای یک نوع بخصوص سیگنال انجام می دهد.
2️⃣ نادیده گرفتن (sig_ign) :
سیگنال نادیده گرفته می شود و برنامه به کار خود ادامه می دهد حتی اگر ادامه ی کار بی معنی به نظر برسد.
3️⃣ تابع مدیریت کننده :
تابع بخصوصی برای مدیریت سیگنال تعریف می شود.
🔹پارامترها
🔻پارامتر Sig :
مقدار سیگنالی که برای تابع مدیریت کننده وضع شده است.
🔘 عبارت های ثابت ماکروی زیر مقدارهای استاندارد سیگنال را معرفی می کنند.
macro : Signal
▫️SIGABRT :
توقف های غیر عادی
▫️SIGFPE :
عملیات های جبری نادرست
▫️SIGILL :
تصویر تابع نامعتبر از قبیل ساختار ناصحیح
▫️SIGINT :
سیگنال های تاثیر گذار برهم
▫️SIGSEGV :
دسترسی نامعتبر به حافظه
▫️SIGTERM :
درخواست توقف برنامه
🔸 با پیاده سازی کتابخانه ها امکان دارد مقدار سیگنال های اضافه تری را فراهم آورد که از طریق ثابت های ماکرو قابل استفاده هستند.
⚠️ دقت کنید که همه ی محیط های اجرایی مجبور به تولید اتوماتیک سیگنال ها نیستند، همه ی محیط های اجرایی باید سیگنال های تولید شده توسط تابع raise را دریافت کنند.
🔻تابع Func:
یک اشاره گر به تابع، این ممکن است که یک تابع تعریف شده توسط برنامه نویس باشد و یا یکی از تابع های از قبل تعریف شده ی زیر باشد :
1️⃣ sig_def
2️⃣ sig_ign
▶️ اگر تابعی باشد که توسط برنامه نویس تعریف شده باشد باید فرمی به شکل زیر داشته باشد :
void handler_function (int parameter);
🔻نوع بازگشتی :
نوع بازگشتی درست مانند پارامتر های تابع است، اگر درخواست موفقیت آمیز باشد تابع یک اشاره گر به یک نوع مشخص تابع مدیریت کننده است که در راس مدیریت این سیگنال قبل از اظهار هیچ یا یکی از دو تابع Sig_def ,Sig_ign قرار دارد.
سیگنال فراخوانی شده به صورت دلخواه اجرا می شود و یا نادیده گرفته می شود، اگر تابع در فعال سازی و اجرای تابع های جدید سیگنال به صورت موفقیت آمیز عمل نکند Sib_ebr را بازگشت می دهد و یک عدد مثبت به errno اختصاص می دهد.
مثال )
#include <stdio.h>
/* printf */
#include <signal.h>
/* signal, raise, sig_atomic_t */
sig_atomic_t signaled = 0;
void my_handler (int param)
{
signaled = 1;
}
int main ( )
{
void (*prev_handler)(int);
prev_handler = signal(SIGINT, my_handler);
/* ... */
raise(SIGINT);
/* ... */
printf ("signaled is %d.\n",signaled);
return 0;
}
🔻مسیر داده :
فراخوانی این تابع در چندین موقعیت رفتار نامشخصی را به دنبال دارد.
🔻استثناء ها (++C) :
این تابع هرگز یک استثناء را بیرون نمی اندازد.
No-throw guarantee
🔰ترجمه شده از سایت
www.cplusplus.com
@Learncpp