1.浣跨敤write鍚? 1 2 鍐欐暟鎹?/span>
2.浣跨敤read浠? 1 璇誨彇鏁版嵁,騫跺垽瀹氳緭鍏ョ殑鎯呭喌,鐒跺悗鏍規嵁鐩稿簲鐨勭粨鏋滆緭鍑烘彁紺?br />
#include <stdlib.h>
#include <stdio.h>
main()
{
//printf("%d\n",getpid());
//while(1);
/*
int r=write(0,"Hello\n",6);
write(1,"world\n",6);
write(2,"louis\n",6);
int a=20;
write(1,&a,4);
*/
char buf[32];
//memset(buf,0,32);
bzero(buf,32);
int r=read(0,buf,30);
printf("瀹為檯杈撳叆:%d\n",r);
if(r>0)
{
buf[r]=0;
printf("::%s\n",buf);
}
if(r==0)
{
printf("ctrl+d\n");
}
if(r==-1)
{
printf("杈撳叆閿欒!\n");
}
}
涓?鍩轟簬鏂囦歡鐨勬弿榪扮鍙?br style="margin: 0px; padding: 0px;" /> 1.寰楀埌鏂囦歡鎻忚堪絎﹀彿/閲婃斁鏂囦歡鎻忚堪絎﹀彿
a.鏂囦歡綾誨瀷
鐩綍鏂囦歡d
鏅氭枃浠秄
瀛楃璁懼鏂囦歡c
鍧楄澶囨枃浠禸
杞繛鎺ユ枃浠秎
綆¢亾鏂囦歡p
socket鏂囦歡s
b.鏂囦歡鐨勫睘鎬?br style="margin: 0px; padding: 0px;" /> 1.灞炴х殑琛ㄨ揪鏂瑰紡:緇濆妯″紡錛?666綾諱技鐨勫叓榪涘埗鏁幫級,瀛楃妯″紡錛坮wx錛?br style="margin: 0px; padding: 0px;" /> 0 0 0 0
鎷ユ湁鑰?nbsp; 緇?nbsp; 鍏朵粬鐢ㄦ埛
0666
2.鏂囦歡鐨勬潈闄愬睘鎬?
璇?br style="margin: 0px; padding: 0px;" /> 鍐?br style="margin: 0px; padding: 0px;" /> 鎵ц
綺橀檮浣嶆潈闄?br style="margin: 0px; padding: 0px;" /> 鐢ㄦ埛璁劇疆浣嶆潈闄?br style="margin: 0px; padding: 0px;" /> 緇勮緗綅鏉冮檺
0 0 0 0 0
鐗規畩鏉冮檺 Owner group 鍏朵粬鐢ㄦ埛
s:
S
t
T
2.1. s璁劇疆浣?br style="margin: 0px; padding: 0px;" /> 2:緇勮緗綅
4:鐢ㄦ埛璁劇疆浣?br style="margin: 0px; padding: 0px;" /> s瀵規墽琛屾湁鏁?br style="margin: 0px; padding: 0px;" /> 鏃犳晥鐨勮緗綅浣跨敤S琛ㄧず
璁劇疆浣嶅悜鍏朵粬鐢ㄦ埛寮鏀炬嫢鏈夎呮潈闄愮殑鏉冮檺.鐢ㄦ埛璁劇疆浣?br style="margin: 0px; padding: 0px;" /> 璁劇疆浣嶅悜鍏朵粬鐢ㄦ埛寮鏀劇粍鐢ㄦ埛鏉冮檺鐨勬潈闄?緇勭敤鎴瘋緗綅
璁劇疆浣嶅彧瀵規墽琛岀▼搴忔湁鎰忎箟(鎵ц鏉冮檺鏈夋剰涔?
2.2. t璁劇疆浣?br style="margin: 0px; padding: 0px;" /> 1:琛ㄧず娌鵑檮浣嶈緗?br style="margin: 0px; padding: 0px;" /> t瀵瑰啓鏂囦歡鏈夋剰涔?br style="margin: 0px; padding: 0px;" /> 娌℃湁鎵ц鏉冮檺鐨勬簿闄勪綅浣跨敤T琛ㄧず.
娌鵑檮鐨勭洰鐨?闃叉鏈変簺鏉冮檺鐨勭敤鎴峰垹闄ゆ枃浠?
紼嬪簭鍦ㄦ墽琛岀殑鏃跺欏埌搴曟嫢鏈夌殑鏄墽琛岃呯敤鎴風殑鏉冮檺
榪樻槸鏂囦歡鎷ユ湁鑰呯殑鏉冮檺.(鐪媠etUID)
紼嬪簭鎵ц涓湁涓や釜鐢ㄦ埛:
瀹為檯鐢ㄦ埛錛氭爣紺鴻繘紼嬪埌搴曟槸璋?br style="margin: 0px; padding: 0px;" /> 鏈夋晥鐢ㄦ埛錛氭爣紺鴻繘紼嬭闂祫婧愮殑鏉冮檺
涓婅堪涓鑸儏鍐墊槸涓鏍風殑錛屾湁鏃跺欒setUID鏀瑰彉
鎬葷粨:
娌鵑檮浣嶇殑浣滅敤: 闃叉鍏朵粬鏈夊啓鏉冮檺鐢ㄦ埛鍒犻櫎鏂囦歡
璁劇疆浣嶇殑浣滅敤: 鍚戝叾浠栨墽琛岃呭紑鍙戠粍鎴栬呯敤鎴風殑鏉冮檺.
緇冧範:
1.浣跨敤cat鍒涘緩涓涓枃浠?br style="margin: 0px; padding: 0px;" /> 2.璁劇疆娌鵑檮浣?騫惰瀵熷睘鎬?br style="margin: 0px; padding: 0px;" /> 3.璁劇疆鐢ㄦ埛璁劇疆浣? 騫惰瀵熷睘鎬?br style="margin: 0px; padding: 0px;" /> 4.璁劇疆緇勮緗綅, 騫惰瀵熷睘鎬?br style="margin: 0px; padding: 0px;" /> 5.鑰冭檻w鏉冮檺涓庢簿闄勪綅鐨勫叧緋?br style="margin: 0px; padding: 0px;" /> 6.鑰冭檻x鏉冮檺涓庤緗綅鐨勫叧緋?
2.閫氳繃鏂囦歡鎻忚堪絎﹀彿璇誨啓鍚勭鏁版嵁.
open鍑芥暟涓巆reat鍑芥暟
int open(
const char *filename,//鏂囦歡鍚?/span>
int flags,//open鐨勬柟寮廩鍒涘緩/鎵撳紑]
mode_t mode//鏉冮檺(鍙湁鍒涘緩鐨勬椂鍊欐湁鏁?
)
榪斿洖:
>=0:鍐呮牳鏂囦歡鎻忚堪絎﹀彿.
=-1:鎵撳紑/鍒涘緩澶辮觸
open鐨勬柟寮?
蹇呴夋柟寮?O_RDONLY O_WRONLY O_RDWR,蹇呴』閫夋嫨涓涓?br style="margin: 0px; padding: 0px;" /> 鍒涘緩/鎵撳紑:O_CREAT
鍙夋柟寮?
瀵規墦寮鍙夋柟寮?O_APPEND O_TRUNC(娓呯┖鏁版嵁)
瀵瑰垱寤哄彲閫夋柟寮?O_EXCL
緇勫悎:
鍒涘緩:
O_RDWR|O_CREAT
O_RDWR|O_CREAT | O_EXCL
鎵撳紑:
O_RDWR
O_RDWR|O_APPEND
O_RDWR|O_TRUNC
鏉冮檺:
寤鴻浣跨敤8榪涘埗鏁?br style="margin: 0px; padding: 0px;" /> 鍏抽棴
void close(int fd);
妗堜緥1:
鍒涘緩鏂囦歡
妗堜緥2:
鍒涘緩鏂囦歡騫跺啓鍏ユ暟鎹?br style="margin: 0px; padding: 0px;" /> 20 short float
tom 20 99.99
bush 70 65.00
杈懼唴 40 100.00
娉ㄦ剰:
鏂囦歡鐨勫垱寤虹殑鏉冮檺鍙楃郴緇熺殑鏉冮檺灞忚斀鐨勫獎鍝?br style="margin: 0px; padding: 0px;" /> umask //鏄劇ず灞忚斀鏉冮檺.
umask 0666 //璁劇疆鏉冮檺灞忚斀.
ulimit -a 鏄劇ず鎵鏈夌殑鍏朵粬闄愬埗.
/*鍒涘緩鏂囦歡*/
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int fd;
char name[20];
short age;
float score;
char sex;
fd=open("test.dat",
O_RDWR|O_CREAT|O_EXCL,
);
if(fd==-1) printf("open error:%m\n"),exit(-1);
//鍐欑涓鏉?/span>
memcpy(name,"tom",strlen("tom")+1);
age=20;
score=99.99;
sex='F';
write(fd,name,sizeof(name));
write(fd,&age,sizeof age);
write(fd,&score,sizeof(float));
write(fd,&sex,sizeof(sex));
//鍐欑浜屾潯
memcpy(name,"Bush",strlen("Bush")+1);
age=70;
score=65.00;
sex='M';
write(fd,name,sizeof(name));
write(fd,&age,sizeof age);
write(fd,&score,sizeof(float));
write(fd,&sex,sizeof(sex));
//鍐欑涓夋潯
memcpy(name,"杈懼唴",strlen("杈懼唴")+1);
age=10;
score=99.00;
sex='F';
write(fd,name,sizeof(name));
write(fd,&age,sizeof age);
write(fd,&score,sizeof(float));
write(fd,&sex,sizeof(sex));
close(fd);
}
妗堜緥3:
鎵撳紑鏂囦歡璇誨彇鏁版嵁
閲嶇偣:
鎬庝箞鎵撳紑璇誨彇
鏂囦歡灝劇殑鍒ゅ畾
鍩烘湰綾誨瀷鐨勬暟鎹鍐?
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
main()
{
char name[20];
short age;
float score;
char sex;
int fd;
int r;
fd=open("test.dat",O_RDONLY);
if(fd==-1) printf("open error:%m\n"),exit(-1);
while(1)
{
r=read(fd,name,sizeof(name));
if(r==0) break;
r=read(fd,&age,sizeof(short));
r=read(fd,&score,sizeof(float));
r=read(fd,&sex,sizeof(sex));
printf("%s,\t%4hd,\t%.2f,\t%1c\n",
name,age,score,sex);
}
close(fd);
}
妗堜緥4:
緇撴瀯浣撹鍙?/span>
鎻忚堪:浠庨敭鐩樿鍙栬嫢騫叉潯鏁版嵁,淇濆瓨鍒版枃浠?/span>
鏁版嵁榪藉姞
View Code
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
struct stu
{
int no;
char name[20];
float score;
};
/*
.鍒ゅ畾鏂囦歡鏄惁瀛樺湪,瀛樺湪鎵撳紑錛屼笉瀛樺湪鍒涘緩
.杈撳叆璁板綍
.淇濆瓨璁板綍
.鎻愮ず緇х畫杈撳叆
.緇х畫/涓嶇戶緇?br />.鍏抽棴鏂囦歡
*/
int openfile(const char *filename)
{
int fd;
fd=open(filename,O_RDWR|O_CREAT|O_EXCL,0666);
if(fd==-1)//琛ㄧず鏂囦歡瀛樺湪,鍒欐墦寮
{
fd=open(filename,O_RDWR|O_APPEND);
return fd;
}
return fd;
}
void input(struct stu *record)
{
bzero(record,sizeof(struct stu));
printf("杈撳叆瀛﹀彿:");
scanf("%d",&(record->no));
printf("杈撳叆濮撳悕:");
scanf("%s",record->name);
printf("杈撳叆鎴愮嘩:");
scanf("%f",&(record->score));
}
void save(int fd,struct stu *record)
{
write(fd,record,sizeof(struct stu));
}
int iscontinue()
{
char c;
printf("鏄惁緇х畫杈撳叆:\n");
//fflush(stdin);
//fflush(stdout);
scanf("\n%c",&c);
if(c=='Y' || c=='y')
{
return 1;
}
return 0;
}
int main()
{
int fd;
int r;
struct stu s={0};
fd=openfile("stu.dat");
if(fd==-1) printf("openfile:%m\n"),exit(-1);
while(1)
{
input(&s);
save(fd,&s);
r=iscontinue();
if(r==0) break;
system("clear");
}
close(fd);
printf("杈撳叆瀹屾瘯!\n");
}
3.鏂囦歡鎻忚堪絎﹀彿涓庨噸瀹氬悜
1.鍒ゅ畾鏂囦歡鎻忚堪絎﹀彿涓庣粓绔殑閭﹀畾鍏崇郴
int isatty(int fd)
榪斿洖闈?:fd杈撳嚭緇堢
0:fd杈撳嚭琚噸瀹氬悜
2.闃叉閲嶅畾鍚?/span>
/dev/tty
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int fd;
printf("Hello\n");
write(1,"World\n",6);
fd=open("/dev/tty",O_WRONLY);
if(isatty(1))
{
write(1,"notredir\n",9);
}
else
{
write(1,"redir\n",6);
}
write(fd,"Killer\n",7);
}
鎬葷粨:
1.make鐨勫鐩爣渚濊禆瑙勫垯浠ュ強浼洰鏍?br style="margin: 0px; padding: 0px;" /> 2.鏂囦歡鐨勫垱寤轟笌鎵撳紑(浜嗚В璁劇疆浣嶇殑浣滅敤)
3.鏂囦歡鐨勮鍐?瀛楃涓?鍩烘湰綾誨瀷/緇撴瀯浣?
4.浜嗚В鎻忚堪絎﹀彿涓庨噸瀹氬悜
浣滀笟:
1.瀹屾垚涓婅鐨勭粌涔?
2.鍐欎竴涓▼搴忎嬌鐢ㄧ粨鏋勪綋璇誨彇1縐嶇殑鏁版嵁,
騫跺叏閮ㄦ墦鍗版暟鎹?
騫舵墦鍗板鉤鍧囨垚緇?br style="margin: 0px; padding: 0px;" /> 3.鍐欎竴涓▼搴?
鏌ヨ1縐嶇殑鏁版嵁.姣斿:杈撳叆濮撳悕,鏌ヨ鎴愮嘩
4.鍐欎竴涓▼搴?褰曞叆淇濆瓨濡備笅鏁版嵁:
涔﹀悕 鍑虹増紺?nbsp; 浠鋒牸 瀛樺偍閲?nbsp; 浣滆?nbsp;
5.鍐欎竴涓▼搴忚礋璐f枃浠舵嫹璐?br style="margin: 0px; padding: 0px;" /> main 瀛樺湪鐨勬枃浠?nbsp; 鏂扮殑鏂囦歡鍚?br style="margin: 0px; padding: 0px;" /> 瑕佹眰:
鏂囦歡瀛樺湪灝辨嫹璐?涓嶅瓨鍦ㄦ彁紺洪敊璇?

]]>- linux楂樼駭緙栫▼day02 絎旇 (杞?http://m.shnenglu.com/mysileng/archive/2012/12/27/196708.html閼緳閼緳Thu, 27 Dec 2012 05:27:00 GMThttp://m.shnenglu.com/mysileng/archive/2012/12/27/196708.htmlhttp://m.shnenglu.com/mysileng/comments/196708.htmlhttp://m.shnenglu.com/mysileng/archive/2012/12/27/196708.html#Feedback0http://m.shnenglu.com/mysileng/comments/commentRss/196708.htmlhttp://m.shnenglu.com/mysileng/services/trackbacks/196708.html緇存姢涓涓綅緗?brk/sbrk鏀瑰彉榪欎釜浣嶇疆銆?br />brk鏀瑰彉緇濆浣嶇疆
sbrk鏀瑰彉鐩稿浣嶇疆
鏄ㄥぉ鐨勮ˉ鍏咃細
姘歌繙璁頒綇錛欳鐨勫熀鏈被鍨嬪氨閭e嚑縐嶃?br />鎵鏈夊叏鏂扮被鍨嬮兘鏄嬌鐢╰ypedef閲嶆柊瀹氫箟鐨勩?br />綾誨瀷閲嶅畾涔夌殑濂藉錛?br />1. 緇存姢鏂逛究
2. 渚夸簬縐繪錛堟瘡涓郴緇熶腑閮界敤鍚屼竴涓悕錛屼笉鐢ㄤ慨鏀癸級
3. 瀹規槗鐞嗚В
涓銆?鏄犲皠铏氭嫙鍐呭瓨
娌℃湁浠諱綍棰濆緇存姢鏁版嵁鐨勫唴瀛樺垎閰?mmap/munmap
1. 鍑芥暟璇存槑錛?br />
void *mmap(
void *start, //鎸囧畾鏄犲皠鐨勮櫄鎷熷湴鍧錛屽鏋滀負0錛屽垯鐢辯郴緇熸寚瀹氬紑濮嬩綅緗?/span>
size_t length,//鎸囧畾鏄犲皠絀洪棿鐨勫ぇ灝忋?nbsp;pagesize鐨勫嶆暟
int prot, //鏄犲皠鐨勬潈闄?nbsp;PROT_NONE PROT_READ PROT_WRITE PROT_WRITE PROT_EXEC
int flags, //鏄犲皠鐨勬柟寮?/span>
int fd, //鏂囦歡鎻忚堪絎﹀彿
offset_t off //鏂囦歡涓殑鏄犲皠寮濮嬩綅緗紙蹇呴』鏄?鎴杙agesezi鐨勫嶆暟錛?/span>
);
鍏充簬鏄犲皠鐨勬柟寮廸lags錛?br />鍐呭瓨鏄犲皠錛氬張鍙尶鍚嶆槧灝勶紝鏈鍚庝袱涓弬鏁版棤鏁?br />鏂囦歡鏄犲皠錛氭槧灝勫埌鏌愪釜鏂囦歡
鍙湁鏂囦歡鏄犲皠錛屾渶鍚庝袱涓弬鏁版墠鏈夋晥
MAP_ANONYMOUS:鍐呭瓨鏄犲皠
MAP_SHAREDMAP_PRIVATE錛氫簩閫変竴錛屾枃浠舵槧灝?br />
2. 妗堜緥錛?br />
#include <unistd.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *p = mmap(
NULL,
getpagesize(),
PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_SHARED,
0,
0);
*P = 20;
*(p+1) = 30;
*(p+2) = 40;
printf("%d\n", p[2]); //鎵撳嵃鍑?0
munmap(p, 4096);
}
3. 鎬葷粨錛?br /> 閫夋嫨浠涔堟牱鐨勫唴瀛樼鐞嗘柟娉曪紵
STL
new
malloc灝忚屽鐨勬暟鎹?br /> brk/sbrk鍚岀被鍨嬬殑澶у潡鏁版嵁錛屽姩鎬佺Щ鍔ㄦ寚閽?br /> mmap/munmap 鎺у埗鍐呭瓨鐨勮闂?浣跨敤鏂囦歡鏄犲皠/鎺у埗鍐呭瓨鍏變韓
浜屻佺紪紼嬪伐鍏蜂笌鍔ㄦ佸簱
1. gcc
2. make
3. gdb
4. 鍏朵粬宸ュ叿
5. 鍔ㄦ佸簱錛堝叡浜簱錛?br />
1. gcc
-o 杈撳嚭鏂囦歡鍚?br /> -O-O1-O2-O3//緙栬瘧浼樺寲
-g-g1-g2-g3//浜х敓璋冭瘯淇℃伅
-Wallerror//-Wall 鏄劇ず鎵鏈夎鍛?Werror 灝嗚鍛婂綋鎴愰敊璇彁紺?br /> -w//鍏抽棴鎵鏈夎鍛?br /> -c//鍙紪璇戜笉榪炴帴錛屼駭鐢?.o鏂囦歡錛堢洰鏍囨枃浠訛級
-E//棰勭紪璇?br /> -S//姹囩紪銆?浜х敓 .s鏂囦歡錛堟眹緙栨枃浠訛級
緙栬瘧4榪囩▼鏄?-E(浜х敓.i) -c(浜х敓.o) -S(浜х敓.s) 鑷姩璋冪敤榪炴帴鍣?/span>ld
-D//鍦ㄥ懡浠よ瀹氫箟瀹?錛堝畯鍙互鍦ㄤ唬鐮佷腑瀹氫箟錛屼篃鍙互鍦ㄥ懡浠よ涓婂畾涔夛級
-x//鎸囧畾緙栬瘧鐨勮璦綾誨瀷 C, C++, .S(姹囩紪)錛?none錛堣嚜鍔ㄥ垽瀹氾級
-std=c89 浣跨敤鏍囧噯C89
-std=c99 浣跨敤鏍囧噯C99
涓夈?闈欐佸簱鐨勭紪璇?br />1. 緙栬瘧榪囩▼ 錛?.a錛?a鏄痑chieve鐨勭緝鍐?br /> 1.1 緙栬瘧鎴愮洰鏍囨枃浠?br /> -static 鍙?br /> gcc -c -static 浠g爜鏂囦歡.c //鐢熶駭鍙敤浜庡綊妗g殑鐩爣浠g爜:浠g爜鏂囦歡.0
1.2 褰掓。鎴愰潤鎬佸簱
ar宸ュ叿 錛堝父鐢?r -t閫夐」錛?br /> ar -r 闈欐佸簱 琚綊妗g殑鏂囦歡鍚?涓婁竴姝ヤ唬鐮佹枃浠?o)
ar -r add.a add.o
nm宸ュ叿錛堟煡鐪嬪簱涓墍钑村惈鐨勫嚱鏁板垪琛級
nm 闈欐佸簱鎴栧姩鎬佸簱鎴栫洰鏍囨枃浠舵垨鎵ц鏂囦歡
1.3 浣跨敤闈欐佸簱
gcc 浠g爜鏂囦歡 闈欐佸簱
灝忎緥瀛愶細
浣跨敤闈欐佸簱瀹屾垚濡備笅紼嬪簭
杈撳叆涓涓彵褰㈠崐寰勶紝鎵撳嵃鑿卞艦
杈撳叆鏁村瀷灝佽鎴怚OTool
鑿卞艦鎵撳嵃灝佽鎴怗raphic
璁″垝錛?br />1. 瀹炵幇杈撳叆
2. 瀹炵幇鑿卞艦
3. 緙栬瘧闈欐佸簱
4. 璋冪敤闈欐佸簱
//iotool.c
#include <stdio.h>
int inputInt(const char *info)
{
int r; //榪斿洖鍊?/span>
printf("%s:", info);
scanf("%d", &r);
return r;
}
//graphic.c
#include <stdio.h>
void diamond(int r)
{
int x, y;
for(y=0; y<=2*r; y++)
{
for(x=0; x<=2*r; x++)
{
if(y == x+r || y == x-r ||y == -x+r || y == -x+3*r)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
緙栬瘧錛?gcc -c -static iotool.c
gcc -c -static graphic.c
ar -r demo1.a iotool.o graphic.o
ar -t demo1.a //鐩稿綋浜巒m demo1.a
//main.c
main()
{
int r = inputInt("杈撳叆鑿卞艦鍗婂緞錛?);
diamond(r);
}
緙栬瘧: gcc main.c demo1.a -o main
鎵ц錛?/main
鎶婇潤鎬佸簱浣滀負浠g爜鐨勪竴閮ㄥ垎鏉ョ紪璇?br />
鎬葷粨錛?br />1. 浠涔堟槸搴擄紵
鍑芥暟絳変唬鐮佸皝瑁呯殑浜岃繘鍒跺凡緇忕紪璇戠殑褰掓。鏂囦歡
2. ar褰掓。宸ュ叿
3. 閲囩敤搴撶殑鏂瑰紡綆$悊浠g爜浼樼偣錛?br />瀹規槗緇勭粐浠g爜
澶嶇敤
淇濇姢浠g爜鐗堟潈
4. 闈欐佸簱鐨?#8220;闈欐?#8221;鐨勫惈涔夛細
緙栬瘧濂界殑紼嬪簭榪愯鐨勬椂鍊欎笉渚濊禆搴?br />搴撲綔涓虹▼搴忕殑涓閮ㄥ垎緙栬瘧榪炴帴
5. 闈欐佸簱鐨勬湰璐?/span>
灝辨槸鐩爣鏂囦歡鐨勯泦鍚堬紙褰掓。錛?/span>
6. -static鍙?br />
2. 搴撶殑瑙勮寖涓庣害瀹?br />搴撳懡鍚嶈鍒欙細
lib搴撳悕.a.涓葷増鏈彿.鍓増鏈彿.鎵瑰彿
涓鑸氨鍐?#8220;lib搴撳悕.a”灝辮浜嗐?br />ar -r libdemo2.a iotool.o graphic.o
搴撶殑浣跨敤瑙勫垯
-l搴撳悕
-L搴撴墍鍦ㄧ殑鐩綍
gcc main.c -o main -l demo2 -L.
鍥涖?鍔ㄦ佸簱鐨勭紪璇?br />1. 浠涔堟槸鍔ㄦ佸簱錛堝叡浜簱錛?br />鍔ㄦ佸簱鏄彲浠ユ墽琛岀殑錛岄潤鎬佸簱涓嶈兘鎵ц
浣嗗姩鎬佸簱娌℃湁main錛屼笉鑳界嫭绔嬫墽琛?br />鍔ㄦ佸簱涓嶄細榪炴帴鎴愮▼搴忕殑涓閮ㄥ垎
紼嬪簭鎵ц鏃訛紝蹇呴』闇瑕佸姩鎬佸簱鏂囦歡
2. 宸ュ叿
ldd鏌ョ湅紼嬪簭闇瑕佽皟鐢ㄧ殑鍔ㄦ佸簱 錛宭dd鍙兘鏌ョ湅鍙墽琛屾枃浠訛紙鍏變韓搴撴枃浠舵垨elf鏂囦歡錛?br />nm 錛堟煡鐪嬪簱涓殑鍑芥暟絎﹀彿錛?br />3. 鍔ㄦ佸簱鐨勭紪璇?br />3.1緙栬瘧
-c -f pic(鍙? (-f 鎸囧畾鏂囦歡鏍煎紡 pic 浣嶇疆鏃犲叧浠g爜)
3.2 榪炴帴
-shared
緙栬瘧錛歡cc -c -fpic iotool.c
gcc -c -fpic graphic.c
(闈炴爣鍑?gcc -shared -odemo3.so iotool.o graphic.o
(鏍囧噯)gcc -shared -olibdemo4.so iotool.o graphic.o
4. 浣跨敤鍔ㄦ佸簱
gcc 浠g爜鏂囦歡鍚?鍔ㄦ佸簱鏂囦歡鍚?br />gcc 浠g爜鏂囦歡鍚?-l搴撳悕 -L鍔ㄦ佸簱鎵鍦ㄧ殑璺緞
gcc main.c -ldemo4 -L. -o main
鏍囧噯鍛藉悕瑙勫垯錛?br />lib搴撳悕.so
lib搴撳悕.a
闂錛?br />4.1 鎵ц紼嬪簭鎬庝箞鍔犺澆鍔ㄦ佸簱錛?br />4.2 鍔ㄦ佸簱娌℃湁浣滀負鎵ц紼嬪簭鐨勪竴閮ㄥ垎錛屼負浠涔堣繛鎺ラ渶瑕佸埗瀹氬姩鎬佸簱鍙婄洰褰曪紵
鍥犱負榪炴帴鍣ㄩ渶瑕佺‘璁ゅ嚱鏁板湪鍔ㄦ佸簱涓殑浣嶇疆
鍔ㄦ佸簱鐨勫姞杞斤細
1. 鎵懼埌鍔ㄦ佸簱
2. 鍔犺澆鍔ㄦ佸簱鍒板唴瀛橈紙緋葷粺瀹炵幇錛?br />3. 鏄犲皠鍒扮敤鎴風殑鍐呭瓨絀洪棿錛堢郴緇熷疄鐜幫級
鍔ㄦ佸簱鏌ユ壘瑙勫垯錛?br />/lib
/user/lib
LD_LIBRARY_PATH鐜鍙橀噺鎸囧畾鐨勮礬寰勪腑鎵?br />璁劇疆褰撳墠璺緞涓虹幆澧冨彉閲忥細錛?span style="color: red;">鑷繁瀹氫箟鐨勫簱鏈濂借緗ソ鐩綍錛屾垨鑰呮斁鍒頒笂榪板叕鍏辯洰褰曪級
export LD_LIBRARY_PATH=.:~:..:~Walle
緙撳啿鏈哄埗錛?br />緋葷粺鎶妉ib:/user/lib:LD_LIBRARY_PATH閲岀殑鏂囦歡鍔犺澆鍒扮紦鍐?br />/sbin/ldconfig -v 鍒鋒柊緙撳啿so涓殑鎼滅儲搴撶殑璺緞
灝忕粌涔狅細
杈撳叆涓や釜鏁幫紝璁$畻涓や釜鏁扮殑鍜屻?br />瑕佹眰錛氳緭鍏ヤ笌璁$畻涓や釜鏁扮殑鍜屽皝瑁呮垚鍔ㄦ佸簱璋冪敤
浜斻?浣跨敤libdl.so搴?br />鍔ㄦ佸簱鍔犺澆鍘熺悊
鍔ㄦ佸簱涓嚱鏁扮殑鏌ユ壘宸茬粡灝佽鎴愬摥libdl.so
libdl.so閲岄潰鏈?涓嚱鏁幫細
dlopen//鎵撳紑涓涓姩鎬佸簱
dlsym//鍦ㄦ墦寮鐨勫姩鎬佸簱閲屾壘涓涓嚱鏁?br />dlclose//鍏抽棴鍔ㄦ佸簱
dlerror//榪斿洖閿欒
//dldemo.c
#include <dlfcn.h>
main()
{
void *handle = dlopen("./libdemo4.so", RTLD_LAZY);
void (*fun)(int) = dlsym(handle, "diamond");
fun(5);
dlclose(handle);
}
gcc dldemo.c -o main -ldl
ldd main
./main
鎬葷粨錛?br /> 1. 緙栬瘧榪炴帴鍔ㄦ佸簱
2. 浣跨敤鍔ㄦ佸簱
3. 鎬庝箞閰嶇疆璁╃▼搴忚皟鐢ㄥ姩鎬佸簱
4. 鎺屾彙鏌愪簺宸ュ叿鐨勪嬌鐢?nm ldd lddconfig objdump strit(鍘繪帀澶氫綑鐨勪俊鎭?
鍏?宸ュ叿make鐨勪嬌鐢ㄤ笌makefile鑴氭湰
鑳屾櫙錛?br />make緙栬瘧鑴氭湰瑙i噴
緙栬瘧鑴氭湰makefile
make -f 鑴氭湰鏂囦歡 鐩爣
鑴氭湰鏂囦歡錛?br />1. 鏂囨湰鏂囦歡 錛堜緥濡?demo.mk錛?br />2. 鍩烘湰鏋勬垚璇硶
鍩烘湰鍗曚綅鐩爣target
鐩爣鍚嶏細渚濊禆鐩爣
\t鐩爣鎸囦護
\t鐩爣鎸囦護
//demo.mk
demo:iotool.c graphic.c main.c
gcc iotool.c -c
gcc graphic.c -c
gcc iotool.o graphic.o -shared -o libdemo.so
gcc main.c -ldemo -L. -o main
make -f demo.mk demo 浼氱敓浜ain鍙墽琛屾枃浠?img src ="http://m.shnenglu.com/mysileng/aggbug/196708.html" width = "1" height = "1" />
]]> - linux楂樼駭緙栫▼day01 絎旇 (杞?http://m.shnenglu.com/mysileng/archive/2012/12/26/196698.html閼緳閼緳Wed, 26 Dec 2012 11:55:00 GMThttp://m.shnenglu.com/mysileng/archive/2012/12/26/196698.htmlhttp://m.shnenglu.com/mysileng/comments/196698.htmlhttp://m.shnenglu.com/mysileng/archive/2012/12/26/196698.html#Feedback0http://m.shnenglu.com/mysileng/comments/commentRss/196698.htmlhttp://m.shnenglu.com/mysileng/services/trackbacks/196698.html闃呰鍏ㄦ枃

]]>
久久综合九色综合久99|
久久成人精品视频|
日韩电影久久久被窝网|
亚洲国产精品狼友中文久久久|
久久精品成人欧美大片|
久久久精品国产免大香伊|
国内精品九九久久久精品|
伊人久久大香线焦综合四虎|
少妇人妻综合久久中文字幕|
久久久久人妻精品一区二区三区|
草草久久久无码国产专区|
伊人情人综合成人久久网小说|
国产情侣久久久久aⅴ免费|
久久久久国产精品嫩草影院
|
91精品无码久久久久久五月天|
欧美午夜A∨大片久久|
国产精品天天影视久久综合网|
久久精品草草草|
亚洲综合熟女久久久30p|
99热热久久这里只有精品68|
久久精品国产亚洲AV忘忧草18|
成人国内精品久久久久影院VR|
久久亚洲精品无码AV红樱桃|
久久久久九九精品影院|
久久久久中文字幕|
久久精品国产亚洲AV电影|
久久久久久曰本AV免费免费|
久久久久久久亚洲精品|
久久99国产精一区二区三区|
人妻丰满AV无码久久不卡|
东方aⅴ免费观看久久av|
久久久久免费视频|
精品久久久久中文字|
一本一道久久精品综合|
99久久精品国产免看国产一区|
一本一道久久综合狠狠老|
久久久久99这里有精品10|
久久嫩草影院免费看夜色|
久久精品国产一区二区电影|
国产激情久久久久影院老熟女|
97超级碰碰碰碰久久久久|