當前位置:首頁 » 操作系統 » linuxc封裝

linuxc封裝

發布時間: 2022-06-27 06:34:11

linux c和vc有什麼區別

c和c++是語言
而vc是c++的的一種編譯工具
c和c++在很多方面有相同的地方,不過c++是面向對象的,也可以說是
c
的升級
也就是把一些有共同特性的東西封裝在一個"類"中
這樣就更有可讀性了

⑵ 怎樣實現linux下c/c++對文件加密壓縮成zip文件

網上有封裝好的庫~好像是gzip 以前用過很好使的,可以解壓 也可以壓縮~

⑶ C或者c++封裝一個socket類,然後可以同時在windows和linux下使用,能行么

WinSocket編程就不行,換言之,如果你用了各種提供方法,比如ipheader結構體,
還有一些封裝好的傳輸函數等等,如果你寫的socket類中完全是純C或C++的話,應該可以,
」純C或C++「的意思是所有的結構體到傳輸校驗都是你自己實現的,這樣才行

⑷ linux下的c與windows下的c的區別

linux
:庫
編輯器
編譯器
都是分別安裝的
運用靈活
windows:
一般是集成開發環境,包含了上述東西
c都有個標准庫,那個是一樣的,其他的就不一定一樣了,linux下的庫可以等你需要時再安裝進系統,還有相關文檔說明
linux下有c++的
其實linux下有個很強大的glibc庫,他將c重新封裝,直接可以用c進行面向對象的開發

⑸ 如何把linux下的C程序移植到windows下面

看你用了什麼庫文件的函數
然後查一下windows平台有沒有相同的函數或者相同功能不同命的函數
如果沒有的話,就需要你自己實現了

如果需要跨平台移植的話,最好不要用平台相關函數,或者加一個介面封裝,把所有依賴平台的函數都封裝到一個庫裡面,改變平台時,只需要實現這個庫就可以了

頭文件無法找到只是表象,函數找不到才是根

⑹ linux下,用c++封裝了一個線程庫的類,cthread,用的是pthread的函數。 這種做法

多吧,一般寫多線程服務都會根據業務需求寫一個線程基類,讓其它業務線程繼承這個基類

⑺ Linux下編程消息隊列怎麼封裝較好,怎麼保證2個進程能用同一個消息隊列

消息隊列就是用來進程間通信的, 每個進程只要知道消息隊列的queueID即可

#ifndef CMSGOP_H
#define CMSGOP_H
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
class CMsgOp
{
public:
CMsgOp();
virtual ~CMsgOp();
typedef struct _customMessageFormat{
int processID;
int cmd;
int commandArg;
}CCustomMessageFormat;

int init();
int send(const CCustomMessageFormat &message);
int receive(CCustomMessageFormat &message);
private:
int msgQueueID;
struct msgbuf sendBuf;
struct msgbuf recvBuf;

};

#endif // CMSGOP_H

#include "cmsgop.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
CMsgOp::CMsgOp()
{
}

CMsgOp::~CMsgOp()
{
msgctl(msgQueueID, IPC_RMID, NULL);
}

int CMsgOp::init()
{
key_t key = ftok("/home/maemo/tmp2", 1);
if(-1 == key)
{
perror("ftok failed!");
return -1;
}

int ret = msgget(key, IPC_CREAT);
if(-1 == ret)
{
perror("create message queue failed!");
return -1;
}

msgQueueID = ret;
return 0;
}

int CMsgOp::send(const CCustomMessageFormat &message)
{
memcpy(sendBuf.mtext, &message, sizeof(CCustomMessageFormat));
sendBuf.mtype = 1;
int ret = msgsnd(msgQueueID, &sendBuf, sizeof(CCustomMessageFormat), 0);
if(-1 == ret)
{
perror("message send failed!");
return ret;
}
}

int CMsgOp::receive(CCustomMessageFormat &message)
{
int ret = msgrcv(msgQueueID, &recvBuf, sizeof(CCustomMessageFormat), 0, IPC_NOWAIT);
if(-1 == ret)
{
perror("receive message failed!");
return -1;
}

memcpy(&message, recvBuf.mtext, sizeof(CCustomMessageFormat));
return ret;
}

⑻ linux下用C語言對mysql中select語句的封裝

1.需要用到mysql c api
2.步驟通常是:連接資料庫,執行查詢,異常處理這些。
3.你需要對api 進行一些了解,然後合理調用。
參考代碼:
//連接代碼:

/*
* connect1.c - connect to and disconnect from MySQL server
*/
#include <my_global.h>
#include <my_sys.h>
#include <mysql.h>

static char *opt_host_name = NULL; /* server host (default=localhost) */
static char *opt_user_name = NULL; /* username (default=login name) */
static char *opt_password = NULL; /* password (default=none) */
static unsigned int opt_port_num = 0; /* port number (use built-in value) */
static char *opt_socket_name = NULL; /* socket name (use built-in value) */
static char *opt_db_name = NULL; /* database name (default=none) */
static unsigned int opt_flags = 0; /* connection flags (none) */
static MYSQL *conn; /* pointer to connection handler */
int
main (int argc, char *argv[])
{
/* initialize connection handler */
conn = mysql_init (NULL);
if (conn == NULL)
{
fprintf (stderr, "mysql_init() failed (probably out of memory)\n");
exit (1);
}
/* connect to server */
if (mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL)
{
fprintf (stderr, "mysql_real_connect() failed\n");
mysql_close (conn);
exit (1);
}
/* disconnect from server */
mysql_close (conn);
exit (0);
}

//處理sql 語句的函數:

void
process_statement (MYSQL *conn, char *stmt_str)
{
MYSQL_RES *res_set;
if (mysql_query (conn, stmt_str) != 0) /* the statement failed */
{
print_error (conn, "Could not execute statement");
return;
}
/* the statement succeeded; determine whether it returned data */
res_set = mysql_store_result (conn);
if (res_set) /* a result set was returned */
{
/* process rows and then free the result set */
process_result_set (conn, res_set);
mysql_free_result (res_set);
}
else /* no result set was returned */
{
/*
* does the lack of a result set mean that the statement didn't
* return one, or that it should have but an error occurred?
*/
if (mysql_field_count (conn) == 0)
{
/*
* statement generated no result set (it was not a SELECT,
* SHOW, DESCRIBE, etc.); just report rows-affected value.
*/
391
Processing SQL Statements
printf ("%lu rows affected\n",
(unsigned long) mysql_affected_rows (conn));
}
else /* an error occurred */
{
print_error (conn, "Could not retrieve result set");
}
}
}

//以上提供的是常規的處理,你需要根據實際情況完善。
//同時調用了一些mysql 的api函數。

ref:
MySQL
(Fourth Edition)
Paul DuBois

⑼ Linux c/c++ 下 使用webkit 有封裝好用的庫沒

就目前我所了解的和現在正在開發的具體開發有:伺服器(網路方向)、pos機(網路+資料庫)、KTV點唱系統、應急系統等。其實這些在其他系統上做也可以,只不過由於linux的開源和免費,並且可裁剪,所以很多廠商喜歡在linux平台上進行開發。 建議...

⑽ linux下qt製作的界面怎麼封裝

一、QT簡介

Qt是一個跨平台的C++圖形用戶界面庫,.由挪威TrollTech公司出品,目前包括Qt/X11,基於Frambuffer的Qt Embedded,快 速開發工具Qt Designer幾國際化工具Qt Linguist等.Qt支持Unix及Linux系統,還支持 Windows NT/Windows 2k及Qindows 95/98平台.Qt的良好封裝機制使其模塊化程度非常高,可重用性較好.

Qt/Embeded是面向嵌入式系統的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++ GUI和基於Linux的嵌入式品台開發工具。Qt/EmbededAPI可用於多種開發項目。許多基於Qt的XWindow程序可以非常方便地移植到嵌入式版本。

下面我們就從實際應用中認識Qt.

二、在終端下編寫Qt程序

我們先要介紹在終端窗口編寫Qt程序.

打開一個終端,建立一個文件夾,如:mkdir hello

然後進入這個文件夾:cd hello

創建c++文件,vi hello.cpp

在文件中鍵入下面的代碼:

#include <qapplication.h>

#include <qlabel.h>

int main(int argc,char *argv[])

{

QApplication app(argc,argv);

QLabel *label=new QLabel("Hello Qt!",0);

app.setMainWidget(label);

label->show();

return app.exec();

}

然後我們用qt的工具qmake來生成工程文件:

qmake -project

大家可以用ls查看一下,是不是多了一個名為hello.pro的工程文件.

接下來是生成Makefile文件:

qmake hello.pro

呵呵,ls一下,Makefile終於看到你的.

接下來就是make了,等上一段時間.

運行程序./hello

下面是界面:

下面我們來講解上面的程序:

#include <qapplication.h>

這一行包含了QApplication類的定義。在每一個使用Qt的應用程序中都必須使用一個QApplication對象。QApplication管理了各種各樣的應用程序的廣泛資源,比如默認的字體和游標。

#include <qpushbutton.h>

這一行包含了QPushButton類的定義。參考文檔的文件的最上部分提到了使用哪個類就必須包含哪個頭文件的說明。

QPushButton是一個經典的圖形用戶界面按鈕,用戶可以按下去,也可以放開。它管理自己的觀感,就像其它每一個QWidget。一個窗口部件就是一個可以處理用戶輸入和繪制圖形的用戶界面對象。程序員可以改變它的全部觀感和它的許多主要的屬性(比如顏色),還有這個窗口部件的內容。一個QPushButton可以顯示一段文本或者一個QPixmap。

int main( int argc, char **argv )

main()函數是程序的入口。幾乎在使用Qt的所有情況下,main()只需要在把控制轉交給Qt庫之前執行一些初始化,然後Qt庫通過事件來向程序告知用戶的行為。

argc是命令行變數的數量,argv是命令行變數的數組。這是一個C/C++特徵。它不是Qt專有的,無論如何Qt需要處理這些變數(請看下面)。

QApplication a( argc, argv );

a是這個程序的QApplication。它在這里被創建並且處理這些命令行變數.在任何Qt的窗口系統部件被使用之前創建QApplication對象是必須的。

QPushButton hello( "Hello world!", 0 );

這里,在QApplication之後,接著的是第一個窗口系統代碼:一個按鈕被創建了。

這個按鈕被設置成顯示「Hello world!」並且它自己構成了一個窗口(因為在構造函數指定0為它的父窗口,在這個父窗口中按鈕被定位)。

hello.resize( 100, 30 );

這個按酒被設置成100像素寬,30像素高(加上窗口系統邊框)。在這種情況下,我們不用考慮按鈕的位置,並且我們接受默認值。

a.setMainWidget( &hello );

這個按鈕被選為這個應用程序的主窗口部件。如果用戶關閉了主窗口部件,應用程序就退出了。

你不用必須設置一個主窗口部件,但絕大多數程序都有一個。

hello.show();

當你創建一個窗口部件的時候,它是不可見的。你必須調用show()來使它變為可見的。

return a.exec();

這里就是main()把控制轉交給Qt,並且當應用程序退出的時候exec()就會返回。

在exec()中,Qt接受並處理用戶和系統的事件並且把它們傳遞給適當的窗口部件。

熱點內容
刪資料庫事件 發布:2024-11-15 12:10:54 瀏覽:455
資料庫選課管理系統 發布:2024-11-15 12:10:15 瀏覽:126
android音樂波形圖 發布:2024-11-15 11:57:12 瀏覽:378
福建社保銀行卡初始密碼是多少 發布:2024-11-15 11:47:40 瀏覽:911
游戲多開用什麼配置 發布:2024-11-15 11:46:51 瀏覽:729
管理java版本 發布:2024-11-15 11:44:03 瀏覽:629
ndk編譯的程序如何執行 發布:2024-11-15 11:43:18 瀏覽:626
輕應用伺服器適合搭建網站嗎 發布:2024-11-15 11:36:08 瀏覽:246
c語言的百分號 發布:2024-11-15 11:34:24 瀏覽:31
一加五安卓8什麼時候推送 發布:2024-11-15 11:19:40 瀏覽:854