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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

编写linux程序(linux 下编程)

發布時間:2023/12/3 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 编写linux程序(linux 下编程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux怎么進入編程命令?

linux進入編程命令,不同的編程語言有不同的方法。如果你用的是C語言的話,可以打開一個編輯器,在里面寫程序就可以了,當然,如果你習慣了WINDOWS的方式,你也可以在linux下面圖形界面,然后在圖形界面下進入編輯器就可以開始編程序了。

另外,你還可以直接在命令行上寫你的程序,把他輸出到一個文件當中,賦予執行權限就可以了。

學好在linux下編程難嗎?

不難,Linux的API才300多,windows號稱上千,你能學好windows下的編程,Linux就沒問題。

關鍵是個思維的轉換,Linux下沒有(或者說沒有好用的)像VC一樣的IDE,大多數開發人員使用vim/emacs+gcc+gdb開發,都是命令行的,從windows轉過來,這是個坎兒。

而且Linux沒有像MFC一樣的高層抽象,基本都是直接調用C庫或者系統調用,門檻稍微高了點兒。

建議你看看《Linux程序設計》,等入門了,再讀讀APUE。

加油!

linux下怎樣進行攝像頭編程?

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

打開設備文件。

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

2. 取得設備的capability,看看設備具有什么功能,比如是否具有輸入,或者音頻輸入輸出等。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. 選擇輸入,一個設備可以有多個輸入。VIDIOC_S_INPUT,struct v4l2_input(可不要)

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

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. 向驅動申請幀緩沖,一般不超過5個。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.申請物理內存

將申請到的幀緩沖映射到用戶空間,這樣就可以直接操作采集到的幀了,而不必去復制。將申請到的幀緩沖全部入隊列,以便存放采集到的數據.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));

//內存映射

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. 開始的采集。

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. 出隊列以取得已采集數據的幀緩沖,取得原始采集數據。VIDIOC_DQBUF, 將緩沖重新入隊列尾,這樣可以循環采集。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. 關閉設備。close(fd);

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。