『壹』 linux下,在調用main函數之前怎樣得到命令行參數argc和argv
#include <mutex>
#include <thread>
class main_args;
namespace details
{
template<typename MainArgs>
class main_args_access : MainArgs
{
public:
static void get_main_args_func(int c, char* v[], char* p[])
{
std::call_once(MainArgs::get_flag, [&](){
MainArgs::argc = c;
MainArgs::argv = v;
MainArgs::envp = p;
});
}
};
}
class main_args
{
private:
friend class details::main_args_access<main_args>;
static std::once_flag get_flag;
public:
static int argc;
static char** argv;
static char** envp;
};
int main_args::argc;
char** main_args::argv = nullptr;
char** main_args::envp = nullptr;
namespace details
{
// gcc
#if defined(__GNUC__) && (__linux__)
__attribute__((section(".init_array"))) void (*get_main_args_func_ptr)(int, char*[], char*[]) = &(main_args_access<main_args>::get_main_args_func);
#endif
}
必需支持C++11以上的編譯器
『貳』 在linux c編程里看到一句代碼:kill(func(), SIGHUP);func()是子函數,請問這句是什麼意思
func()函數返回一個進程ID,SIGHUP是signal信號中的一種處理方式,系統對SIGHUP信號的默認處理是終止收到該信號的進程。所以若程序中沒有捕捉該信號,當收到該信號時,進程就會退出。
『叄』 linux :() { :|:& }; : 什麼意思
挺古老的的一個蛋疼小程序了【以前我覺著機器好,就手賤地運行了,於是不出意外地死機了】
原理就是定義一個函數,並不斷遞歸,不停地製造後台任務。如你所見那個函數名就是個冒號,其實這完全就是在擾亂你的視線。【話說回來好像bash里好像也有一個啥事都不幹的冒號命令】
寫的易懂點:
func () { #函數定義,這里把函數名改成了func
func | func & #管道符連接的命令貌似會同時開始【也有可能是倒序開始來IO阻塞,我對bash研究不深】,所以當下一個func被調用時,一個後台的func已經建立
}
func #那麼開始滾雪球,准備好隨時power鍵