日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

编写linux程序(linux 下编程)

發(fā)布時(shí)間:2023/12/3 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 编写linux程序(linux 下编程) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux怎么進(jìn)入編程命令?

linux進(jìn)入編程命令,不同的編程語(yǔ)言有不同的方法。如果你用的是C語(yǔ)言的話,可以打開(kāi)一個(gè)編輯器,在里面寫(xiě)程序就可以了,當(dāng)然,如果你習(xí)慣了WINDOWS的方式,你也可以在linux下面圖形界面,然后在圖形界面下進(jìn)入編輯器就可以開(kāi)始編程序了。

另外,你還可以直接在命令行上寫(xiě)你的程序,把他輸出到一個(gè)文件當(dāng)中,賦予執(zhí)行權(quán)限就可以了。

學(xué)好在linux下編程難嗎?

不難,Linux的API才300多,windows號(hào)稱上千,你能學(xué)好windows下的編程,Linux就沒(méi)問(wèn)題。

關(guān)鍵是個(gè)思維的轉(zhuǎn)換,Linux下沒(méi)有(或者說(shuō)沒(méi)有好用的)像VC一樣的IDE,大多數(shù)開(kāi)發(fā)人員使用vim/emacs+gcc+gdb開(kāi)發(fā),都是命令行的,從windows轉(zhuǎn)過(guò)來(lái),這是個(gè)坎兒。

而且Linux沒(méi)有像MFC一樣的高層抽象,基本都是直接調(diào)用C庫(kù)或者系統(tǒng)調(diào)用,門(mén)檻稍微高了點(diǎn)兒。

建議你看看《Linux程序設(shè)計(jì)》,等入門(mén)了,再讀讀APUE。

加油!

linux下怎樣進(jìn)行攝像頭編程?

在linux下所有設(shè)備都是文件。所以對(duì)攝像頭的操作其實(shí)就是對(duì)文件的操作。USB攝像頭的設(shè)備文件就是在/dev目錄下的video0(假如只有一個(gè)攝像頭)。在linux下操作攝像頭就是使用v4l2對(duì)攝像頭進(jìn)行的操作,操作步驟如下

打開(kāi)設(shè)備文件。

int fd=open(”/dev/video0″,O_RDWR);

2. 取得設(shè)備的capability,看看設(shè)備具有什么功能,比如是否具有輸入,或者音頻輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability

v4l2_std_id std;

do {

ret= ioctl(fd, VIDIOC_QUERYSTD, std);

} while (ret == -1 errno == EAGAIN);

switch (std) {

case V4L2_STD_NTSC:

//……

case V4L2_STD_PAL:

//……

}

3. 選擇輸入,一個(gè)設(shè)備可以有多個(gè)輸入。VIDIOC_S_INPUT,struct v4l2_input(可不要)

4. 設(shè)置的制式和幀格式,制式包括PAL,NTSC,幀的格式個(gè)包括寬度和高度等。

VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

struct v4l2_format fmt;

memset ( fmt, 0, sizeof(fmt) );

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

fmt.fmt.pix.width = 320;

fmt.fmt.pix.height = 240;

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;

if (ioctl(fd, VIDIOC_S_FMT, fmt) < 0)

{

printf("set format failedn");

//return 0;

}

5. 向驅(qū)動(dòng)申請(qǐng)幀緩沖,一般不超過(guò)5個(gè)。struct v4l2_requestbuffers

struct v4l2_requestbuffers req;

memset(req, 0, sizeof (req));

req.count = 4;

req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

req.memory = V4L2_MEMORY_MMAP;

if (ioctl(fd,VIDIOC_REQBUFS,req) == -1)

{

perror("VIDIOC_REQBUFS error n");

//return -1;

}

6.申請(qǐng)物理內(nèi)存

將申請(qǐng)到的幀緩沖映射到用戶空間,這樣就可以直接操作采集到的幀了,而不必去復(fù)制。將申請(qǐng)到的幀緩沖全部入隊(duì)列,以便存放采集到的數(shù)據(jù).VIDIOC_QBUF,struct v4l2_buffer

VideoBuffer* buffers = calloc( req.count, sizeof(VideoBuffer) );

printf("sizeof(VideoBuffer) is %dn",sizeof(VideoBuffer));

struct v4l2_buffer buf;

for (numBufs = 0; numBufs < req.count; numBufs++)

{

memset( buf, 0, sizeof(buf) );

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

buf.memory = V4L2_MEMORY_MMAP;

buf.index = numBufs;

if (ioctl(fd, VIDIOC_QUERYBUF, buf) < 0)

{

printf("VIDIOC_QUERYBUF errorn");

//return -1;

}

printf("buf len is %dn",sizeof(buf));

//內(nèi)存映射

buffers.length = buf.length;

buffers.offset = (size_t) buf.m.offset;

buffers.start = mmap (NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);

printf("buffers.length = %d,buffers.offset = %d ,buffers.start = %dn",buffers.length,buffers.offset,buffers.start);

printf("buf2 len is %dn",sizeof(buffers.start));

if (buffers.start == MAP_FAILED)

{

perror("buffers errorn");

//return -1;

}

if (ioctl (fd, VIDIOC_QBUF, buf) < 0)

{

printf("VIDIOC_QBUF errorn");

//return -1;

}

}

7. 開(kāi)始的采集。

enum v4l2_buf_type type;

type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

if (ioctl (fd, VIDIOC_STREAMON, type) < 0)

{

printf("VIDIOC_STREAMON errorn");

// return -1;

}

8. 出隊(duì)列以取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù)。VIDIOC_DQBUF, 將緩沖重新入隊(duì)列尾,這樣可以循環(huán)采集。VIDIOC_QBUF

if (ioctl(fd, VIDIOC_DQBUF, buf) < 0)

{

perror("VIDIOC_DQBUF failed.n");

//return -1;

}

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

buf.memory = V4L2_MEMORY_MMAP;

unsigned char *ptcur = buffers.start;

DEBUG("buf.bytesused = %d n",buf.bytesused);

int i1;

for(i1=0; i1<buf.bytesused; i1++)

{

if((buffers.start == 0xFF) (buffers.start == 0xC4))

{

DEBUG("huffman table finded! nbuf.bytesused = %dnFFC4 = %d n",buf.bytesused,i1);

break;

}

}

if(i1 == buf.bytesused)printf("huffman table don't exist! n");

int i;

for(i=0; i<buf.bytesused; i++)

{

if((buffers.start == 0xFF) (buffers.start == 0xD8)) break;

ptcur++;

}

DEBUG("i=%d,FF=%02x,D8=%02xn",i,buffers.start,buffers.start);

int imagesize =buf.bytesused - i;

DEBUG("buf.bytesused = %d n",buf.bytesused);

DEBUG ("imagesize = %d n",imagesize);

9. 停止的采集。VIDIOC_STREAMOFF

10. 關(guān)閉設(shè)備。close(fd);

總結(jié)

以上是生活随笔為你收集整理的编写linux程序(linux 下编程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。