女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【Linux+C語言】你真的了解system接口的調用嗎?

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-09-12 16:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?本期給大家介紹了一下Linux下system()函數的正確用法!

廢話不多說,相信你肯定也在system接口上填過坑!先上一把它的正確操作:

#include 
#include 

#define Debuging(fmt, arg...)    printf(fmt, ##arg)

int new_system(char *cmd, char *resultout, int buflen, int *lenout)
{
    int status = system(cmd);
    Debuging("cmd=%s\n", cmd);
    if (-1 == status)  
    {  
        Debuging("system error!\n");  
    }  
    else  
    {  
        Debuging("exit status value = [0x%x]\n", status);  
  
        if (WIFEXITED(status))  
        {  
            if (0 == WEXITSTATUS(status))  
            {  
                Debuging("run shell script successfully.\n");  
                return 0;
            }  
            else  
            {  
                Debuging("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));  
            }  
        }  
        else  
        {  
            Debuging("exit status = [%d]\n", WEXITSTATUS(status));  
        }  
    }  
  
    return -1;  
}

示例代碼中很好地展示了,如何判斷system接口的返回值!

以下是linux man中關于system接口的介紹:

SYSTEM(3)                                               Linux Programmer's Manual                                               SYSTEM(3)
NAME
      system - execute a shell command
SYNOPSIS
      #include
      int system(const char *command);
DESCRIPTION
      The system() library function uses fork(2) to create a child process that executes the shell command specified in command using
      execl(3) as follows:
          execl("/bin/sh", "sh", "-c", command, (char *) 0);
      system() returns after the command has been completed.
      During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored, in the process that calls system()
      (these signals will be handled according to their defaults inside the child process that executes command).
      If command is NULL, then system() returns a status indicating whether a shell is available on the system
RETURN VALUE
      The return value of system() is one of the following:
      * If command is NULL, then a nonzero value if a shell is available, or 0 if no shell is available.
      * If a child process could not be created, or its status could not be retrieved, the return value is -1.
      * If a shell could not be executed in the child process, then the return value is as though the child shell terminated by calling
          _exit(2) with the status 127.
      * If all system calls succeed, then the return value is the termination status of the child shell used to execute command.   (The
          termination status of a shell is the termination status of the last command it executes.)
      In the last two cases, the return value is a "wait status" that can be examined using the macros described in waitpid(2). (i.e.,
      WIFEXITED() WEXITSTATUS() and so on).
      system() does not affect the wait status of any other children.
ATTRIBUTES
      For an explanation of the terms used in this section, see attributes(7).
      ┌──────────┬───────────────┬─────────┐
      │Interface │ Attribute     │ Value   │
      ├──────────┼───────────────┼─────────┤
      │system() │ Thread safety │ MT-Safe │
      └──────────┴───────────────┴─────────┘
CONFORMING TO
      POSIX.1-2001, POSIX.1-2008, C89, C99.
NOTES
      system() provides simplicity and convenience: it handles all of the details of calling fork(2), execl(3), and waitpid(2), as well as
      the necessary manipulations of signals; in addition, the shell performs the usual substitutions and I/O redirections for command.
      The main cost of system() is inefficiency: additional system calls are required to create the process that runs the shell and to
      execute the shell.
      If the _XOPEN_SOURCE feature test macro is defined (before including any header files), then the macros described in waitpid(2)
      (WEXITSTATUS(), etc.) are made available when including .
      As mentioned, system() ignores SIGINT and SIGQUIT. This may make programs that call it from a loop uninterruptible, unless they
      take care themselves to check the exit status of the child. For example:
          while (something) {
              int ret = system("foo");
              if (WIFSIGNALED(ret) &&
                  (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                      break;
          }
      Do not use system() from a program with set-user-ID or set-group-ID privileges, because strange values for some environment vari‐
      ables might be used to subvert system integrity. Use the exec(3) family of functions instead, but not execlp(3) or execvp(3). sys‐
      tem() will not, in fact, work properly from programs with set-user-ID or set-group-ID privileges on systems on which /bin/sh is bash
      version 2, since bash 2 drops privileges on startup. (Debian uses a modified bash which does not do this when invoked as sh.)
      In versions of glibc before 2.1.3, the check for the availability of /bin/sh was not actually performed if command was NULL; instead
      it was always assumed to be available, and system() always returned 1 in this case. Since glibc 2.1.3, this check is performed
      because, even though POSIX.1-2001 requires a conforming implementation to provide a shell, that shell may not be available or exe‐
      cutable if the calling program has previously called chroot(2) (which is not specified by POSIX.1-2001).
      It is possible for the shell command to terminate with a status of 127, which yields a system() return value that is indistinguish‐
      able from the case where a shell could not be executed in the child process.
SEE ALSO
      sh(1), sigaction(2), sigprocmask(2), fork(2), wait(2), exec(3), signal(7)
COLOPHON
      This page is part of release 4.04 of the Linux man-pages project. A description of the project, information about reporting bugs,
      and the latest version of this page, can be found at http://www.kernel.org/doc/man-pages/.
?

總結:

1.Linux系統接口使用前務必了解其接口說明;

2.類似system接口,返回值為0的時候,并不代表命令一定執行成功了,這個需要特別注意;

3.讀懂man說明,也是一項基本的技能。


好了,本期的介紹就到這里了,你掌握了嗎?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9000

    瀏覽量

    153712
  • Linux
    +關注

    關注

    87

    文章

    11509

    瀏覽量

    213742
  • System
    +關注

    關注

    0

    文章

    166

    瀏覽量

    37804
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141670
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    怎么在C語言調用系統指令

    如果需要在C語言調用系統指令,經常使用system函數,操作簡單方便,很容易理解。
    發表于 09-06 14:50 ?694次閱讀

    C語言使用函數調用的知識點

    C語言使用函數調用,我們再熟悉不過了,但是函數調用在內存中究竟發生了什么真的清楚嗎?只有搞清楚內存里的內幕,才算完全搞懂函數的
    發表于 09-07 11:47 ?1038次閱讀

    請問為什么要在Linux下學習C語言

    接觸到的都是膚淺的表面。C語言就那么幾個語法嗎?這一行語句寫下去以后編譯器到底干了什么?他到底做了哪些優化?變量在內存中到底是一種怎樣的存在?編譯器真的會按照
    發表于 06-24 14:25

    真的都懂C語言

    發展前景的技術。1.嵌入式開發作為新人,第一C語言,有很多人自認為自己C語言很厲害,但是實際上一個從事嵌入式開發的老人,至少需要3-5年
    發表于 12-21 08:23

    LinuxC語言編程入門教程

    編程風格等。u3000u3000Linux 作為一個優秀的操作系統,一項非常重要的功能就是支持系統調用尤其是支持C語言的系統調用功能十分的方
    發表于 09-22 06:56

    淺談CC++ 和 ARM 匯編語言之間的調用

    之間的調用 本節提供一些示例,顯示如何從C++調用C和匯編語言代碼,以及從C和匯編
    發表于 10-19 09:24 ?2次下載

    需要深入了解linux下的system()函數

    system()會調用fork()產生子進程,由子進程來調用/bin/sh-c string來執行參數string字符串所代表的命令,此命>令執行完后隨即返回原
    發表于 05-05 15:00 ?3396次閱讀

    linux c使用system調用shell腳本

    system的原理其實就是調用fork創建子進程去執行shell命令,然后返回最后一條shell命令的狀態值。linux下man system可以看到返回值說明:?1.
    發表于 04-02 14:41 ?1364次閱讀

    LinuxC語言編程入門教程詳細說明

    本文是LinuxC 語言編程入門教程。主要介紹了Linux 的發展與特點、C語言的基礎知識、
    發表于 08-25 18:05 ?39次下載
    <b class='flag-5'>Linux</b>下<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門教程詳細說明

    C語言C++相互調用

    接口的問題,比如最常用的C++調用C接口來完成相應的外設驅動接口。 我們知道
    的頭像 發表于 01-18 11:05 ?3632次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>與<b class='flag-5'>C</b>++相互<b class='flag-5'>調用</b>

    如何區分xenomai、linux系統調用/服務

    對于同一個POSIX接口應用程序,可能既需要xenomai內核提供服務(xenomai 系統調用),又需要調用linux內核提供服務(linux
    的頭像 發表于 05-10 10:28 ?2471次閱讀

    C語言_Linux基本命令與C語言基礎

    這篇文章介紹在Linux環境下學習C語言搭建基本的環境過程,了解基礎的幾個命令使用方法,了解Linux
    的頭像 發表于 08-14 09:45 ?1471次閱讀

    C語言使用函數調用在內存中究竟發生了什么?

    C語言使用函數調用,我們再熟悉不過了,但是函數調用在內存中究竟發生了什么真的清楚嗎?只有搞清楚內存里的內幕,才算完全搞懂函數的
    的頭像 發表于 01-13 14:09 ?1592次閱讀

    深入探索Linux中的C語言

    本章將深入探索 Linux 中的 C 語言。在本章中,我們將學到更多關于編譯器、從源碼到二進制程序的 4 個步驟、如何使用 Make 工具以及系統調用
    的頭像 發表于 03-14 16:48 ?2366次閱讀

    充電接口真的了解嗎?

    不同的類型嗎?今天,我們就來詳細了解一下USB接口的三大類型:Type-A、Type-B和Type-C。 Type-A:最常見的“USB口” 外觀特征:扁平的矩形接口,通常用于電腦、電
    的頭像 發表于 05-18 17:39 ?706次閱讀