-2

いくつかのシェル コマンドを実行する必要がある C ファイルを作成しようとしています。

私の仕事,

ユーザー名が の場合はjhamb何らかのタスクを実行し、それ以外の場合は他のタスクを実行します。

私のコード

#include<stdio.h>

main() {
     char username[10];
     system("echo $USER | username");
     if(username == "jhamb")  {
         //PERFORM SPECIFIC TASKS
     }
     else {  
          // PERFORM OTHER TASKS
     }        
}

しかし、適切な出力が得られませんでした。このコードの修正方法を教えてください。

編集 No.1

cat /etc/security/limits.conf | grep service | grep soft | awk '{print $4}'. このスクリプトは出力を提供します13000

この 13000 を変数に格納します。

Cファイルでこれを行うにはどうすればよいですか?

4

6 に答える 6

8

getenvなどの環境変数を取得するために使用しますUSER

関数を使用して、strcmp文字列が等しいかどうかを比較します。

于 2013-03-20T07:01:56.970 に答える
2
#include <stdio.h> //for popen
#include <string.h>    

char* cmd_system(const char* command)
{
    char* result = "";
    FILE *fpRead;
    fpRead = popen(command, "r");
    char buf[1024];
    memset(buf,'\0',sizeof(buf));
    while(fgets(buf,1024-1,fpRead)!=NULL)
    {
        result = buf;
    }
    if(fpRead!=NULL)
       pclose(fpRead);
    return result;
}

この関数を使用すると、戻り値を取得できます。

于 2013-03-20T07:06:30.503 に答える
1

Linuxコマンドを実行したい場合は、関数system()を試すことができます。この関数の概要は、こちらで確認できますこれを表示するプログラムも作成します。プログラムは、コマンド「ls」の使用方法を示します。

    #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
       int i;
       char *command;
       command = "ls";
       if(system(NULL))   printf("ok\n");
       else  exit(EXIT_FAILURE);
       i=system(command);
       printf(the value returned was:%d\n",i);
       return 0;
    }
于 2013-03-20T08:58:29.283 に答える
1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char *username;
    username = getenv("USER");
    if(strcmp(username,"jhamb") == 0){
        printf("Yes\n");
    }else{
        printf("No\n");
    }
}
于 2013-03-20T07:13:05.837 に答える
0

を使用して現在のユーザー名を取得してから使用しないgetlogin_r()のはなぜですか?unistd.hstrcmp

のマニュアルページを参照してくださいgetlogin_r

于 2013-03-20T07:09:20.810 に答える
0

コードは の結果をecho $USERBASH コマンドにパイプしますusername。それは C 変数とは異なりますusername

システム コマンドの出力を取得するには、 を使用しますpopenこのページに良い例があります。あなたの目的のために、このようなものがうまくいくはずです:

#include <stdio.h>

main() {
    char username[50];
    FILE *in;
    extern FILE *popen();

    if(!(in = popen("echo $USER","r"))) {
        exit(-1);
    }

    fgets(username, sizeof(username), in);

    if(strcmp(username,"jhamb") == 0) {
        // proceed
    }
}

strcmp特に、文字列の比較に使用する必要があることに注意してください。文字列自体は単なるポインターであり==、文字列が同一であるかどうかではなく、ポインターがメモリ内の同じ場所を指しているかどうかをテストします。

于 2013-03-20T07:12:04.310 に答える