国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站開發(fā)mvc架構(gòu)重慶百度競價開戶

網(wǎng)站開發(fā)mvc架構(gòu),重慶百度競價開戶,怎么做網(wǎng)站頁面,如何用flash做網(wǎng)站目錄 前言 一、守護(hù)進(jìn)程 1.概念 2.守護(hù)進(jìn)程創(chuàng)建的原理(如圖清晰可見) 3.守護(hù)進(jìn)程的實現(xiàn)(代碼塊) 二、dup和dup2 1,復(fù)制文件描述符 2.文件描述符重定向 三、系統(tǒng)日志 1,打開日志 2,向日…

目錄

前言

一、守護(hù)進(jìn)程

1.概念

2.守護(hù)進(jìn)程創(chuàng)建的原理(如圖清晰可見)

?3.守護(hù)進(jìn)程的實現(xiàn)(代碼塊)

二、dup和dup2

1,復(fù)制文件描述符

2.文件描述符重定向

三、系統(tǒng)日志

1,打開日志

2,向日志中寫消息

3,關(guān)閉日志

四,文件鎖

1.概念

2,給整個文件上鎖

實例代碼如下:?

3,給文件的某個區(qū)域上鎖

?實例代碼如下:

五,進(jìn)程間通信

1.分類

2,無名管道

2.1 無名管道通信原理

2.2 用法

?實例代碼如下:

總結(jié)


前言

上篇博客對C/C++進(jìn)程的上部分進(jìn)行了詳細(xì)講解,本篇博客將繼續(xù)講解和補(bǔ)充關(guān)于線程的知識點。


一、守護(hù)進(jìn)程

1.概念

(1)守護(hù)進(jìn)程,
?? ?也就是通常所說的Daemon進(jìn)程,是Linux中的后臺服務(wù)進(jìn)程。
?? ?它是一個生存期較長的進(jìn)程,通常獨立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件
?? ?守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止
?? ?Linux系統(tǒng)有很多守護(hù)進(jìn)程,大多數(shù)服務(wù)都是用守護(hù)進(jìn)程實現(xiàn)的?

(2)終端
?? ?在Linux中,每一個系統(tǒng)與用戶進(jìn)行交流的界面稱為終端,每一個從此終端開始運行的進(jìn)程都會依附于這個終端,這個終端就稱為這些進(jìn)程的控制終端,當(dāng)控制終端被關(guān)閉時,相應(yīng)的進(jìn)程都會被自動關(guān)閉。

守護(hù)進(jìn)程能夠突破這種限制,它從被執(zhí)行開始運轉(zhuǎn),直到整個系統(tǒng)關(guān)閉才會退出。
如果想讓某個進(jìn)程不因為用戶或終端或其他的變化而受到影響,就必須把這個進(jìn)程變成一個守護(hù)進(jìn)程。?

2.守護(hù)進(jìn)程創(chuàng)建的原理(如圖清晰可見)

?

?3.守護(hù)進(jìn)程的實現(xiàn)(代碼塊)

void init_deamon(void)
{/*************** start ****************************/pid_t pid;int i,max_fd;//1,創(chuàng)建子進(jìn)程if((pid = fork()) < 0){perror("fork");exit(1);}else if(pid > 0)exit(0);//2,創(chuàng)建新會話if(setsid() < 0){perror("setsid");exit(1);}//3,再創(chuàng)建子進(jìn)程if((pid = fork()) < 0){perror("fork");exit(1);}else if(pid > 0)exit(0);//4,修改守護(hù)進(jìn)程的工作目錄chdir("/");//5,關(guān)閉進(jìn)程父進(jìn)程的所有的文件描述符max_fd = sysconf(_SC_OPEN_MAX);for (i = 0; i < max_fd;i++)close(i);//6,將標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到/dev/nullopen("/dev/null",O_RDWR);dup(0);dup(0);//7,消除umask影響umask(0);/*************** end ****************************/
}

二、dup和dup2

1,復(fù)制文件描述符

int dup(int oldfd);
//參數(shù) ---- 要復(fù)制的文件描述符
//返回值 ----成功:新的文件描述符,失敗:-1

例如:?
int main(void)
{
? ? char str[] = "hello world";
? ? int fd1,fd2;


? ? fd1 = open("1.txt",O_RDWR|O_CREAT,0666);
? ? if(fd1 < 0){
? ? ? ? perror("open");
? ? ? ? exit(1);
? ? }

? ? write(fd1,str,strlen(str));

? ? fd2 = dup(fd1); ? //復(fù)制文件描述fd1
? ? strcpy(str,"farsight");
? ? write(fd2,str,strlen(str));

? ? close(fd1);


? ? return 0;
} ? ? ?
?

2.文件描述符重定向

int dup2(int oldfd, int newfd);
//參數(shù)1 --- 目標(biāo)文件描述符
//參數(shù)2 --- 要重定向的文件描述符
//返回值 ---- 成功0,失敗:-1

例如:?
int main(void)
{
? ? char str[] = "hello world";
? ? int fd1,fd2;


? ? fd1 = open("1.txt",O_RDWR|O_CREAT,0666);
? ? if(fd1 < 0){
? ? ? ? perror("open");
? ? ? ? exit(1);
? ? }
? ? fd2 = open("2.txt",O_RDWR|O_CREAT,0666);
? ? if(fd1 < 0){
? ? ? ? perror("open");
? ? ? ? exit(1);
? ? }

? ? write(fd1,str,strlen(str));

? ? dup2(fd1,fd2); ?//將fd2重定向到fd1

? ? strcpy(str,"farsight");
? ? write(fd2,str,strlen(str));
?? ?close(fd1);


? ? return 0;
}

三、系統(tǒng)日志

1,打開日志

#include <syslog.h>
void openlog(const char *ident, int option, int facility);
//參數(shù)1 ------ ?//日志標(biāo)簽,自定義,方便查找日志信息
//參數(shù)2 ------ ?選項:
?? ??? ??? ??? ?LOG_CONS ? ? 如果消息不能發(fā)送給日志,則發(fā)送到控制臺
?? ??? ??? ??? ?LOG_NDELAY ? 不延遲打開套接字,并發(fā)送消息
?? ??? ??? ??? ?LOG_NOWAIT ? 創(chuàng)建子進(jìn)程,不阻塞發(fā)送消息給日志
?? ??? ??? ??? ?LOG_PERROR ? 發(fā)送日志,同時發(fā)送到標(biāo)準(zhǔn)錯誤文件
?? ??? ??? ??? ?LOG_PID ? ? ?在消息中加入進(jìn)程的ID
//參數(shù)3 ------ ? 進(jìn)程類型:
?? ??? ??? ??? ??? ?LOG_DAEMON?? ? ?守護(hù)進(jìn)程
?? ??? ??? ??? ??? ?LOG_FTP?? ??? ? ?tfp服務(wù)進(jìn)程
?? ??? ??? ??? ??? ?LOG_KERN ? ? ?內(nèi)核進(jìn)程
?? ??? ??? ??? ??? ?LOG_LPR ? ? ? 打印服務(wù)進(jìn)程
?? ??? ??? ??? ??? ?LOG_MAIL ? ? ?郵件服務(wù)進(jìn)程

實例如下:
?? ?openlog("mydaemon",LOG_PID,LOG_DAEMON);

2,向日志中寫消息

void syslog(int priority, const char *format, ...);
//參數(shù)1 ----- 消息的優(yōu)先級
?? ??? ??? ? ? LOG_EMERG ? ? ?非常緊急的錯誤
? ? ? ? ? ? ? ?LOG_ALERT ? ? ?必須馬上處理的錯誤
? ? ? ? ? ? ? ?LOG_CRIT ? ? ? 關(guān)鍵性錯誤
? ? ? ? ? ? ? ?LOG_ERR ? ? ? ?一般錯誤
? ? ? ? ? ? ? ?LOG_WARNING ? ?警告
? ? ? ? ? ? ? ?LOG_NOTICE ? ? 需要注意的消息
? ? ? ? ? ? ? ?LOG_INFO ? ? ? 正常消息
? ? ? ? ? ? ? ?LOG_DEBUG ? ? ?調(diào)試消息
//參數(shù)2 -----向日志中寫消息的格式
//變參 ----- 類似于printf的變參
例如:?
?? ?syslog(LOG_ERR,"fopen:%s",strerror(errno));
?? ?
運行測試:
?? ? grep mydaemon /var/log/syslog -n
?? ?203:Sep 26 23:36:26 ubuntu mydaemon[28968]: fopen:No such file or directory

3,關(guān)閉日志

?void closelog(void);

四,文件鎖

1.概念

為了解決進(jìn)程之間的互斥問題,引入咨詢鎖

采用鎖文件的方式取代創(chuàng)建文件的方式
? ? 需遵循“君子協(xié)定”
? ? 共享鎖(shared Lock)和互斥鎖(exculusive lock)
? ? 對整個文件上鎖或者文件的某個部分上鎖(記錄鎖定)

2,給整個文件上鎖

#include <sys/file.h>
int flock(int fd, int operation);
//參數(shù)1 ---- 文件描述符
//參數(shù)2 ---- 鎖的類型:LOCK_SH ?LOCK_EX ?LOCK_UN
//返回值 ---成功:0,失敗:-1

實例代碼如下:?

代碼一:

int main(int argc,char **argv)
{int fd;int i;if(argc != 2){fprintf(stderr,"Usage: %s <filename>\n",argv[0]);exit(0);}if((fd = open(argv[1],O_RDWR)) < 0){perror("open");exit(1);}while(1){printf("等待獲取鎖\n");//獲取互斥鎖if(flock(fd,LOCK_EX) < 0){perror("flock");exit(1);}for(i = 0; i < 7; i++){printf("正在上廁所\n");sleep(1);}//釋放鎖if(flock(fd,LOCK_UN) < 0){perror("flock");exit(1);}printf("上完廁所出來了....\n");sleep(1);}return 0;
}

代碼二:

int main(int argc,char **argv)
{int fd;int i;if(argc != 2){fprintf(stderr,"Usage: %s <filename>\n",argv[0]);exit(0);}if((fd = open(argv[1],O_RDWR)) < 0){perror("open");exit(1);}while(1){printf("等待著上廁所\n");//獲取互斥鎖if(flock(fd,LOCK_EX) < 0){perror("flock");exit(1);}for(i = 0; i < 7; i++){printf("正在上廁所...\n");sleep(1);}//釋放鎖if(flock(fd,LOCK_UN) < 0){perror("flock");exit(1);}printf("上完廁所!\n");sleep(1);}return 0;
}

3,給文件的某個區(qū)域上鎖

#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* arg */ );

?struct flock {
? ? ? ?short l_type; ? ?/* Type of lock: F_RDLCK, F_WRLCK, F_UNLCK */
? ? ? ?short l_whence; ?/* How to interpret l_start:
? ? ? ? ? ? ? ? ? ? ? ? ? ?SEEK_SET, SEEK_CUR, SEEK_END */
? ? ? ?off_t l_start; ? /* Starting offset for lock */
? ? ? ?off_t l_len; ? ? /* Number of bytes to lock */
? ? ? ?pid_t l_pid; ? ? /* PID of process blocking our lock
? ? ? ? ? ? ? ? ? ? ? ? ? ?(set by F_GETLK and F_OFD_GETLK) */
? ?};

?實例代碼如下:

//定義鎖的結(jié)構(gòu)體--設(shè)置鎖的區(qū)域struct flock fl = {.l_whence = SEEK_SET,.l_start = 100,.l_len  = 1024,};while(1){printf("等待獲取鎖\n");//獲取互斥鎖fl.l_type = F_WRLCK;   //設(shè)置鎖的類型if(fcntl(fd,F_SETLKW,&fl) < 0){perror("flock");exit(1);}for(i = 0; i < 7; i++){printf("正在上廁所\n");sleep(1);}//釋放鎖fl.l_type = F_UNLCK;    //解鎖if(fcntl(fd,F_SETLK,&fl) < 0){perror("flock");exit(1);}printf("上完廁所出來了....\n");sleep(1);}

五,進(jìn)程間通信

1.分類

?在linux中進(jìn)程間通信分為三類:
(1)早期的進(jìn)程間通信
?? ?無名管道
?? ?有名(命名)管道
?? ?信號
(2)system V IPC
?? ?消息隊列
?? ?共享內(nèi)存
?? ?信號燈(量)
(3)unix域套接字

2,無名管道

2.1 無名管道通信原理

2.2 用法

#include <unistd.h>
int pipe(int pipefd[2]);
//參數(shù) ---- 保存管道兩端文件描述符的數(shù)組
//返回值 ---成功:0,失敗:-1

?實例代碼如下:
int main(void)
{int fd[2];pid_t pid;char buf[100];//創(chuàng)建無名管道if(pipe(fd) < 0){   //pipe()會在內(nèi)核中創(chuàng)建無名管道,然后將管道兩端的文件描述符返回給當(dāng)前進(jìn)程perror("pipe");exit(1);}//創(chuàng)建子進(jìn)程if((pid = fork()) < 0){perror("fork");exit(1);}else if(!pid){  //子進(jìn)程執(zhí)行:從鍵盤獲取字符串,寫到管道中close(fd[0]);  //關(guān)閉讀端while(1){fgets(buf,sizeof(buf),stdin);write(fd[1],buf,strlen(buf));   //向管道中寫數(shù)據(jù)}}else{  //父進(jìn)程執(zhí)行:從管道讀數(shù)據(jù),打印到屏幕上close(fd[1]); //關(guān)閉寫端while(1){if(read(fd[0],buf,sizeof(buf)) < 0){perror("read");exit(1);}printf("%s",buf);}}return 0;
}


總結(jié)

? ? ? ? 本篇文章針對進(jìn)程進(jìn)行超詳細(xì)講解和補(bǔ)充,希望能夠幫到大家!

? ? ? ? 以后還會給大家展現(xiàn)更多關(guān)于嵌入式和C語言的其他重要的基礎(chǔ)知識,感謝大家支持懶大王!

? ? ? ?希望這篇博客能給各位朋友們帶來幫助,最后懶大王請來過的朋友們留下你們寶貴的三連以及關(guān)注,感謝你們!

http://m.aloenet.com.cn/news/36190.html

相關(guān)文章:

  • photoshop基礎(chǔ)入門教程做seo網(wǎng)頁價格
  • 網(wǎng)站響應(yīng)時間多久網(wǎng)絡(luò)營銷崗位描述的內(nèi)容
  • 邢臺做網(wǎng)站推廣報價百度標(biāo)記號碼認(rèn)證平臺
  • 哪個網(wǎng)站diy做寶寶衣服網(wǎng)站怎么接廣告
  • 專門做app網(wǎng)站網(wǎng)站推廣和優(yōu)化的原因網(wǎng)絡(luò)營銷
  • wordpress 多語言 插件網(wǎng)站搜索引擎優(yōu)化方法
  • 西安網(wǎng)站建設(shè)維護(hù)76人vs猛龍
  • 做一樣的模板網(wǎng)站會被告侵權(quán)嗎品牌營銷策劃公司哪家好
  • 餐館網(wǎng)站怎么做的百度關(guān)鍵詞優(yōu)化排名
  • 大連網(wǎng)站制作網(wǎng)頁出售外鏈
  • java做3d游戲下載網(wǎng)站有哪些軟件營銷課程培訓(xùn)
  • 南通代辦公司注冊連鎖杭州網(wǎng)站推廣優(yōu)化公司
  • 駐馬店高端網(wǎng)站建設(shè)免費大數(shù)據(jù)查詢平臺
  • wordpress怎么發(fā)布公告廣州谷歌seo
  • 網(wǎng)站建設(shè)合同書公司企業(yè)員工培訓(xùn)
  • 做網(wǎng)站的結(jié)論網(wǎng)站的宣傳推廣方式
  • 域名解析映射到網(wǎng)站空間怎么做seo發(fā)外鏈的網(wǎng)站
  • 給我做網(wǎng)站的人老是給我留點尾巴百度成都總部
  • 公眾號購物做網(wǎng)站還是小程序推廣產(chǎn)品的方法
  • 做ae動圖的網(wǎng)站網(wǎng)店推廣的渠道有哪些
  • 自己做的網(wǎng)站被篡改怎么辦愛站網(wǎng)站排名查詢工具
  • 電商網(wǎng)站建設(shè)開發(fā)的語言有哪些競價sem托管
  • 慈溪做無痛同濟(jì)&網(wǎng)站體驗營銷是什么
  • 焦作網(wǎng)站設(shè)計網(wǎng)絡(luò)推廣外包搜索手機(jī)蛙軟件
  • 微信支持什么wordpress360優(yōu)化大師官方網(wǎng)站
  • 通用wap網(wǎng)站生成系統(tǒng)中小企業(yè)網(wǎng)站制作
  • 青島網(wǎng)站建設(shè)公司正太原百度搜索排名優(yōu)化
  • 溫州建設(shè)誠信網(wǎng)站seo學(xué)習(xí)論壇
  • 學(xué)校網(wǎng)站模版網(wǎng)絡(luò)推廣優(yōu)化方案
  • 山東省作風(fēng)建設(shè)網(wǎng)站湖南網(wǎng)站排名