[問題]請問一下

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

[問題]請問一下

文章qq489441147 » 週四 12月 11, 2003 10:04 am

我有一個程式,我需要用到重導的方式,但是編譯的卻發生錯誤要怎麼辦?????

#include<dlfcn.h>
#include<sys/types.h>
#include<netinet/in.h>

int connect(int s, struct sockaddr *addr, int addrlen)
{
int optval = 16, a;
int (*system_connect)(int, struct sockaddr *, int);

void *handle = dlopen("/lib/libc-2.3.2.so",RTLD_LAZY);


system_connect = dlsym(handle, "connect");
if(!system_connect)
printf("dlsym failed\n");
if(setsockopt(s, IPPROTO_IP, IP_TOS, (void *)&optval, sizeof(optval))==-1)
perror("setsockopt");
a = system_connect(s, addr, addrlen);
dlclose(handle);
return a;
}


#socklib.c:6: error: conflicting types for `connect'
#/usr/include/sys/socket.h:124: error: previous #declaration of `connect'
qq489441147
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 12月 09, 2003 8:30 pm

re:[問題]請問一下

文章Tsung Ching » 週四 12月 11, 2003 11:08 am

#/usr/include/sys/socket.h 己經也有一個connect的 function了
換個名字再編譯看看吧..
Tsung Ching
可愛的小學生
可愛的小學生
 
文章: 19
註冊時間: 週一 6月 23, 2003 10:26 am

re:[問題]請問一下

文章qq489441147 » 週四 12月 11, 2003 6:46 pm

但是如果改了那個connect是可以編過了啦,但是我要的功能卻不能使用,而且我是用重導的方式,應該不會這個問題才對阿......
qq489441147
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 12月 09, 2003 8:30 pm

re:[問題]請問一下

文章訪客 » 週四 12月 11, 2003 8:48 pm

qq489441147 寫:但是如果改了那個connect是可以編過了啦,但是我要的功能卻不能使用,而且我是用重導的方式,應該不會這個問題才對阿......


這和你有沒有重導沒有關係....
重點是在你的 header file 裡面就出問題了....
訪客
 

re:[問題]請問一下

文章Tsung Ching » 週四 12月 11, 2003 8:52 pm

qq489441147 寫:但是如果改了那個connect是可以編過了啦,但是我要的功能卻不能使用,而且我是用重導的方式,應該不會這個問題才對阿......


sorry, 上一篇沒有登入.. :P
你可以試著用兩層轉接
先在一個c file裡定義 int _connect(int s, struct sockaddr *addr, int addrlen) ;
然後在你想要用的 c file裡再定義 int connection(int s, struct sockaddr *addr, int addrlen) ;
在這裡再去 call _connect(...) ;
應該是可以,記得不要加入那些header file,不然還是會有問題
Tsung Ching
可愛的小學生
可愛的小學生
 
文章: 19
註冊時間: 週一 6月 23, 2003 10:26 am

re:[問題]請問一下

文章qq489441147 » 週四 12月 11, 2003 10:13 pm

能麻煩你寫一下嗎??因為我不知怎寫怎麼好耶~~~
qq489441147
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 12月 09, 2003 8:30 pm

re:[問題]請問一下

文章octapult » 週五 12月 12, 2003 9:15 pm

#include<dlfcn.h>
#include<sys/types.h>
#include<netinet/in.h>

int connect(int s, const struct sockaddr *addr, socklen_t addrlen)
{
int optval = 16, a;
int (*system_connect)(int, const struct sockaddr *, socklen_t);

void *handle = dlopen("/lib/libc-2.3.2.so",RTLD_LAZY);
...
...
...

請注意紅色的部份,這樣應該就可以了。

您可以參考一下下面這個網址的寫法:
http://www.ledge.co.za/software/bouncer/bouncer.c
------BEGIN GEEK CODE BLOCK------
Version: 3.12
G! d- s+:+ a? C++(+++) UBL>++++ P L++ E+ W++ N+ o+ K- w(--)
O? M? V PS+ PE+ Y+ PGP- t 5? X++ R tv b+ DI- D+ G e? h! r-- z?
-------END GEEK CODE BLOCK-------
octapult
摩托學園!學園長們
摩托學園!學園長們
 
文章: 512
註冊時間: 週六 9月 07, 2002 10:30 pm
來自: Seyda Neen, Morrowind

re:[問題]請問一下

文章qq489441147 » 週六 12月 13, 2003 9:25 pm

謝謝大大幫我解決這個問題 :-) :-) :-) :-)
qq489441147
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 12月 09, 2003 8:30 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron