欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux命令調(diào)用c函數(shù) c語言調(diào)用linux命令

在linux下,我想調(diào)用A.c里面的某個函數(shù),怎么寫?

在C里面要先聲明,再使用。

創(chuàng)新互聯(lián)公司于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元安仁做網(wǎng)站,已為上家服務,為安仁各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

看你主調(diào)函數(shù)(caller)跟被調(diào)函數(shù)(callee)是不是在同一個文件中,以及兩者的位置。

如果A.h中沒有聲明這個函數(shù),那么include沒有用。

如果你是編譯成了一個目標文件,你可以直接在caller定義前,加上callee的聲明。或者把callee的定義放在caller前定義。

在Linux下,在C中怎么調(diào)用C++的庫函數(shù)

調(diào)用C++函數(shù)庫,一般不能直接調(diào)用,需要將C++庫轉換成C接口輸出,方可以使用C調(diào)用

將 C++ 函數(shù)聲明為``extern "C"''(在你的 C++ 代碼里做這個聲明),然后調(diào)用它(在你的 C 或者 C++ 代碼里調(diào)用)。例如:

// C++ code:

extern "C" void f(int);

void f(int i)

{

// ...

}

然后,你可以這樣使用 f():

/* C code: */

void f(int);

void cc(int i)

{

f(i);

/* ... */

}

當然,這招只適用于非成員函數(shù)。如果你想要在 C 里調(diào)用成員函數(shù)(包括虛函數(shù)),則需要提供一個簡單的包裝(wrapper)。例如:

// C++ code:

class C

{

// ...

virtual double f(int);

};

extern "C" double call_C_f(C* p, int i) // wrapper function

{

return p-f(i);

}

然后,你就可以這樣調(diào)用 C::f():

/* C code: */

double call_C_f(struct C* p, int i);

void ccc(struct C* p, int i)

{

double d = call_C_f(p,i);

/* ... */

}

如果你想在 C 里調(diào)用重載函數(shù),則必須提供不同名字的包裝,這樣才能被 C 代碼調(diào)用。例如:

// C++ code:

void f(int);

void f(double);

extern "C" void f_i(int i) { f(i); }

extern "C" void f_d(double d) { f(d); }

然后,你可以這樣使用每個重載的 f():

/* C code: */

void f_i(int);

void f_d(double);

void cccc(int i,double d)

{

f_i(i);

f_d(d);

/* ... */

}

注意,這些技巧也適用于在 C 里調(diào)用 C++ 類庫,即使你不能(或者不想)修改 C++ 頭文件。

再看下面的例子:

aa.cxx

#include "aa.h"

int sample::method()

{

cout"method is called!\n";

}

aa.h

#include

using namespace std;

class sample

{

public:

int method();

};

將上面的兩個文件生成動態(tài)庫libaa.so放到 /usr/lib目錄下,編譯命令如下

sudo g++ -fpic -shared -g -o /usr/lib/libaa.so aa.cxx -I ./

由于在C中不能識別類,所以要將上面類的成員函數(shù)封裝成C接口函數(shù)輸出,下面進行封裝,將輸出接口轉換成C接口。

mylib.cxx

#include "add.h"

#ifndef _cplusplus

#define _cplusplus

#include "mylib.h"

#endif

int myfunc()

{

sample ss;

ss.method();

return 0;

}

mylib.h

#ifdef _cplusplus

extern "C"

{

#endif

int myfunc();

#ifdef _cplusplus

}

#endif

在linux下,gcc編譯器并沒用變量_cplusplus來區(qū)分是C代碼還是C++代碼,如果使用gcc編譯器,這里我們可以自己定義一個變量_cplusplus用于區(qū)分C和C++代碼,所以在mylib.cxx中定義了一個變量_cplusplus用于識別是否需要“extern "C"”將函數(shù)接口封裝成C接口。但是如果使用g++編譯器則不需要專門定義_cplusplus,編譯命令如下:

g++ -fpic -shared -g -o mylib.so mylib.cxx -la -I ./

main.c

#include

#include

#include "mylib.h"

int

main()

{

int (*dlfunc)();

void *handle; //定義一個句柄

handle = dlopen("./mylib.so", RTLD_LAZY);//獲得庫句柄

dlfunc = dlsym(handle, "myfunc"); //獲得函數(shù)入口

(*dlfunc)();

dlclose(handle);

return 0;

}

編譯命令如下:

gcc -o main main.c ./mylib.so -ldl

下面就可以執(zhí)行了。

需要說明的是,由于main.c 和 mylib.cxx都需要包含mylib.h,并且要將函數(shù)myfunc封裝成C接口函數(shù)輸出需要“extern "C"”,而C又不識別“extern "C"”,所以需要定義_cplusplus來區(qū)別處理mylib.h中的函數(shù)myfunc。

在main.c的main函數(shù)中直接調(diào)用myfunc()函數(shù)也能執(zhí)行,這里介紹的是常規(guī)調(diào)用庫函數(shù)的方法。

在linux 用shell腳本調(diào)用C語言的執(zhí)行文件,用到什么函數(shù),求大神幫分析一下

c調(diào)用shell為system(cmd)

shell調(diào)用c執(zhí)行文件和調(diào)用普通的命令一樣,如 ls cd pwd等命令都是c寫的執(zhí)行文件

如何利用Linux控制臺調(diào)用C/C++程序?

shell(控制臺)不能直接調(diào)用什么函數(shù),只能執(zhí)行文件或命令

寫好的程序都是需要編譯鏈接成2進制文件的

最簡單的hello.c

#includestdio.h

int main(){

printf("hello world!");

return 0;

}

編輯好后輸入gcc -o hello hello.c進行編譯

gcc是一般linux都有的編譯器

-o后面的參數(shù)就是生成的2進制文件名,否則文件名是a.out

然后輸入./hello就可以運行了

因為二進制文件是可以直接執(zhí)行的,需要在前面加上 ./ ,表示當前目錄

不知道你具體的要求是怎樣的

linux系統(tǒng)調(diào)用 shell命令 c庫函數(shù)怎么區(qū)分

首先,命令應該是好和其他兩個區(qū)分開來的了,因為命令都是可以直接敲在shell上面回車執(zhí)行的,而系統(tǒng)調(diào)用和庫函數(shù)都不行;

其次,Linux系統(tǒng)調(diào)用和C庫函數(shù)都是函數(shù)的形式,即都是“func(args)”的形式,但系統(tǒng)調(diào)用是

由系統(tǒng)內(nèi)核對外提供的服務接口;C庫函數(shù)和你自己寫的普通的函數(shù)沒有本質(zhì)的區(qū)別,只是在C標準庫中而已,Linux上面glibc就是C函數(shù)庫。從表面上看兩者不太好區(qū)分,不過,你可以從它們需要包含的頭文件來區(qū)分,C庫函數(shù)像printf在

中,std就是標準(standard)的縮寫形式,因此在

中的函數(shù),基本都是C庫函數(shù);像

ssize_t

read(int

fd,

void

*buf,

size_t

count);這樣很多的系統(tǒng)調(diào)用是包含在

中的,unistd意思是UNIX

Standard,從這個意義就可以區(qū)分了。

希望對你有所幫助,如還有問題,可隨時聯(lián)系我:-)

分享文章:linux命令調(diào)用c函數(shù) c語言調(diào)用linux命令
鏈接地址:http://chinadenli.net/article44/dododee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作小程序開發(fā)網(wǎng)站營銷電子商務全網(wǎng)營銷推廣商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設公司