linuxc封装
⑴ 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接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。